Chromium 프로젝트 Contribution Tip 공유

December 21, 2023 정훈섭 조회수 2,852

안녕하세요, 생활가전사업부 S/W Platform그룹의 정훈섭입니다. Chromium 프로젝트는 웹 브라우저인 Chrome을 개발하는 오픈소스 프로젝트로, 웹 표준 준수, 웹브라우저 보안 강화 및 성능 개선을 목표로 하고 있습니다. 또한 MS의 Edge, 삼성의 삼성 인터넷, 네이버의 웨일 등 다양한 브라우저 개발에도 활용되고 있습니다. Chromium 프로젝트는 C++로 작성되어 있고, Aura, Skia 등의 다양한 라이브러리를 사용하며, V8 JavaScript 엔진과 Blink 레이아웃 엔진을 기반으로 합니다. 또한 Chromium 오픈소스 커뮤니티에서 매우 인기 있는 프로젝트 중 하나이며, 웹 브라우저 기술과 웹 표준의 발전에 중요한 역할을 하고 있습니다. 이 포스팅은 SDC23 Korea에서 발표한 ‘삼성전자에서 오픈소스 개발자로 성장하기’의 일부 내용을 발췌하여 작성한 것으로, Chromium 프로젝트 Committer에 도전하면서 얻은 Contribution 노하우를 소개합니다. 전체 발표 내용을 보고 싶으시면 아래 발표 영상링크을 참고해 주세요.

들어가며

)안녕하세요. 생활가전사업부 S/W Platform 그룹의 정훈섭입니다. 여러분은 구글의 ‘Chrome(크롬)’ 웹 브라우저를 잘 아실 겁니다. 하지만 크롬의 탄생 배경과 개발 이야기는 생소하실 것 같은데요. 본 블로그에서는 오늘날 구글 크롬의 기반이 되는 ‘Chromium 프로젝트’에 대해 소개하고자 합니다.



그림1. 우분투에서 크로미움을 실행한 모습(버전 78)(출처: 위키백과)


저는 ‘Chrome’이라는 철자와 어감, 발음이 입에 잘 붙어 좋다고 생각해 왔는데요. Chromium을 처음 들어보시는 분들도 계시죠. 개발사인 구글이 공식적인 한글 표기를 정하지 않았기에 크로미엄, 크로미움 또는 크로뮴이라고도 불려 왔습니다.


Chromium 프로젝트는 웹 브라우저인 Chrome을 개발하고 있는 오픈소스 프로젝트이며 구글 크롬은 크로미움 코드를 사용하여 개발됩니다. 크로미움이라는 이름은 금속 원소인 크롬에서 따왔다고 합니다. 멋진 작명이라는 생각이 들지 않나요?



그림 2. 크로미움과 크롬


그러니까 Chromium은 우리가 자주 사용하는 크롬의 어머니뻘 되는 존재라고 할 수 있습니다. 구글에서 2008년 9월 시작한 프로젝트인 Chromium 프로젝트는 오픈소스 프로젝트이기 때문에 구글 직원이 아닌 사람들도 참가할 수 있었고, 이 프로젝트를 통해 만들어진 소스 코드에서 컴파일된 브라우저가 바로 크로미움인 것입니다.


Chromium 프로젝트는 웹 표준을 준수하고, 웹브라우저의 보안을 강화하며 성능을 개선하는 것을 목표로 하고 있습니다. 크로미움의 소스 코드는 다양한 브라우저들의 기반 엔진이 됩니다. Chromium 프로젝트를 기반으로 MS의 Edge, 삼성의 삼성 인터넷, 네이버의 웨일 등 다양한 브라우저 개발에도 사용되고 있습니다.


Chromium 프로젝트는 C++로 작성되어 있으며, Aura, Skia 등의 다양한 라이브러리를 사용하고 있습니다. 또한, V8 자바스크립트 엔진과 Blink 레이아웃 엔진을 기반으로 하고 있습니다. Chromium은 오픈소스 커뮤니티에서 매우 인기 있는 프로젝트 중 하나이며, 웹 브라우저 기술의 발전과 웹 표준의 발전에 큰 역할을 하고 있습니다.



그림 3. Chromium Committer 도전에 관한 발표 영상의 키노트 이미지


