SlideShare une entreprise Scribd logo
1  sur  36
Télécharger pour lire hors ligne
View360 개발기
-오픈소스화로 기술부채 청산한 이야기-
네이버 FE플랫폼 김희재
내용
소프트웨어 개발 과정에서
기술부채가 왜 발생했고
프로젝트에 어떤영향을 주었으며
오픈소스화로 어떻게 문제상황을 벗어날 수 있었는지
오픈소스로 공개하면 어떤 장점이 있지?
내 프로젝트로 오픈소스로 할때는 어떤 점에 신경쓰면 좋지?
View360 체험해 보시죠
goo.gl/3vsUUf
현재는 네이버TV에 열심히 적용 중…

360영상도 모바일 브라우저에서 곧!
FE 플랫폼
• 네이버의 FE 기술 지원 조직
• 사내 서비스들을 위한 WEB UI 라이브러리 개발
• 경쟁력 있는 컴포넌트는 오픈소스로 공개
• egjs, billboard.js, jindo.js
> 여러 서비스들의 이슈를 압축적으로 경험하면서 빠르게 성장 할 것을 기대하고 입사
“360도 뷰어 만들어 보실 분?”
< -- 오너쉽에 목마른 2년차 FE개발자
요구사항
• 네이티브 WEBGL로 직접 구현
• 안드로이드 등 모바일 브라우저 호환성 확보
• 디바이스 모션 컨트롤
> 정점 쉐이더, 프래그먼트 쉐이더, OpenGL 렌더링 파이프라인
> 오일러각, 짐벌락, 쿼터니언, 센서퓨전, 칼만 필터, LERP, SLERP …
“음 .. 이해하고 구현해 내면 일단 성공”
기술부채 발생이 불가피했던 상황
• 콘셉트 증명 단계로 간주
• 요구사항만 만족하면 됨
• 관련 지식과 경험이 부족하여 구현 하는 것이 1순위
• 1인 개발
• 협업을 위해 코드의 품질을 신경 쓸 필요가 없음(!)
• 문서화? 나중에…
• 테스트코드? 일단 돌아가야 하지 않을까…
• CI? 빨리 일단 돌아가게 만들어야 ㅠㅠ
라이브러리를 서비스 부서에 전달했는데…
> 버그를 수정하면 다른 버그가 발생
> QA 사이클로 감당하기 힘들게 연속해서 발생하는 수정 부작용
> 두번의 배포연기
기술부채(Technical Debt)
• 빠르지만 지저분한 방식으로 일하면 기술 부채로 압박 받게됨
• 기술부채를 지고 빠른 출시를 할 수 있음
• 하지만 기술부채 를 청산하지 않으면 이자가 계속 커짐
• 이자: 유지보수, 기능추가를 위해 추가적으로 들여야 하는 개발시간
• 따라서 시기 적절하게 부채 원금을 청산하지 않으면 이자 복리의 효과까
지 더해서 망하는 소프트웨어가 됨
View360 에서의 초기 기술부채
• 테스트 코드 X
• 하나를 고치면 어디서 부작용이 생길지 알 수가 없습니다.
• 따라서 기능 추가를 하기 힘들어짐
• 공감할 수 없는 구조설계
• 남이 공감할 수 없는 구조라면 미래의 나도 이해할 수 없습니다.
• "여기 왜 이렇게 짰지...."
• 코드만 봐도 구조설계가 납득될 수 있도록 구조를 잘 짜야합니다
• 군더더기가 많은 API
• 어떤 기능까지 필요하게 될 지 예측해가면서 개발
• 문서화
• 설계문서, 스펙문서: 최소한 만 수행
• 핵심기술 원리: X
처음부터 다시 둘이서 만들기
• 새로운 시니어 멤버!
• 둘이서 개발진행
• 와! 이제 코드 리뷰하고 받을 수 있다!
• WebGL과 센서신호처리관련 이론을 공부하여 출발선 맞춤
• 구조 설계 함께 진행
오픈소스화 기준에 맞춰

