Code Review — 코드 리뷰
아무리 뛰어난 개발자라도 혼자서 모든 결함을 잡아내기는 어렵다. 코드 리뷰는 내가 작성한 코드를 다른 사람의 시선으로 검증받는 과정이다. 단순히 결재를 받는 절차가 아니라, 최선의 코드를 함께 만들어가는 공동의 노력이다.
코드 리뷰란?
코드 리뷰(Code Review)란 소스 코드를 원래 작성자가 아닌 다른 사람들이 조심스럽고 체계적으로 검사하는 것이다. 일반 글쓰기의 검수(proofreading)와 비슷하다.
핵심은 다음과 같다:
- 코드 리뷰는 내가 작성한 코드를 다른 사람에게 검사 받는 시간이 아니라, 최선의 코드를 작성하기 위한 공동의 노력이다
- 코드 리뷰를 통해서 다른 개발자들과 소통할 수 있고, 생각하지 못했던 방식들을 배울 수도 있고, 더 좋은 프로젝트를 만들 수 있다
- 작성 코드에 대하여 결재를 받는 단계가 아니며, 서로 이해할 수 있는 코드를 만들자는 것이 목표이다
코드 리뷰의 필요성
- 버그와 설계 결함의 조기 발견: 다수의 버그와 설계 결함을 초기에 발견할 수 있다
- 지식 공유와 백업: 모든 코드를 한 명 이상의 사람이 살펴봄으로써, 작성자의 사라짐에 대비할 수 있다. 리뷰 하는 코드에 대한 주인 의식 및 책임감을 가지게 한다
- 문서화와 코드 개선의 강제 동기 부여: 작성자가 자신의 결정을 명확히 해야 하고, 작성자가 결함을 발견하는 데 참여한다. 누군가가 코드를 리뷰할 가능성이 있다는 것은 품질 기준을 높인다
- 경험이 부족한 직원들의 성장: 경험이 부족한 직원들이 코드 품질을 해치지 않고 실전 경험을 할 수 있다. 경험 많은 개발자와 협업 기회를 주고, 리뷰어로서 배울 수도 있다. 구글은 구글 소프트웨어 엔지니어를 위한 가독성 리뷰어 프로그램을 운영한다
코드 리뷰의 효과 (출처: Steve McConnell “Code Complete”)
평균 결함 감지 비율:
| 방법 | 결함 감지율 |
|---|---|
| 유닛 테스팅 | 25% |
| 기능 테스팅 | 35% |
| 통합 테스팅 | 45% |
| 설계 및 코드 검토 | 55% ~ 60% |
동일한 그룹의 사람들에 의해 개발된 11개의 프로그램에서, 리뷰 없이 진행한 처음 5개 프로그램은 코드당 평균 4.5개의 오류가 발생했으나, 나머지 6개의 리뷰 포함 프로그램은 코드당 평균 0.82개의 오류만 발생했다. 오류가 80% 이상 감소한 것이다. AT&T이 리뷰를 도입한 후 생산성이 14% 증가하고 결함이 90% 감소했다.
코드 리뷰의 오해
“코드 리뷰를 하면 코드가 완벽해진다”
코드 리뷰는 더 나은 코드를 만들기 위한 활동이다. 하지만 세상에 완벽한 코드는 없고, 더 나은 코드만 있을 뿐이다. 완벽한 코드에 집착하다 보면 개발 진행 속도 역시 영향을 받게 된다.
“리뷰 승인은 함께 책임지는 것이다”
코드 리뷰는 책임을 묻기 위한 활동이 아니다. 따라서 코드 리뷰를 승인하는 것 역시 책임을 지겠다는 뜻으로 받아들여서는 안 된다. 코드 리뷰를 통해 함께 작업물을 만들어 나간다는 주인의식을 도모하는 데 방점을 찍어야 한다. 코드로 인해 문제가 생겨도 책임을 묻기보다 함께 개선해 나가는 것이 옳다.
“시니어가 주니어를 가르치기 위한 목적이다”
코드 리뷰의 장점 중 하나는 팀의 평균 수준을 높일 수 있다는 점이다. 코드 리뷰를 통해 다른 개발자들의 코드를 많이 읽고 자신이 작성한 코드에 대해 바로 피드백 받을 수 있다. 하지만 이 배움은 장점 중 하나일 뿐, 코드 리뷰의 목적은 시니어가 주니어를 가르치는 것이 아니며, 일방향 적인 리뷰는 마치 숙제 검사를 하듯 압박감을 줄 수 있다.
코드 리뷰 시 체크포인트
코드 리뷰 단계에서 신경 써야 할 항목은 다음과 같다:
| 항목 | 체크 질문 |
|---|---|
| 디자인 | 코드가 시스템에 적합하게 잘 설계되었는가? |
| 기능성 | 코드가 작성자의 의도대로 작동하는가? 코드의 동작 방식이 사용자에게 적합한가? |
| 복잡성 | 코드를 더 간단하게 만들 수 있을까? 다른 개발자가 미래에 이 코드를 만났을 때 쉽게 이해하고 사용할 수 있을까? |
| 테스트 | 코드에 올바르고 잘 설계된 자동화된 테스트가 있는가? |
| 이름 짓기 | 변수, 클래스, 메서드 등에 명확한 이름을 사용했는가? |
| 주석 | 주석이 명확하고 유용한가? |
| 스타일 | 코드가 스타일 가이드를 따랐는가? |
| 문서화 | 개발자가 관련 문서도 업데이트했는가? |
코드 리뷰 과정