이 포스팅은 SDC23 Korea에서 발표한 ‘삼성전자에서 오픈소스 개발자로 성장하기’ 내용 중 Chromium 프로젝트 Committer에 도전하면서 얻게 된 Contribution 노하우에 대한 내용을 일부 발췌하여 작성하였습니다. 혹시 전체 내용을 보고 싶으시다면 발표 영상(https://www.youtube.com/watch?v=At8-6nY1YYY)을 참고해 주세요.


이슈 검색하기

오픈소스 프로젝트에 Contribution을 하기 위한 첫 번째 과정은 수정할 이슈를 찾는 것입니다. 모든 이슈들을 내가 해결이 가능할지를 판단하기 위해 전부다 하나씩 살펴보기에는 너무 많은 시간이 필요하기 때문에 다음처럼 필요한 검색 키워드를 적용하여 적절한 이슈를 찾는 과정이 필요합니다.



그림 4. 이슈 검색 키워드


해당 키워드를 하나씩 살펴보면 첫 번째로 Chromium 프로젝트의 경우, 고맙게도 처음 Contribution을 시작하는 개발자들이 확인하기 좋은 이슈들에 Goodfirstbug라는 태그를 달아주고 있습니다. 이 재미있는 태그에 대해 조금 더 알아보겠습니다.


GoodFirstBug는 이제 막 경험을 시작한 비기너들에게 적합한 버그를 식별하는 데 사용되는 라벨입니다. 상대적으로 해결하기 쉬운 버그에 ‘GoodFirstBug’라는 태그를 붙일 수 있습니다.


Chromium 프로젝트 외에 이 태그가 사용되는 곳이 또 있습니다. WordPress에서도 사용되고 있고, Mozilla Wiki에서도 Firefox bugs를 리포트할 때 태그가 사용됩니다. GitHub에서는 개발자가 ‘good-first-bug’를 주제로 레파지토리를 검색할 수 있습니다.


두 번째로 Chromium에는 DOM, CSS, Layout 등의 수많은 컴포넌트들이 존재합니다. 이 중에서 내가 가장 관심이 있는 컴포넌트를 추가해 줍니다. 하나의 컴포넌트에도 워낙 방대한 양의 코드 확인이 필요하기 때문에, 관심 있는 주요 컴포넌트에 집중해서 보는 것을 추천드립니다.



그림 5. Chromium에는 DOM, CSS, Layout 등의 수많은 컴포넌트들이 존재


세 번째로 현재 버그의 상태를 확인해 봐야 합니다. Status가 Assigned나 Started로 되어 있으면 누군가 해당 이슈를 확인하고 있는 것을 의미하므로 available도 함께 추가해 줍니다. 마지막으로 Priority 설정입니다. 1부터 3까지의 값이 있는데 작을수록 급하게 수정되어야 할 이슈를 의미합니다.


간략하게 적었지만, 모든 내용을 종합하면 단순한 내용입니다. 위 키워드가 의미하는 뜻은 Priority 설정을 통해 급하게 보지 않아도 되는 것들을 정리하고, 이슈 상태를 확인하면서 처음 시작하기 좋은 이슈들을 내 관심 분야 안에서 검색할 수 있도록 합니다.


웹 == 표준

Chromium 프로젝트는 웹 표준을 기반으로 구현되는 프로젝트입니다. 현재 수많은 표준 문서가 완성되어 있고 이 표준 문서가 계속해서 수정되고 새로운 표준 문서들이 추가되고 있습니다.


Chromium에 Contribution하기 좋은 방법 중 하나로 추천 드리는 방법은 표준 문서를 꾸준히 지켜보는 것입니다. 높은 수준의 표준 문서는 여러 사람의 논의를 거쳐 업데이트 되는데요. 변경된 부분은 Chromium에 구현해서 적용하는 것입니다.



그림 6. HTML Accessibility API Mapping 표준 Github


이러한 웹 표준 문서들은 주로 Github를 통해 논의와 개발이 이루어지므로, Watch를 눌러서 해당 프로젝트의 업데이트되는 내용을 지속적으로 확인하는 것이 효과적인 패치 적용에 도움이 됩니다.


Web Platform Test

현재 Chrome, Firefox, Safari 같은 메이저 브라우저의 주요 기능들의 호환성을 맞추기 위한 협의체가 만들어져 있는데요. https://wpt.fyi 사이트에 방문하면 호환성을 맞추고자 하는 기능들이 나열되어 있고 브라우저마다 해당 기능이 지원되고 있는지 아닌지를 표시하고 있습니다.



그림 7. Web Platform Test 페이지


그림 7의 표를 보면, 빨간색으로 표시된 칸이 보이실 겁니다. 이는 해당 기능이 아직 구현되지 않았음을 의미하므로 이 기능을 구현하고 확인해 보는 것도 좋은 Contribution 방법입니다. 또한 이미 구현되어 있는 다른 브라우저들의 구현도 함께 살펴볼 수 있기 때문에 구현 과정에 도움이 될 수 있습니다.


마무리하며

이상으로 Chromium 프로젝트에 Contribution하면서 터득한 노하우를 소개했는데요. Chromium 프로젝트의 경우 초기 진입이 어려운 프로젝트이기 때문에 하나의 이슈를 수정해 보는 경험이 아주 중요합니다. 하나의 패치를 처음 Merge하게 되신다면 다음 패치를 넣는 과정은 쉽게 진행할 수 있을 것입니다.


추가로, Chromium 프로젝트에서 공식적으로 만든 안내서(Contributing to Chromium)를 읽어보시는 것도 추천드립니다. Chromium 코드는 C++로 작성되어 기본적으로 Google C++ Style Guide를 준수합니다. 예외는 Chromium C++ style guide로 따로 정리해 두고 있습니다.


처음 과정이 어려우신 분들께서는 사내 오픈소스 멘토링을 이용하시거나 주변에 계신 오픈소스 리더분들에게 도움을 요청해 보시는 것도 좋은 방법이 될 것 같습니다.


감사합니다. 생활가전사업부 S/W Platform 그룹 정훈섭이었습니다.




저자

정훈섭

S/W Platform그룹(DA)

이메일 문의하기