부채청산 시작
구글의 사례: 텐서플로
“많은 분들이 구글이 하는 모든 프로젝트가 철저한 계획 아래 깔끔하고 효
율적으로 진행될 걸로 생각하십니다. 사실 항상 그렇지 않습니다. 많은 프
로젝트가 처음엔 엉망진창이며, 관련된 문서는 찾기 힘듭니다. 같은 일을
여러 번 반복하기도 하죠. 그런데 기술을 오픈소스화하면 (외부에 공개되
기 때문에) 문서 작성나 작업을 체계화하는 데 많은 노력을 들입니다. 이
건 과정에서 팀 전체가 일주일 동안 문서화 작업에 집중하기도 합니다. 이
건 구글에게 매우 좋은 영향을 끼칩니다.”
구글 브레인 팀 - 마이크 슈스터
http://www.bloter.net/archives/254962
이슈/커밋메시지/문서는 영어로 작성
• 지나가던 개발자는 웬만하면 영어를 씀
• 작성하다보면 익숙해짐
• 비슷한 표현을 스택오버플로우나 다른 깃허브 프로젝트 이슈에서 찾아
보면서 응용하면 더 쉽다
커밋메시지 잘 쓰기
• 이 코드는 왜 이렇지? 를 해결
• 정해진 포멧 준수
${작업의 종류}(${작업대상 모듈}): 작업 내용
Ref #${해당 이슈번호}
Pull Request 단위를 줄이기
• 리뷰를 의미있게 하기 위한 조건
• 되도록이면 1이슈 1PR 이 좋다고 봄
테스트의 중요성
• 기능 추가 전후 두려움이 줄어든다
• 문제 없을거에요! 테스트 통과했으니까! 라고 말할 수 있게된다.
• 문제 생기면 해당 이슈를 테스트로 추가하면 되니 개꿀!
• PR을 받을 수 있는 최소한의 준비
• 테스트 없는 오픈 소스의 경우 PR 을 넣어도
• 이것저것 테스트 해보고 응답드릴게요 라고 핑계를 대면서 외부PR을 잘 안받는
경우가 있음
테스트 작성
• 구조와 API 설계가 어느정도 안정되고 나서 테스트 작성시작
• 테스트가 작성이 힘들면 테스트 가능성 높아지도록 리팩토링.
• 특정기능을 모듈로 분리하거나
• Mocking 을 용이하게 리팩토링 하거나
• WebGL 렌더링 테스트 방법 적용
• 캡쳐한 이미지와 정답 이미지의 diff 를 비교
• 디바이스 모션은 테스트 헬퍼 구현
PR 단계에서 CI 활용
• CI 지속적 통합
• PR 을 날렸을때, 해당 코드 품질 체크
1. 빌드가 되어야함
2. 코드컨벤션이 맞아야함
3. 단위 테스트를 모두 통과해야함
4. 테스트 커버리지가 감소하지 않아야함(!) Travis CI+ coveralls 좋아요
느슨해지지 않도록 제3의 감독관이 있는 느낌
시맨틱 버저닝
• X.Y.Z (Major.Minor.Patch)
• Major: 업데이트 시 기존 코드를 수정해야하는 경우 (breaking change)
• Miner: 기존 API 변경없는 기능추가
• Patch: API 변경이 전혀없는 버그수정
릴리즈 시 시맨틱 버저닝을 따르기
• 기존 라이브러리 전달 방식
• A서비스- a기능 에 이슈가 있어요 고쳐주세요 (1월 20일)
• 수정 후 A_0120 이라는 태그를 따서 전달
• A_1023, B_1120 이라는 태그가 남발.
• 수정사항 어떻게 합치지...
• 사내 버전을 따로 두지 않고 외부 공개된 단일 패키지만 제공하기
• 시맨틱 버저닝을 적용하여, 빠른 이슈 수정요청이 들어올 경우
• 해당 내용을 외부 공개 이슈로 등록 하고 수정반영 하여 바로 릴리즈 후 해당 부
서에 제공
• 관리되는 브랜치가 하나라서 합칠 고민 안해도 된다.
가이드 문서 작성하기
• 메이저 업그레이드를 대비한 마이그레이션 문서(!)
• 메이저 버전 변경 릴리즈 시에는 breaking change 에 대한 문서를 꼭 써야함
(없으면 사내 개발자도 새 버전으로 업그레이드 못해줌…)
• https://github.com/naver/egjs-view360/wiki/3.0.0-rc-Change-Notes
소개페이지 만들기
• 라이브러리에 대한 이해를 도울 수
있음
• 소개페이지를 안 만들면 특히 비개
발자는 소외됩니다
• https://naver.github.io/egjs-view360
커뮤니티에 기여하기
이 때 부채청산과정에서 나온 결과물을 활용할 수 있다.
• 기술 블로그 글 작성
• 내가 해결한 문제를 겪고 있는 프로젝트에 PR 날리기
• 내가 해결한 문제와 관련된 스택오버 플로우 질문에 답변달기
• 내 프로젝트 진행 중 타 깃허브 프로젝트 이슈들 레퍼런스 걸기(!)
• 연구 결과 공유하기
• 컨퍼런스나 개발자 밋업에서 발표
• DEVIEW 2017 ­ 밑바닥부터 시작하는 360뷰어
오픈소스화 과정을 통해 얻은점
• 포지셔닝 작업을 통해 존재이유가 생김
• 빠르고 가벼운 모바일웹에서도 잘 돌아가는 360 동영상/이미지 뷰어
• 라이브러리 품질이 올라감
• 테스트 작성 및 API 설계 완성도 확보
• 품질이 떨어질 수 있는 여지를 최대한 줄여놓아서 외부개발자 참여를 받
기 용이
naver/egjs-view360
저장소를 방문하시면 발표내용에 언급된 내용들이
실제로 적용된 모습을 참고하실 수 있습니다.
오픈소스화 과정을 통해 느낀점
• 타인을 고려하면 할 수록 가치가 더해지는 소셜코딩의 힘
• 나, 미래의 나, 같이 일하는 동료개발자, 타 부서의 개발자/기획자, 사외
개발자/기획자, 내 오픈소스를 이용해 다른것을 개발하는 개발자, 경쟁
오픈소스의 개발자, 스택오버플로우에서 나와 같은 문제로 질문을 올린
개발자, 답변을 단 개발자.
• 다양한 방식의 활동을 통해 내 프로젝트의 품질도 올라가고, 내 지식과
경험도 확장되는 경험
• 소셜코딩으로 다같이 폭풍성장 해요.
끝!
감사합니다.

