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

NAVER D2
NAVER D2NAVER D2
View360 개발기
-오픈소스화로 기술부채 청산한 이야기-
네이버 FE플랫폼 김희재
내용
소프트웨어 개발 과정에서
기술부채가 왜 발생했고
프로젝트에 어떤영향을 주었으며
오픈소스화로 어떻게 문제상황을 벗어날 수 있었는지
오픈소스로 공개하면 어떤 장점이 있지?
내 프로젝트로 오픈소스로 할때는 어떤 점에 신경쓰면 좋지?
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
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 사이클로 감당하기 힘들게 연속해서 발생하는 수정 부작용
> 두번의 배포연기
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
기술부채(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의 감독관이 있는 느낌
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
시맨틱 버저닝
• 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
저장소를 방문하시면 발표내용에 언급된 내용들이
실제로 적용된 모습을 참고하실 수 있습니다.
오픈소스화 과정을 통해 느낀점
• 타인을 고려하면 할 수록 가치가 더해지는 소셜코딩의 힘
• 나, 미래의 나, 같이 일하는 동료개발자, 타 부서의 개발자/기획자, 사외
개발자/기획자, 내 오픈소스를 이용해 다른것을 개발하는 개발자, 경쟁
오픈소스의 개발자, 스택오버플로우에서 나와 같은 문제로 질문을 올린
개발자, 답변을 단 개발자.
• 다양한 방식의 활동을 통해 내 프로젝트의 품질도 올라가고, 내 지식과
경험도 확장되는 경험
• 소셜코딩으로 다같이 폭풍성장 해요.
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
끝!
감사합니다.
1 von 36

Recomendados

[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님) von
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)NAVER D2
951 views15 Folien
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기 von
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기Soojin Ro
5.9K views69 Folien
[Tech meet up] 2018 프론트엔드 트렌드&인사이트 von
[Tech meet up] 2018 프론트엔드 트렌드&인사이트[Tech meet up] 2018 프론트엔드 트렌드&인사이트
[Tech meet up] 2018 프론트엔드 트렌드&인사이트NAVER D2
2.1K views67 Folien
JavaScript로 오픈소스를 해보자. bsJS von
JavaScript로 오픈소스를 해보자. bsJSJavaScript로 오픈소스를 해보자. bsJS
JavaScript로 오픈소스를 해보자. bsJSNAVER D2
19K views43 Folien
5.yobi를 활용한 개발자 협업 및 배포 프로세스 von
5.yobi를 활용한 개발자 협업 및 배포 프로세스5.yobi를 활용한 개발자 협업 및 배포 프로세스
5.yobi를 활용한 개발자 협업 및 배포 프로세스NAVER D2
16.9K views31 Folien
[111]open, share, enjoy 네이버의 오픈소스 활동 von
[111]open, share, enjoy 네이버의 오픈소스 활동[111]open, share, enjoy 네이버의 오픈소스 활동
[111]open, share, enjoy 네이버의 오픈소스 활동NAVER D2
9.8K views52 Folien

Más contenido relacionado

Was ist angesagt?

커뮤니티와 함께한 예비개발자 성장기- 조성수님 von
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님NAVER D2
7.7K views84 Folien
Cooking jquery von
Cooking jqueryCooking jquery
Cooking jqueryJinKwon Lee
834 views14 Folien
신림프로그래머모임_개발프로세스개선기 von
신림프로그래머모임_개발프로세스개선기신림프로그래머모임_개발프로세스개선기
신림프로그래머모임_개발프로세스개선기none
5.5K views41 Folien
Next Javascript ES2015 시작하기 von
Next Javascript ES2015 시작하기Next Javascript ES2015 시작하기
Next Javascript ES2015 시작하기JinKwon Lee
10.2K views19 Folien
[D2]pinpoint 개발기 von
[D2]pinpoint 개발기[D2]pinpoint 개발기
[D2]pinpoint 개발기NAVER D2
13.3K views52 Folien
실시간으로 안드로이드 프론트엔드 작업하기 von
실시간으로 안드로이드 프론트엔드 작업하기실시간으로 안드로이드 프론트엔드 작업하기
실시간으로 안드로이드 프론트엔드 작업하기Haze Lee
475 views8 Folien

Was ist angesagt?(20)

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

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

[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스 von
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스Hee Jae Lee
238 views64 Folien
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기 von
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기Seokjae Lee
134 views80 Folien
성장하는 스타트업의 프로세스 개척기 von
성장하는 스타트업의 프로세스 개척기성장하는 스타트업의 프로세스 개척기
성장하는 스타트업의 프로세스 개척기DomainDriven DomainDriven
9.1K views46 Folien
VSTS와 Azure를 이용한 팀 프로세스 관리 von
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리Gyuwon Yi
3.6K views78 Folien
2021년 1월 30일 개발자 이야기 von
2021년 1월 30일 개발자 이야기2021년 1월 30일 개발자 이야기
2021년 1월 30일 개발자 이야기Jay Park
1K views14 Folien
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD) von
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)VMware Tanzu Korea
3.2K views50 Folien

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