코드 리뷰 과정은 다음과 같은 단계로 진행된다:
1. 코드 변경 (Create change)
작성자는 자신의 작업 환경에서 코드베이스에 대한 변경 사항을 작성한다. 그런 다음 코드 리뷰 시스템에 변경 사항을 업로드한다. 코드 리뷰 시스템에 자동 분석 도구가 포함 되어 있을 경우, 자동 코드 분석 도구들이 실행되어 자동으로 검사를 할 수 있는 부분들을 먼저 검사해 준다 (예: 라인 수 당 글자 수 등). 코드 리뷰를 과정을 쉽고 빠르게 하기 위하여 최대한 작은 단위로 코드를 작성한다.
2. 리뷰 요청 (Request review)
작성자가 변경 사항의 차이점과 코드 리뷰 시스템에서 제공하는 자동 분석 도구의 결과에 만족한다면, 그들은 변경 사항을 한 명 이상의 리뷰어에게 이메일로 보낸다. 보통 리뷰어뿐만 아니라, 설정에 따라 해당 팀원 등에게 리뷰가 필요한 코드가 있다고 알람이 간다.
3. 코멘트 (Comment)
리뷰어들은 코드 리뷰 시스템에서 변경 사항을 열고 차이점에 대한 의견을 작성한다. 댓글은 기본적으로 미해결로 표시되며, 이는 작성자가 해결해야 하는 중요한 의견임을 의미한다. 또한, 리뷰어들은 선택적 또는 정보 제공을 위한 코멘트를 추가할 수도 있다.
4. 변경 수정 및 코멘트 응답 (Modify change, reply to comments)
작성자는 리뷰어의 코멘트에 따라 코드를 수정하고, 코멘트에 응답한다. 수정이 완료되면 변경사항을 다시 업로드한다.
5. 변경 승인 (Change approval)
리뷰어가 수정된 코드에 만족하면 변경을 승인한다. LGTM(Looks Good To Me)이 대표적인 승인 표현이다.
6. 변경 커밋 (Commit change)
승인이 완료되면 작성자는 코드를 코드베이스에 커밋한다.
산업계의 코드 리뷰
코드 리뷰는 매우 흔한 산업 관행이다. 코드 리뷰를 효과적으로 지원하는 여러 고급 도구들을 통해 더욱 쉽게 할 수 있다. 구성 관리 시스템과 통합되어 변경 사항을 강조하고 (예: 차이 비교 기능), 과거의 히스토리로 다시 돌아갈 수 있도록 해 준다.
대표적인 코드 리뷰 도구:
- Gerrit: 오픈소스 코드 리뷰 도구
- Critique: 구글 내부에서 사용하는 코드 리뷰 도구
- GitHub Pull Request: GitHub에서 제공하는 코드 리뷰 기능