Contenu connexe

Tendances

커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님NAVER D2
 
신림프로그래머모임_개발프로세스개선기
신림프로그래머모임_개발프로세스개선기신림프로그래머모임_개발프로세스개선기
신림프로그래머모임_개발프로세스개선기none
 
Next Javascript ES2015 시작하기
Next Javascript ES2015 시작하기Next Javascript ES2015 시작하기
Next Javascript ES2015 시작하기JinKwon Lee
 
[D2]pinpoint 개발기
[D2]pinpoint 개발기[D2]pinpoint 개발기
[D2]pinpoint 개발기NAVER D2
 
실시간으로 안드로이드 프론트엔드 작업하기
실시간으로 안드로이드 프론트엔드 작업하기실시간으로 안드로이드 프론트엔드 작업하기
실시간으로 안드로이드 프론트엔드 작업하기Haze Lee
 
[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효NAVER D2
 
제 5회 D2 CAMPUS FEST O.T - billboard.js 차트오픈소스개발기
제 5회 D2 CAMPUS FEST O.T -  billboard.js 차트오픈소스개발기제 5회 D2 CAMPUS FEST O.T -  billboard.js 차트오픈소스개발기
제 5회 D2 CAMPUS FEST O.T - billboard.js 차트오픈소스개발기NAVER D2
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기NAVER D2
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기nexusz99
 
최전방 생존법 - 프론트엔드 개발자로 살아가기
최전방 생존법 - 프론트엔드 개발자로 살아가기최전방 생존법 - 프론트엔드 개발자로 살아가기
최전방 생존법 - 프론트엔드 개발자로 살아가기Hyeonjin Cho
 
이클립스 플랫폼
이클립스 플랫폼이클립스 플랫폼
이클립스 플랫폼Kenu, GwangNam Heo
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교Junyoung Lee
 
bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포KwangSeob Jeong
 
필요해서 하는 개발 자동화
필요해서 하는 개발 자동화필요해서 하는 개발 자동화
필요해서 하는 개발 자동화none
 
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규ChangKyu Song
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018devCAT Studio, NEXON
 
티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법Young D
 
112 deview
112 deview112 deview
112 deviewNAVER D2
 
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!영호 김
 

Tendances (20)

커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님
 
Cooking jquery
Cooking jqueryCooking jquery
Cooking jquery
 
신림프로그래머모임_개발프로세스개선기
신림프로그래머모임_개발프로세스개선기신림프로그래머모임_개발프로세스개선기
신림프로그래머모임_개발프로세스개선기
 
Next Javascript ES2015 시작하기
Next Javascript ES2015 시작하기Next Javascript ES2015 시작하기
Next Javascript ES2015 시작하기
 
[D2]pinpoint 개발기
[D2]pinpoint 개발기[D2]pinpoint 개발기
[D2]pinpoint 개발기
 
실시간으로 안드로이드 프론트엔드 작업하기
실시간으로 안드로이드 프론트엔드 작업하기실시간으로 안드로이드 프론트엔드 작업하기
실시간으로 안드로이드 프론트엔드 작업하기
 
[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효
 
제 5회 D2 CAMPUS FEST O.T - billboard.js 차트오픈소스개발기
제 5회 D2 CAMPUS FEST O.T -  billboard.js 차트오픈소스개발기제 5회 D2 CAMPUS FEST O.T -  billboard.js 차트오픈소스개발기
제 5회 D2 CAMPUS FEST O.T - billboard.js 차트오픈소스개발기
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기
 
최전방 생존법 - 프론트엔드 개발자로 살아가기
최전방 생존법 - 프론트엔드 개발자로 살아가기최전방 생존법 - 프론트엔드 개발자로 살아가기
최전방 생존법 - 프론트엔드 개발자로 살아가기
 
이클립스 플랫폼
이클립스 플랫폼이클립스 플랫폼
이클립스 플랫폼
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교
 
bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포
 
필요해서 하는 개발 자동화
필요해서 하는 개발 자동화필요해서 하는 개발 자동화
필요해서 하는 개발 자동화
 
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
 
티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법
 
112 deview
112 deview112 deview
112 deview
 
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
 

Similaire à [네이버오픈소스세미나] egjs-view360 개발기 - 김희재

[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스Hee Jae Lee
 
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기Seokjae Lee
 
성장하는 스타트업의 프로세스 개척기
성장하는 스타트업의 프로세스 개척기성장하는 스타트업의 프로세스 개척기
성장하는 스타트업의 프로세스 개척기DomainDriven DomainDriven
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리Gyuwon Yi
 
2021년 1월 30일 개발자 이야기
2021년 1월 30일 개발자 이야기2021년 1월 30일 개발자 이야기
2021년 1월 30일 개발자 이야기Jay Park
 
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)VMware Tanzu Korea
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들Lee Geonhee
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Sa-ryong Kang
 
How to implement your dream 20150427
How to implement your dream 20150427How to implement your dream 20150427
How to implement your dream 20150427Will Kim
 
제13회컨퍼런스 조대협 서버사이드개발
제13회컨퍼런스 조대협 서버사이드개발제13회컨퍼런스 조대협 서버사이드개발
제13회컨퍼런스 조대협 서버사이드개발Terry Cho
 
04 워터폴모델-개발프로세스
04 워터폴모델-개발프로세스04 워터폴모델-개발프로세스
04 워터폴모델-개발프로세스Andrew Sungjin Kim
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료지원 정
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기Chris Ohk
 
ALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsTaeyoung Kim
 
Golang+on+analytics+and+blockchain
Golang+on+analytics+and+blockchainGolang+on+analytics+and+blockchain
Golang+on+analytics+and+blockchainNAVER Engineering
 
DevOps 시대의 새로운 Role - Full Cycle Developer
DevOps 시대의 새로운 Role - Full Cycle DeveloperDevOps 시대의 새로운 Role - Full Cycle Developer
DevOps 시대의 새로운 Role - Full Cycle Developer창훈 현
 
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016Amazon Web Services Korea
 
객체지향프로그래밍 특강
객체지향프로그래밍 특강객체지향프로그래밍 특강
객체지향프로그래밍 특강uEngine Solutions
 
개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호용호 최
 
개발 생산성 향상 기법 V1.2
개발 생산성 향상 기법 V1.2개발 생산성 향상 기법 V1.2
개발 생산성 향상 기법 V1.2Daniel Lim
 

Similaire à [네이버오픈소스세미나] egjs-view360 개발기 - 김희재 (20)

[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
 
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
 
성장하는 스타트업의 프로세스 개척기
성장하는 스타트업의 프로세스 개척기성장하는 스타트업의 프로세스 개척기
성장하는 스타트업의 프로세스 개척기
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
 
2021년 1월 30일 개발자 이야기
2021년 1월 30일 개발자 이야기2021년 1월 30일 개발자 이야기
2021년 1월 30일 개발자 이야기
 
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
 
How to implement your dream 20150427
How to implement your dream 20150427How to implement your dream 20150427
How to implement your dream 20150427
 
제13회컨퍼런스 조대협 서버사이드개발
제13회컨퍼런스 조대협 서버사이드개발제13회컨퍼런스 조대협 서버사이드개발
제13회컨퍼런스 조대협 서버사이드개발
 
04 워터폴모델-개발프로세스
04 워터폴모델-개발프로세스04 워터폴모델-개발프로세스
04 워터폴모델-개발프로세스
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
 
ALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOps
 
Golang+on+analytics+and+blockchain
Golang+on+analytics+and+blockchainGolang+on+analytics+and+blockchain
Golang+on+analytics+and+blockchain
 
DevOps 시대의 새로운 Role - Full Cycle Developer
DevOps 시대의 새로운 Role - Full Cycle DeveloperDevOps 시대의 새로운 Role - Full Cycle Developer
DevOps 시대의 새로운 Role - Full Cycle Developer
 
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
 
객체지향프로그래밍 특강
객체지향프로그래밍 특강객체지향프로그래밍 특강
객체지향프로그래밍 특강
 
개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호
 
개발 생산성 향상 기법 V1.2
개발 생산성 향상 기법 V1.2개발 생산성 향상 기법 V1.2
개발 생산성 향상 기법 V1.2
 

Plus de NAVER D2

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다NAVER D2
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...NAVER D2
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기NAVER D2
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발NAVER D2
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈NAVER D2
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&ANAVER D2
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기NAVER D2
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep LearningNAVER D2
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applicationsNAVER D2
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingNAVER D2
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지NAVER D2
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기NAVER D2
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화NAVER D2
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)NAVER D2
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기NAVER D2
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual SearchNAVER D2
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화NAVER D2
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지NAVER D2
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터NAVER D2
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?NAVER D2
 

Plus de NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

Dernier

JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 

Dernier (8)

JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 

[네이버오픈소스세미나] egjs-view360 개발기 - 김희재

  • 1. View360 개발기 -오픈소스화로 기술부채 청산한 이야기- 네이버 FE플랫폼 김희재
  • 2. 내용 소프트웨어 개발 과정에서 기술부채가 왜 발생했고 프로젝트에 어떤영향을 주었으며 오픈소스화로 어떻게 문제상황을 벗어날 수 있었는지 오픈소스로 공개하면 어떤 장점이 있지? 내 프로젝트로 오픈소스로 할때는 어떤 점에 신경쓰면 좋지?
  • 3.
  • 4.
  • 5.
  • 7. 현재는 네이버TV에 열심히 적용 중…
 360영상도 모바일 브라우저에서 곧!
  • 8. FE 플랫폼 • 네이버의 FE 기술 지원 조직 • 사내 서비스들을 위한 WEB UI 라이브러리 개발 • 경쟁력 있는 컴포넌트는 오픈소스로 공개 • egjs, billboard.js, jindo.js > 여러 서비스들의 이슈를 압축적으로 경험하면서 빠르게 성장 할 것을 기대하고 입사
  • 9. “360도 뷰어 만들어 보실 분?” < -- 오너쉽에 목마른 2년차 FE개발자
  • 10. 요구사항 • 네이티브 WEBGL로 직접 구현 • 안드로이드 등 모바일 브라우저 호환성 확보 • 디바이스 모션 컨트롤 > 정점 쉐이더, 프래그먼트 쉐이더, OpenGL 렌더링 파이프라인 > 오일러각, 짐벌락, 쿼터니언, 센서퓨전, 칼만 필터, LERP, SLERP … “음 .. 이해하고 구현해 내면 일단 성공”
  • 11. 기술부채 발생이 불가피했던 상황 • 콘셉트 증명 단계로 간주 • 요구사항만 만족하면 됨 • 관련 지식과 경험이 부족하여 구현 하는 것이 1순위 • 1인 개발 • 협업을 위해 코드의 품질을 신경 쓸 필요가 없음(!) • 문서화? 나중에… • 테스트코드? 일단 돌아가야 하지 않을까… • CI? 빨리 일단 돌아가게 만들어야 ㅠㅠ
  • 12. 라이브러리를 서비스 부서에 전달했는데… > 버그를 수정하면 다른 버그가 발생 > QA 사이클로 감당하기 힘들게 연속해서 발생하는 수정 부작용 > 두번의 배포연기
  • 13.
  • 14. 기술부채(Technical Debt) • 빠르지만 지저분한 방식으로 일하면 기술 부채로 압박 받게됨 • 기술부채를 지고 빠른 출시를 할 수 있음 • 하지만 기술부채 를 청산하지 않으면 이자가 계속 커짐 • 이자: 유지보수, 기능추가를 위해 추가적으로 들여야 하는 개발시간 • 따라서 시기 적절하게 부채 원금을 청산하지 않으면 이자 복리의 효과까 지 더해서 망하는 소프트웨어가 됨
  • 15. View360 에서의 초기 기술부채 • 테스트 코드 X • 하나를 고치면 어디서 부작용이 생길지 알 수가 없습니다. • 따라서 기능 추가를 하기 힘들어짐 • 공감할 수 없는 구조설계 • 남이 공감할 수 없는 구조라면 미래의 나도 이해할 수 없습니다. • "여기 왜 이렇게 짰지...." • 코드만 봐도 구조설계가 납득될 수 있도록 구조를 잘 짜야합니다 • 군더더기가 많은 API • 어떤 기능까지 필요하게 될 지 예측해가면서 개발 • 문서화 • 설계문서, 스펙문서: 최소한 만 수행 • 핵심기술 원리: X
  • 16. 처음부터 다시 둘이서 만들기 • 새로운 시니어 멤버! • 둘이서 개발진행 • 와! 이제 코드 리뷰하고 받을 수 있다! • WebGL과 센서신호처리관련 이론을 공부하여 출발선 맞춤 • 구조 설계 함께 진행
  • 18. 구글의 사례: 텐서플로 “많은 분들이 구글이 하는 모든 프로젝트가 철저한 계획 아래 깔끔하고 효 율적으로 진행될 걸로 생각하십니다. 사실 항상 그렇지 않습니다. 많은 프 로젝트가 처음엔 엉망진창이며, 관련된 문서는 찾기 힘듭니다. 같은 일을 여러 번 반복하기도 하죠. 그런데 기술을 오픈소스화하면 (외부에 공개되 기 때문에) 문서 작성나 작업을 체계화하는 데 많은 노력을 들입니다. 이 건 과정에서 팀 전체가 일주일 동안 문서화 작업에 집중하기도 합니다. 이 건 구글에게 매우 좋은 영향을 끼칩니다.” 구글 브레인 팀 - 마이크 슈스터 http://www.bloter.net/archives/254962
  • 19. 이슈/커밋메시지/문서는 영어로 작성 • 지나가던 개발자는 웬만하면 영어를 씀 • 작성하다보면 익숙해짐 • 비슷한 표현을 스택오버플로우나 다른 깃허브 프로젝트 이슈에서 찾아 보면서 응용하면 더 쉽다
  • 20. 커밋메시지 잘 쓰기 • 이 코드는 왜 이렇지? 를 해결 • 정해진 포멧 준수 ${작업의 종류}(${작업대상 모듈}): 작업 내용 Ref #${해당 이슈번호}
  • 21. Pull Request 단위를 줄이기 • 리뷰를 의미있게 하기 위한 조건 • 되도록이면 1이슈 1PR 이 좋다고 봄
  • 22. 테스트의 중요성 • 기능 추가 전후 두려움이 줄어든다 • 문제 없을거에요! 테스트 통과했으니까! 라고 말할 수 있게된다. • 문제 생기면 해당 이슈를 테스트로 추가하면 되니 개꿀! • PR을 받을 수 있는 최소한의 준비 • 테스트 없는 오픈 소스의 경우 PR 을 넣어도 • 이것저것 테스트 해보고 응답드릴게요 라고 핑계를 대면서 외부PR을 잘 안받는 경우가 있음
  • 23. 테스트 작성 • 구조와 API 설계가 어느정도 안정되고 나서 테스트 작성시작 • 테스트가 작성이 힘들면 테스트 가능성 높아지도록 리팩토링. • 특정기능을 모듈로 분리하거나 • Mocking 을 용이하게 리팩토링 하거나 • WebGL 렌더링 테스트 방법 적용 • 캡쳐한 이미지와 정답 이미지의 diff 를 비교 • 디바이스 모션은 테스트 헬퍼 구현
  • 24. PR 단계에서 CI 활용 • CI 지속적 통합 • PR 을 날렸을때, 해당 코드 품질 체크 1. 빌드가 되어야함 2. 코드컨벤션이 맞아야함 3. 단위 테스트를 모두 통과해야함 4. 테스트 커버리지가 감소하지 않아야함(!) Travis CI+ coveralls 좋아요 느슨해지지 않도록 제3의 감독관이 있는 느낌
  • 25.
  • 26. 시맨틱 버저닝 • X.Y.Z (Major.Minor.Patch) • Major: 업데이트 시 기존 코드를 수정해야하는 경우 (breaking change) • Miner: 기존 API 변경없는 기능추가 • Patch: API 변경이 전혀없는 버그수정
  • 27. 릴리즈 시 시맨틱 버저닝을 따르기 • 기존 라이브러리 전달 방식 • A서비스- a기능 에 이슈가 있어요 고쳐주세요 (1월 20일) • 수정 후 A_0120 이라는 태그를 따서 전달 • A_1023, B_1120 이라는 태그가 남발. • 수정사항 어떻게 합치지... • 사내 버전을 따로 두지 않고 외부 공개된 단일 패키지만 제공하기 • 시맨틱 버저닝을 적용하여, 빠른 이슈 수정요청이 들어올 경우 • 해당 내용을 외부 공개 이슈로 등록 하고 수정반영 하여 바로 릴리즈 후 해당 부 서에 제공 • 관리되는 브랜치가 하나라서 합칠 고민 안해도 된다.
  • 28. 가이드 문서 작성하기 • 메이저 업그레이드를 대비한 마이그레이션 문서(!) • 메이저 버전 변경 릴리즈 시에는 breaking change 에 대한 문서를 꼭 써야함 (없으면 사내 개발자도 새 버전으로 업그레이드 못해줌…) • https://github.com/naver/egjs-view360/wiki/3.0.0-rc-Change-Notes
  • 29. 소개페이지 만들기 • 라이브러리에 대한 이해를 도울 수 있음 • 소개페이지를 안 만들면 특히 비개 발자는 소외됩니다 • https://naver.github.io/egjs-view360
  • 30. 커뮤니티에 기여하기 이 때 부채청산과정에서 나온 결과물을 활용할 수 있다. • 기술 블로그 글 작성 • 내가 해결한 문제를 겪고 있는 프로젝트에 PR 날리기 • 내가 해결한 문제와 관련된 스택오버 플로우 질문에 답변달기 • 내 프로젝트 진행 중 타 깃허브 프로젝트 이슈들 레퍼런스 걸기(!) • 연구 결과 공유하기 • 컨퍼런스나 개발자 밋업에서 발표 • DEVIEW 2017 ­ 밑바닥부터 시작하는 360뷰어
  • 31. 오픈소스화 과정을 통해 얻은점 • 포지셔닝 작업을 통해 존재이유가 생김 • 빠르고 가벼운 모바일웹에서도 잘 돌아가는 360 동영상/이미지 뷰어 • 라이브러리 품질이 올라감 • 테스트 작성 및 API 설계 완성도 확보 • 품질이 떨어질 수 있는 여지를 최대한 줄여놓아서 외부개발자 참여를 받 기 용이 naver/egjs-view360 저장소를 방문하시면 발표내용에 언급된 내용들이 실제로 적용된 모습을 참고하실 수 있습니다.
  • 32. 오픈소스화 과정을 통해 느낀점 • 타인을 고려하면 할 수록 가치가 더해지는 소셜코딩의 힘 • 나, 미래의 나, 같이 일하는 동료개발자, 타 부서의 개발자/기획자, 사외 개발자/기획자, 내 오픈소스를 이용해 다른것을 개발하는 개발자, 경쟁 오픈소스의 개발자, 스택오버플로우에서 나와 같은 문제로 질문을 올린 개발자, 답변을 단 개발자. • 다양한 방식의 활동을 통해 내 프로젝트의 품질도 올라가고, 내 지식과 경험도 확장되는 경험 • 소셜코딩으로 다같이 폭풍성장 해요.
  • 33.
  • 34.
  • 35.