[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스 von Hee Jae Lee
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
Hee Jae Lee238 views
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기 von Seokjae Lee
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
Seokjae Lee134 views
VSTS와 Azure를 이용한 팀 프로세스 관리 von Gyuwon Yi
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
Gyuwon Yi3.6K views
2021년 1월 30일 개발자 이야기 von Jay Park
2021년 1월 30일 개발자 이야기2021년 1월 30일 개발자 이야기
2021년 1월 30일 개발자 이야기
Jay Park1K views
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD) von VMware Tanzu Korea
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
VMware Tanzu Korea3.2K views
프로젝트 관리 및 지켜야 할 사항들 von Lee Geonhee
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들
Lee Geonhee112 views
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리 von Sa-ryong Kang
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 Kang742 views
How to implement your dream 20150427 von Will Kim
How to implement your dream 20150427How to implement your dream 20150427
How to implement your dream 20150427
Will Kim843 views
제13회컨퍼런스 조대협 서버사이드개발 von Terry Cho
제13회컨퍼런스 조대협 서버사이드개발제13회컨퍼런스 조대협 서버사이드개발
제13회컨퍼런스 조대협 서버사이드개발
Terry Cho28.3K views
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료 von 지원 정
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
지원 정110 views
청강대 특강 - 프로젝트 제대로 해보기 von Chris Ohk
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
Chris Ohk3.2K views
ALM과 DevOps 그리고 Azure DevOps von Taeyoung Kim
ALM과 DevOps 그리고 Azure DevOpsALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOps
Taeyoung Kim1.2K views
DevOps 시대의 새로운 Role - Full Cycle Developer von 창훈 현
DevOps 시대의 새로운 Role - Full Cycle DeveloperDevOps 시대의 새로운 Role - Full Cycle Developer
DevOps 시대의 새로운 Role - Full Cycle Developer
창훈 현481 views
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016 von Amazon Web Services Korea
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
개발자로써 갖춰야할 스킬들 - 최용호 von 용호 최
개발자로써 갖춰야할 스킬들 - 최용호개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호
용호 최175 views
개발 생산성 향상 기법 V1.2 von Daniel Lim
개발 생산성 향상 기법 V1.2개발 생산성 향상 기법 V1.2
개발 생산성 향상 기법 V1.2
Daniel Lim956 views

Más de NAVER D2

[211] 인공지능이 인공지능 챗봇을 만든다 von
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다NAVER D2
10.8K views73 Folien
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i... von
[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
3.6K views69 Folien
[215] Druid로 쉽고 빠르게 데이터 분석하기 von
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기NAVER D2
5.4K views58 Folien
[245]Papago Internals: 모델분석과 응용기술 개발 von
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발NAVER D2
2.1K views55 Folien
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈 von
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈NAVER D2
2.3K views66 Folien
[235]Wikipedia-scale Q&A von
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&ANAVER D2
1.5K views54 Folien

Más de NAVER D2(20)

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

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

  • 1. View360 개발기 -오픈소스화로 기술부채 청산한 이야기- 네이버 FE플랫폼 김희재
  • 2. 내용 소프트웨어 개발 과정에서 기술부채가 왜 발생했고 프로젝트에 어떤영향을 주었으며 오픈소스화로 어떻게 문제상황을 벗어날 수 있었는지 오픈소스로 공개하면 어떤 장점이 있지? 내 프로젝트로 오픈소스로 할때는 어떤 점에 신경쓰면 좋지?
  • 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 사이클로 감당하기 힘들게 연속해서 발생하는 수정 부작용 > 두번의 배포연기
  • 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의 감독관이 있는 느낌
  • 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. 오픈소스화 과정을 통해 느낀점 • 타인을 고려하면 할 수록 가치가 더해지는 소셜코딩의 힘 • 나, 미래의 나, 같이 일하는 동료개발자, 타 부서의 개발자/기획자, 사외 개발자/기획자, 내 오픈소스를 이용해 다른것을 개발하는 개발자, 경쟁 오픈소스의 개발자, 스택오버플로우에서 나와 같은 문제로 질문을 올린 개발자, 답변을 단 개발자. • 다양한 방식의 활동을 통해 내 프로젝트의 품질도 올라가고, 내 지식과 경험도 확장되는 경험 • 소셜코딩으로 다같이 폭풍성장 해요.