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
수정 사항 적용
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
수정 사항 적용
17. 2.2 Chromium changes
Major 6 version update (52 -> 58)
- 152896 files changed
- 7514461 insertions(+)
- 5542626 deletions(-)
- 36주 개발기간(6주 릴리즈)
- 큰 버전 차이로 인해 많은 부분들이 변경 됨
19. 2.4 리베이스 방식
모든 개발자가 담당영역 리베이스 동시에 시작
리베이스 방식
- 커밋 리플레이
- 처음과 마지막 버전의 차이 적용
20. 2.5 코드 리팩토링(C++)
Conflict 해결을 좀 더 쉽게 하기 위해
- 가드 사용해서 구분함 (#ifdef WHALE_DEV)
Conflict를 줄이기 위해 섞여있는 코드를 구분하고 파일을 분
리
- 상속으로 동작 변경이 가능할 경우, 별도의 파일로 구현
- 소소한 코드 수정 팁
* In-class initialization
* 파일/함수의 중간에 추가코드 삽입
* Alias 사용
29. 4.1 새로운 리베이스 방식 시도
개발자 한명이 리베이스를 시도
- 기계적인 리베이스
- 간단한 Conflict 는 직접 해결
- 구현자의 도움이 필요한 부분은 남겨둠
- 2주 정도에 대부분의 코드를 리베이스 함
웨일 신규 기능 구현을 위해 더 이상 진행하지 않았지만,
이 방식으로 좀 더 빠르게 완료할수 있겠다는 가능성을 봄
30. 4.2 리소스 처리
리소스(이미지, 문자열, 다국어)의 경우
크로미움의 리소스를 직접 수정하여 웨일의 리소스를 적용
크로미움의 리소스를 건드리지 않고 웨일의 리소스를
적용할 수는 없을까?