SlideShare une entreprise Scribd logo
1  sur  44
오픈소스를 쓰려는 자
리베이스의 무게를 견뎌라
홍영기
About me
Career
- 2014.11~ NAVER Whale
- 2009.2~2014.11 LG전자
- 2012~ Chromium contribution
Public speaking
- 브라우저는 VSync 를 어떻게 활용하고 있을까 - DEVIEW 2015
- Unified BeginFrame - BlinkOn4
Contents
0. 백그라운드
1. 웨일 브라우저 개발의 시작
2. 첫번째 리베이스
3. 첫번째 회고
4. 리베이스 시간, 조금 더 줄여보자
5. 두번째 리베이스
6. 두번째 회고
7. 앞으로..
0. 백그라운드
웨일
크로미움
리베이스
0.1 Whale
옴니태스킹
스마트
향상된 성능
나만의 디자인 http://whale.naver.com/
0.2 Chromium
오픈소스 웹 브라우저 프로젝트
웨일은 오픈소스 Chromium 기반 브라우저
다양한 상용 브라우저의 기반 프로젝트
- Chrome (www.google.co.kr/chrome/)
- Opera (www.opera.com)
- UC 브라우저 (www.ucweb.com)
- 스윙 브라우저 (swing-browser.com)
- MS의 안드로이드 Edge 브라우저 프리뷰(Google Play)
이미지 출처: https://blog.chromium.org/
0.3 리베이스
직접 수정하여 사용중인 오픈소스 프로젝트의 버전을 변경하
는 경우,
변경된 버전에 수정 사항을 옮기는 작업
Version A Version B
Changes Changes
수정 사항 적용
리베이스는 그냥…
git rebase 으로 되는거 아닌가요?
1. 웨일 브라우저 개발의 시작
1.1 Chromium을 선택
WebKit 기반의 자체 엔진으로 브라우저 개발을 시작
했으나
결국 Chromium 기반으로 구현하기로 결정
- 5년간의 네이버 웹엔진 개발/삽질기 그리고... (DEVIEW 2016)
1.2 어떻게 수정할 것인가
Chrome layer 를 직접 사용하여 개발
Chromium
WebView(Contents layer)
Browser(Chrome layer)
브라우저의 기능이 구현된 계층
(ex, 탭, 옴니박스, 북마크, 히스토리 등
등)
웹컨텐츠 렌더링을 담당하는 계층
(웹뷰, 멀티 프로세스 렌더링)
1.3 웨일 베타 출시
Chrome layer 의 사용으로
짧은 5개월여의 개발기간에 베타 버
전의
웨일 브라우저 출시
1.4 빠르게 발전하는 크로미움
베타 출시 때부터 최신 크롬과 큰 버전 차이가 생김
- 웨일은 52
- 크롬은 56
사용자들의 크로미움 버전업 요구
1.5 리베이스 필요
그당 시 베타버전이었던 Chromium 58버전으로
리베이스 결정
Chromium
52
Chromium
58
Whale Whale
수정 사항 적용
2. 첫번째 리베이스
2.1 Whale changes
7165 files changed,
775514 insertions,
22363 deletions
Chromium 52
Whale
2.2 Chromium changes
Major 6 version update (52 -> 58)
- 152896 files changed
- 7514461 insertions(+)
- 5542626 deletions(-)
- 36주 개발기간(6주 릴리즈)
- 큰 버전 차이로 인해 많은 부분들이 변경 됨
2.3 많은 Conflicts
1609 files conflicted
빈번히 수정되는 Chrome layer 의 사용이 주 원인
2.4 리베이스 방식
모든 개발자가 담당영역 리베이스 동시에 시작
리베이스 방식
- 커밋 리플레이
- 처음과 마지막 버전의 차이 적용
2.5 코드 리팩토링(C++)
Conflict 해결을 좀 더 쉽게 하기 위해
- 가드 사용해서 구분함 (#ifdef WHALE_DEV)
Conflict를 줄이기 위해 섞여있는 코드를 구분하고 파일을 분
리
- 상속으로 동작 변경이 가능할 경우, 별도의 파일로 구현
- 소소한 코드 수정 팁
* In-class initialization
* 파일/함수의 중간에 추가코드 삽입
* Alias 사용
2.6 일정
코드 리베이스에 약 2개월의 시간 소요
리그레션 처리에 4주 정도 소요
3. 첫번째 회고
실수들..
신규 기능 개발
사기 저하
3.1 발견하지 못한 실수
3.2 힘든 신규 기능 개발
개발자 모두가 담당 부분 리베이스 진행으로
리베이스 기간동안 웨일의 신규 기능 개발은 중단됨
3.3 비효율적인 작업
개개인이 독립적으로 리베이스 완료가 어려움
모듈들이 서로 의존적이어서 다른 작업자의 일정에 영향을 받
음
3.4 느낀점
리베이스후 어려운 이슈(OOM, Crash) 들이 많이 해결
가성비가 뛰어난 작업임을 느낌
코드 리팩토링 & 클린업의 기회
3.5 하지만..
리베이스에 많은 시간을 투자하고 싶지는 않다..
업무 시간의 상당부분이 리베이스 작업이라면 사기 저하가 예
상
이미지 출처: http://money.cnn.com/2016/05/03/news/boring-job-lawsuit/index.html
4. 리베이스 시간,
조금 더 줄여보자
4.1 새로운 리베이스 방식 시도
개발자 한명이 리베이스를 시도
- 기계적인 리베이스
- 간단한 Conflict 는 직접 해결
- 구현자의 도움이 필요한 부분은 남겨둠
- 2주 정도에 대부분의 코드를 리베이스 함
웨일 신규 기능 구현을 위해 더 이상 진행하지 않았지만,
이 방식으로 좀 더 빠르게 완료할수 있겠다는 가능성을 봄
4.2 리소스 처리
리소스(이미지, 문자열, 다국어)의 경우
크로미움의 리소스를 직접 수정하여 웨일의 리소스를 적용
크로미움의 리소스를 건드리지 않고 웨일의 리소스를
적용할 수는 없을까?
4.2 리소스 처리
빌드시점에 리소스 오버라이딩 스크립트 적용
IDS_RELOAD_BTN_TOOLTIP = “XXX”
IDS_STOP_BTN_TOOLTIP = “YYY”
IDR_HOME_BUTTON = “home.png”
<Chromium resources>
IDS_STOP_BTN_TOOLTIP = “ZZZ”
IDR_HOME_BUTTON =
“home_whale.png”
<Whale resources>
IDS_RELOAD_BTN_TOOLTIP = “XXX”
IDS_STOP_BTN_TOOLTIP = “ZZZ”
IDR_HOME_BUTTON = “home_whale.png”
<Resource pack>
빌드
5. 두번째 리베이스
5.1 Changes & Conflicts
Whale
- 13570 files changed
- 3493696 insertions(+)
- 6712 deletions(-)
58버전의 Whale 수정 내용과 Chromium 60
Conflict
- 1577 files conflicted
Chromium (58 -> 60)
- 100018 files changed
- 4635466 insertions(+)
- 3359676 deletions(-)
5.3 리베이스 방식
한명의 개발자가 기본적인 리베이스 진행하고
모듈 담당자가 꼭 봐야하는 부분만 남겨둠
이후 담당자가 Conflict 를 처리
5.4 일정
코드 리베이스에 약 총 4주의 시간 소요
리그레션 처리에 4주 정도 소요
6. 두번째 회고
리그레션..
6.1 리베이스의 두단계
컴파일 타임 리베이스
- 초기 코드 리베이스
- 담당 개발자가 Conflict 처리
런타임 리베이스
- 리베이스된 코드가 제대로 동작하는지 검증
6.2 일정 단축
0
2
4
6
8
10
컴파일 타임 런타임
첫번째 리베이스 두번째 리베이스
(주)
6.3 Code conflict
오리지널 소스코드가 변경되면 Conflict 는 피할 수 없었음
리소스의 경우는 오버라이딩 기법으로 Conflict 해결
7. 앞으로
검증
목표
지금은 어플리케이션 테스트에 의존
Unit test, Trybot 도입 필요
7.1 검증 방법의 개선
크로미움의 스케줄과 같은 6주 리베이스
6주안에 리베이스 & 신규개발
7.2 궁극의 목표
Q & A
Thank you

Contenu connexe

Tendances

Python을 활용한 챗봇 서비스 개발 2일차
Python을 활용한 챗봇 서비스 개발 2일차Python을 활용한 챗봇 서비스 개발 2일차
Python을 활용한 챗봇 서비스 개발 2일차Taekyung Han
 
[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화NAVER D2
 
デプスセンサとその応用
デプスセンサとその応用デプスセンサとその応用
デプスセンサとその応用Norishige Fukushima
 
Massive service basic
Massive service basicMassive service basic
Massive service basicDaeMyung Kang
 
物体検出の話Up用
物体検出の話Up用物体検出の話Up用
物体検出の話Up用Takashi Abe
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영NAVER D2
 
글로벌 사례로 보는 데이터로 돈 버는 법 - 트레저데이터 (Treasure Data)
글로벌 사례로 보는 데이터로 돈 버는 법 - 트레저데이터 (Treasure Data)글로벌 사례로 보는 데이터로 돈 버는 법 - 트레저데이터 (Treasure Data)
글로벌 사례로 보는 데이터로 돈 버는 법 - 트레저데이터 (Treasure Data)Treasure Data, Inc.
 
한국어 띄어쓰기 프로그램 도전기
한국어 띄어쓰기 프로그램 도전기한국어 띄어쓰기 프로그램 도전기
한국어 띄어쓰기 프로그램 도전기Ted Taekyoon Choi
 
[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술NAVER D2
 
elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리Junyi Song
 
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介Ryohei Ueda
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문SeungHyun Eom
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법Jeongsang Baek
 
20170227 파이썬으로 챗봇_만들기
20170227 파이썬으로 챗봇_만들기20170227 파이썬으로 챗봇_만들기
20170227 파이썬으로 챗봇_만들기Kim Sungdong
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스Arawn Park
 
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편Seongyun Byeon
 
[기초개념] Recurrent Neural Network (RNN) 소개
[기초개념] Recurrent Neural Network (RNN) 소개[기초개념] Recurrent Neural Network (RNN) 소개
[기초개념] Recurrent Neural Network (RNN) 소개Donghyeon Kim
 
Building GUI App with Electron and Lisp
Building GUI App with Electron and LispBuilding GUI App with Electron and Lisp
Building GUI App with Electron and Lispfukamachi
 

Tendances (20)

Python을 활용한 챗봇 서비스 개발 2일차
Python을 활용한 챗봇 서비스 개발 2일차Python을 활용한 챗봇 서비스 개발 2일차
Python을 활용한 챗봇 서비스 개발 2일차
 
[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화
 
デプスセンサとその応用
デプスセンサとその応用デプスセンサとその応用
デプスセンサとその応用
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 
物体検出の話Up用
物体検出の話Up用物体検出の話Up用
物体検出の話Up用
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
 
글로벌 사례로 보는 데이터로 돈 버는 법 - 트레저데이터 (Treasure Data)
글로벌 사례로 보는 데이터로 돈 버는 법 - 트레저데이터 (Treasure Data)글로벌 사례로 보는 데이터로 돈 버는 법 - 트레저데이터 (Treasure Data)
글로벌 사례로 보는 데이터로 돈 버는 법 - 트레저데이터 (Treasure Data)
 
한국어 띄어쓰기 프로그램 도전기
한국어 띄어쓰기 프로그램 도전기한국어 띄어쓰기 프로그램 도전기
한국어 띄어쓰기 프로그램 도전기
 
[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술
 
elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리
 
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법
 
20170227 파이썬으로 챗봇_만들기
20170227 파이썬으로 챗봇_만들기20170227 파이썬으로 챗봇_만들기
20170227 파이썬으로 챗봇_만들기
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스
 
Kubernetes vs App Service
Kubernetes vs App ServiceKubernetes vs App Service
Kubernetes vs App Service
 
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
 
Solr vs ElasticSearch
Solr vs ElasticSearchSolr vs ElasticSearch
Solr vs ElasticSearch
 
[기초개념] Recurrent Neural Network (RNN) 소개
[기초개념] Recurrent Neural Network (RNN) 소개[기초개념] Recurrent Neural Network (RNN) 소개
[기초개념] Recurrent Neural Network (RNN) 소개
 
Building GUI App with Electron and Lisp
Building GUI App with Electron and LispBuilding GUI App with Electron and Lisp
Building GUI App with Electron and Lisp
 

En vedette

웨일 보안 이야기
웨일 보안 이야기웨일 보안 이야기
웨일 보안 이야기NAVER D2
 
밑바닥부터시작하는360뷰어
밑바닥부터시작하는360뷰어밑바닥부터시작하는360뷰어
밑바닥부터시작하는360뷰어NAVER D2
 
[131]chromium binging 기술을 node.js에 적용해보자
[131]chromium binging 기술을 node.js에 적용해보자[131]chromium binging 기술을 node.js에 적용해보자
[131]chromium binging 기술을 node.js에 적용해보자NAVER D2
 
[132]웨일 브라우저 1년 그리고 미래
[132]웨일 브라우저 1년 그리고 미래[132]웨일 브라우저 1년 그리고 미래
[132]웨일 브라우저 1년 그리고 미래NAVER D2
 
[111]open, share, enjoy 네이버의 오픈소스 활동
[111]open, share, enjoy 네이버의 오픈소스 활동[111]open, share, enjoy 네이버의 오픈소스 활동
[111]open, share, enjoy 네이버의 오픈소스 활동NAVER D2
 
[143]알파글래스의 개발과정으로 알아보는 ar 스마트글래스 광학 시스템
[143]알파글래스의 개발과정으로 알아보는 ar 스마트글래스 광학 시스템 [143]알파글래스의 개발과정으로 알아보는 ar 스마트글래스 광학 시스템
[143]알파글래스의 개발과정으로 알아보는 ar 스마트글래스 광학 시스템 NAVER D2
 
[141]네이버랩스의 로보틱스 연구 소개
[141]네이버랩스의 로보틱스 연구 소개[141]네이버랩스의 로보틱스 연구 소개
[141]네이버랩스의 로보틱스 연구 소개NAVER D2
 
[124]자율주행과 기계학습
[124]자율주행과 기계학습[124]자율주행과 기계학습
[124]자율주행과 기계학습NAVER D2
 
what is_tabs_share
what is_tabs_sharewhat is_tabs_share
what is_tabs_shareNAVER D2
 
[123]동네 커피샵도 사이렌 오더를 쓸 수 있을까
[123]동네 커피샵도 사이렌 오더를 쓸 수 있을까[123]동네 커피샵도 사이렌 오더를 쓸 수 있을까
[123]동네 커피샵도 사이렌 오더를 쓸 수 있을까NAVER D2
 
[142] 생체 이해에 기반한 로봇 – 고성능 로봇에게 인간의 유연함과 안전성 부여하기
[142] 생체 이해에 기반한 로봇 – 고성능 로봇에게 인간의 유연함과 안전성 부여하기[142] 생체 이해에 기반한 로봇 – 고성능 로봇에게 인간의 유연함과 안전성 부여하기
[142] 생체 이해에 기반한 로봇 – 고성능 로봇에게 인간의 유연함과 안전성 부여하기NAVER D2
 
[113]how can realm_make_efficient_mobile_database
[113]how can realm_make_efficient_mobile_database[113]how can realm_make_efficient_mobile_database
[113]how can realm_make_efficient_mobile_databaseNAVER D2
 
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.NAVER D2
 
[125] 머신러닝으로 쏟아지는 유저 cs 답변하기
[125] 머신러닝으로 쏟아지는 유저 cs 답변하기[125] 머신러닝으로 쏟아지는 유저 cs 답변하기
[125] 머신러닝으로 쏟아지는 유저 cs 답변하기NAVER D2
 
[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기
[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기
[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기NAVER D2
 
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색
[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색NAVER D2
 
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화NAVER D2
 
유연하고 확장성 있는 빅데이터 처리
유연하고 확장성 있는 빅데이터 처리유연하고 확장성 있는 빅데이터 처리
유연하고 확장성 있는 빅데이터 처리NAVER D2
 
[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술
[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술
[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술NAVER D2
 
[246]reasoning, attention and memory toward differentiable reasoning machines
[246]reasoning, attention and memory   toward differentiable reasoning machines[246]reasoning, attention and memory   toward differentiable reasoning machines
[246]reasoning, attention and memory toward differentiable reasoning machinesNAVER D2
 

En vedette (20)

웨일 보안 이야기
웨일 보안 이야기웨일 보안 이야기
웨일 보안 이야기
 
밑바닥부터시작하는360뷰어
밑바닥부터시작하는360뷰어밑바닥부터시작하는360뷰어
밑바닥부터시작하는360뷰어
 
[131]chromium binging 기술을 node.js에 적용해보자
[131]chromium binging 기술을 node.js에 적용해보자[131]chromium binging 기술을 node.js에 적용해보자
[131]chromium binging 기술을 node.js에 적용해보자
 
[132]웨일 브라우저 1년 그리고 미래
[132]웨일 브라우저 1년 그리고 미래[132]웨일 브라우저 1년 그리고 미래
[132]웨일 브라우저 1년 그리고 미래
 
[111]open, share, enjoy 네이버의 오픈소스 활동
[111]open, share, enjoy 네이버의 오픈소스 활동[111]open, share, enjoy 네이버의 오픈소스 활동
[111]open, share, enjoy 네이버의 오픈소스 활동
 
[143]알파글래스의 개발과정으로 알아보는 ar 스마트글래스 광학 시스템
[143]알파글래스의 개발과정으로 알아보는 ar 스마트글래스 광학 시스템 [143]알파글래스의 개발과정으로 알아보는 ar 스마트글래스 광학 시스템
[143]알파글래스의 개발과정으로 알아보는 ar 스마트글래스 광학 시스템
 
[141]네이버랩스의 로보틱스 연구 소개
[141]네이버랩스의 로보틱스 연구 소개[141]네이버랩스의 로보틱스 연구 소개
[141]네이버랩스의 로보틱스 연구 소개
 
[124]자율주행과 기계학습
[124]자율주행과 기계학습[124]자율주행과 기계학습
[124]자율주행과 기계학습
 
what is_tabs_share
what is_tabs_sharewhat is_tabs_share
what is_tabs_share
 
[123]동네 커피샵도 사이렌 오더를 쓸 수 있을까
[123]동네 커피샵도 사이렌 오더를 쓸 수 있을까[123]동네 커피샵도 사이렌 오더를 쓸 수 있을까
[123]동네 커피샵도 사이렌 오더를 쓸 수 있을까
 
[142] 생체 이해에 기반한 로봇 – 고성능 로봇에게 인간의 유연함과 안전성 부여하기
[142] 생체 이해에 기반한 로봇 – 고성능 로봇에게 인간의 유연함과 안전성 부여하기[142] 생체 이해에 기반한 로봇 – 고성능 로봇에게 인간의 유연함과 안전성 부여하기
[142] 생체 이해에 기반한 로봇 – 고성능 로봇에게 인간의 유연함과 안전성 부여하기
 
[113]how can realm_make_efficient_mobile_database
[113]how can realm_make_efficient_mobile_database[113]how can realm_make_efficient_mobile_database
[113]how can realm_make_efficient_mobile_database
 
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
 
[125] 머신러닝으로 쏟아지는 유저 cs 답변하기
[125] 머신러닝으로 쏟아지는 유저 cs 답변하기[125] 머신러닝으로 쏟아지는 유저 cs 답변하기
[125] 머신러닝으로 쏟아지는 유저 cs 답변하기
 
[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기
[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기
[115]14일만에 깃헙 스타 1,000개 받은 차트 오픈소스 개발기
 
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색
[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색
 
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화
[231]운영체제 수준에서의 데이터베이스 성능 분석과 최적화
 
유연하고 확장성 있는 빅데이터 처리
유연하고 확장성 있는 빅데이터 처리유연하고 확장성 있는 빅데이터 처리
유연하고 확장성 있는 빅데이터 처리
 
[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술
[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술
[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술
 
[246]reasoning, attention and memory toward differentiable reasoning machines
[246]reasoning, attention and memory   toward differentiable reasoning machines[246]reasoning, attention and memory   toward differentiable reasoning machines
[246]reasoning, attention and memory toward differentiable reasoning machines
 

Similaire à [141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라

Single-page Application
Single-page ApplicationSingle-page Application
Single-page ApplicationSangmin Yoon
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발Jinuk Kim
 
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST_NHNent
 
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함Ji-Woong Choi
 
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기Nanha Park
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyondJae Sung Park
 
[EWD2014]CLASS10
[EWD2014]CLASS10[EWD2014]CLASS10
[EWD2014]CLASS10JY LEE
 
생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdfssuserb942d2
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기SeungYong Baek
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)Ildoo Kim
 
Unionweb프로젝트
Unionweb프로젝트Unionweb프로젝트
Unionweb프로젝트Dong-Jin Park
 
Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.효근 박
 
Vue 뽀개기 1장 환경설정 및 spa설정
Vue 뽀개기 1장 환경설정 및 spa설정Vue 뽀개기 1장 환경설정 및 spa설정
Vue 뽀개기 1장 환경설정 및 spa설정leejungwang
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트Chanwoong Kim
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 

Similaire à [141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라 (20)

Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
 
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
 
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
 
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
 
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyond
 
[EWD2014]CLASS10
[EWD2014]CLASS10[EWD2014]CLASS10
[EWD2014]CLASS10
 
Docker Container
Docker ContainerDocker Container
Docker Container
 
생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
 
Unionweb프로젝트
Unionweb프로젝트Unionweb프로젝트
Unionweb프로젝트
 
hexa core
hexa corehexa core
hexa core
 
2015 oce specification
2015 oce specification2015 oce specification
2015 oce specification
 
Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.
 
Vue 뽀개기 1장 환경설정 및 spa설정
Vue 뽀개기 1장 환경설정 및 spa설정Vue 뽀개기 1장 환경설정 및 spa설정
Vue 뽀개기 1장 환경설정 및 spa설정
 
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례 Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 

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인가?
 

[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라

  • 1. 오픈소스를 쓰려는 자 리베이스의 무게를 견뎌라 홍영기
  • 2. About me Career - 2014.11~ NAVER Whale - 2009.2~2014.11 LG전자 - 2012~ Chromium contribution Public speaking - 브라우저는 VSync 를 어떻게 활용하고 있을까 - DEVIEW 2015 - Unified BeginFrame - BlinkOn4
  • 3. Contents 0. 백그라운드 1. 웨일 브라우저 개발의 시작 2. 첫번째 리베이스 3. 첫번째 회고 4. 리베이스 시간, 조금 더 줄여보자 5. 두번째 리베이스 6. 두번째 회고 7. 앞으로..
  • 6. 0.2 Chromium 오픈소스 웹 브라우저 프로젝트 웨일은 오픈소스 Chromium 기반 브라우저 다양한 상용 브라우저의 기반 프로젝트 - Chrome (www.google.co.kr/chrome/) - Opera (www.opera.com) - UC 브라우저 (www.ucweb.com) - 스윙 브라우저 (swing-browser.com) - MS의 안드로이드 Edge 브라우저 프리뷰(Google Play) 이미지 출처: https://blog.chromium.org/
  • 7. 0.3 리베이스 직접 수정하여 사용중인 오픈소스 프로젝트의 버전을 변경하 는 경우, 변경된 버전에 수정 사항을 옮기는 작업 Version A Version B Changes Changes 수정 사항 적용
  • 8. 리베이스는 그냥… git rebase 으로 되는거 아닌가요?
  • 9. 1. 웨일 브라우저 개발의 시작
  • 10. 1.1 Chromium을 선택 WebKit 기반의 자체 엔진으로 브라우저 개발을 시작 했으나 결국 Chromium 기반으로 구현하기로 결정 - 5년간의 네이버 웹엔진 개발/삽질기 그리고... (DEVIEW 2016)
  • 11. 1.2 어떻게 수정할 것인가 Chrome layer 를 직접 사용하여 개발 Chromium WebView(Contents layer) Browser(Chrome layer) 브라우저의 기능이 구현된 계층 (ex, 탭, 옴니박스, 북마크, 히스토리 등 등) 웹컨텐츠 렌더링을 담당하는 계층 (웹뷰, 멀티 프로세스 렌더링)
  • 12. 1.3 웨일 베타 출시 Chrome layer 의 사용으로 짧은 5개월여의 개발기간에 베타 버 전의 웨일 브라우저 출시
  • 13. 1.4 빠르게 발전하는 크로미움 베타 출시 때부터 최신 크롬과 큰 버전 차이가 생김 - 웨일은 52 - 크롬은 56 사용자들의 크로미움 버전업 요구
  • 14. 1.5 리베이스 필요 그당 시 베타버전이었던 Chromium 58버전으로 리베이스 결정 Chromium 52 Chromium 58 Whale Whale 수정 사항 적용
  • 16. 2.1 Whale changes 7165 files changed, 775514 insertions, 22363 deletions Chromium 52 Whale
  • 17. 2.2 Chromium changes Major 6 version update (52 -> 58) - 152896 files changed - 7514461 insertions(+) - 5542626 deletions(-) - 36주 개발기간(6주 릴리즈) - 큰 버전 차이로 인해 많은 부분들이 변경 됨
  • 18. 2.3 많은 Conflicts 1609 files conflicted 빈번히 수정되는 Chrome layer 의 사용이 주 원인
  • 19. 2.4 리베이스 방식 모든 개발자가 담당영역 리베이스 동시에 시작 리베이스 방식 - 커밋 리플레이 - 처음과 마지막 버전의 차이 적용
  • 20. 2.5 코드 리팩토링(C++) Conflict 해결을 좀 더 쉽게 하기 위해 - 가드 사용해서 구분함 (#ifdef WHALE_DEV) Conflict를 줄이기 위해 섞여있는 코드를 구분하고 파일을 분 리 - 상속으로 동작 변경이 가능할 경우, 별도의 파일로 구현 - 소소한 코드 수정 팁 * In-class initialization * 파일/함수의 중간에 추가코드 삽입 * Alias 사용
  • 21. 2.6 일정 코드 리베이스에 약 2개월의 시간 소요 리그레션 처리에 4주 정도 소요
  • 22. 3. 첫번째 회고 실수들.. 신규 기능 개발 사기 저하
  • 24. 3.2 힘든 신규 기능 개발 개발자 모두가 담당 부분 리베이스 진행으로 리베이스 기간동안 웨일의 신규 기능 개발은 중단됨
  • 25. 3.3 비효율적인 작업 개개인이 독립적으로 리베이스 완료가 어려움 모듈들이 서로 의존적이어서 다른 작업자의 일정에 영향을 받 음
  • 26. 3.4 느낀점 리베이스후 어려운 이슈(OOM, Crash) 들이 많이 해결 가성비가 뛰어난 작업임을 느낌 코드 리팩토링 & 클린업의 기회
  • 27. 3.5 하지만.. 리베이스에 많은 시간을 투자하고 싶지는 않다.. 업무 시간의 상당부분이 리베이스 작업이라면 사기 저하가 예 상 이미지 출처: http://money.cnn.com/2016/05/03/news/boring-job-lawsuit/index.html
  • 28. 4. 리베이스 시간, 조금 더 줄여보자
  • 29. 4.1 새로운 리베이스 방식 시도 개발자 한명이 리베이스를 시도 - 기계적인 리베이스 - 간단한 Conflict 는 직접 해결 - 구현자의 도움이 필요한 부분은 남겨둠 - 2주 정도에 대부분의 코드를 리베이스 함 웨일 신규 기능 구현을 위해 더 이상 진행하지 않았지만, 이 방식으로 좀 더 빠르게 완료할수 있겠다는 가능성을 봄
  • 30. 4.2 리소스 처리 리소스(이미지, 문자열, 다국어)의 경우 크로미움의 리소스를 직접 수정하여 웨일의 리소스를 적용 크로미움의 리소스를 건드리지 않고 웨일의 리소스를 적용할 수는 없을까?
  • 31. 4.2 리소스 처리 빌드시점에 리소스 오버라이딩 스크립트 적용 IDS_RELOAD_BTN_TOOLTIP = “XXX” IDS_STOP_BTN_TOOLTIP = “YYY” IDR_HOME_BUTTON = “home.png” <Chromium resources> IDS_STOP_BTN_TOOLTIP = “ZZZ” IDR_HOME_BUTTON = “home_whale.png” <Whale resources> IDS_RELOAD_BTN_TOOLTIP = “XXX” IDS_STOP_BTN_TOOLTIP = “ZZZ” IDR_HOME_BUTTON = “home_whale.png” <Resource pack> 빌드
  • 33. 5.1 Changes & Conflicts Whale - 13570 files changed - 3493696 insertions(+) - 6712 deletions(-) 58버전의 Whale 수정 내용과 Chromium 60 Conflict - 1577 files conflicted Chromium (58 -> 60) - 100018 files changed - 4635466 insertions(+) - 3359676 deletions(-)
  • 34. 5.3 리베이스 방식 한명의 개발자가 기본적인 리베이스 진행하고 모듈 담당자가 꼭 봐야하는 부분만 남겨둠 이후 담당자가 Conflict 를 처리
  • 35. 5.4 일정 코드 리베이스에 약 총 4주의 시간 소요 리그레션 처리에 4주 정도 소요
  • 37. 6.1 리베이스의 두단계 컴파일 타임 리베이스 - 초기 코드 리베이스 - 담당 개발자가 Conflict 처리 런타임 리베이스 - 리베이스된 코드가 제대로 동작하는지 검증
  • 38. 6.2 일정 단축 0 2 4 6 8 10 컴파일 타임 런타임 첫번째 리베이스 두번째 리베이스 (주)
  • 39. 6.3 Code conflict 오리지널 소스코드가 변경되면 Conflict 는 피할 수 없었음 리소스의 경우는 오버라이딩 기법으로 Conflict 해결
  • 41. 지금은 어플리케이션 테스트에 의존 Unit test, Trybot 도입 필요 7.1 검증 방법의 개선
  • 42. 크로미움의 스케줄과 같은 6주 리베이스 6주안에 리베이스 & 신규개발 7.2 궁극의 목표
  • 43. Q & A