구글의 깐깐한 코드리뷰 환경
구글의 코드리뷰
코드리뷰(Code Review)란 소프트웨어 개발자가 코드를 프로그래밍 언어로 작성하고, 다른 개발자가 리뷰하는 것을 말한다. 글로벌 ICT 기업의 소프트웨어 개발팀에서 코드리뷰는 대부분 필수로 진행하고 있다. 글로벌 ICT 기업을 선도하는 구글은 어떤 환경에서 코드리뷰를 하는지 고찰해보고 다양한 관점을 파악해보자.
구글의 코드리뷰 관련 키워드는 개방과 공유(Openness & Sharing), 단일코드베이스(Monotonic Code Base), 코드체크봇(Code Check Bot) 세 가지로 분류할 수 있다.
1. 개방과 공유(Openness & Sharing)
구글은 기본적으로 전체 구성원간 전체 소스코드를 공유한다. Page Rank Search 알고리즘 및 보안과제, 안드로이드, 크롬 등 일부 플랫폼 과제는 별도로 운영하고, 이를 제외한 나머지는 하나의 거대한 저장소에서 전체 구성원 누구나 언제든지 원하는 코드리뷰가 가능하다. 이는 코드 재사용에도 효과적이다.
2. 단일코드베이스(Monotonic Code Base)
모든 서비스 코드를 단일코드베이스(Monotonic Code Base)로 운영한다. 2015년 1월 기준 코드라인의 크기는 약 20억 라인이다. 수정량은 매주 1,500만 라인이며 25만 개 파일에 해당한다. 이는 Linux OS 전체 코드인 1,500만 라인과 5만 개 파일에 육박하는 수준이다.
개발 측면에서 코드 베이스를 OS처럼 간주하여 한 번의 커밋(Commit)시 전체 서비스에 반영되는 것이 특징이다. 운영 측면에서 대규모 수정에 대응 가능한 시스템을 보유하고 있다는 점이 인상적이며, 10개 지역에 온라인 데이터센터(Farm) 기반으로 운영한다.
3. 코드체크봇(Code Check Bot)
단일코드베이스(Monotonic Code Base)와 코드체크봇(Code Check Bot) 구조 |
인프라 시스템 측면에서 단일코드베이스(Monotonic Code Base)에 Tricoder라는 정적 분석(잠재결함 분석) 도구와 Rosie라는 코드정리시스템(Large-Scale Cleanups and Code Changes)을 통해 Unused/Dead Code를 제거하고, 대규모 Refactoring을 지원한다.
Tricoder는 Code Review단계에서 잠재 결함을 분석하고 결과를 코드베이스에 자동 적용하는 방식이다.
Rosie는 구글의 공식 도구로서 2010년 처음 도입되었고, 2015년 1월 기준으로 월 약 8000건의 자동 커밋(Commit)을 수행하였다. 코드 수정 시 전체 저장소를 대상으로 검토하여 변경에 영향을 받는 코드를 자동 검색한다. 코드를 자동으로 수정하고 Incompatible 일 경우엔 Refactoring을 수행하고, Reference가 없는 코드의 경우는 정리 작업을 수행한다. 수정된 코드를 각 개발자에게 리뷰 요청을 하고, 리뷰어 코드는 자동 수정 반영되는 시스템이다.
코드품질을 올리는 방법
코드 개방과 공유가 실리콘밸리의 기업에는 일반적인 얘기로 들릴 수 있지만, 구글의 거대한 규모는 일반적이지 않기 때문에 개방과 공유의 구글 엔지니어링 문화는 분명 국내기업들에 시사점을 제공한다. 가장 많이 쓰는 코드리뷰 도구는 SMART BEAR사의 Code Collaborator이다.
구글에서 사용하는 정적분석과 코드리뷰 도구가 국내기업들이 사용하는 Code Collaborator 같은 상용 도구와 기능 면에서는 크게 다르지 않다. 다만 일련의 작업들의 자동화가 고도화 되어 있다는 점이 인상적이다. 최소한 Tricoder와 Rosie가 거른 코드부터 리뷰를 시작한다.
구글 소프트웨어 개발자 출신 전언에 따르면, 실제 코드리뷰는 과제 특성이나 팀리더에 따라 기준이 다를 수 있다고 한다. 하지만 코드리뷰 하기 전부터 이러한 깐깐한 환경은 코드품질을 높일 수 있는 토대를 마련하는 것이다.
글. Wonseop Sean Lee