사전 코드 리뷰
개념

코드 리뷰

gabury1고친 사람 github-actions[bot]

코드 리뷰는 코드를 짠 사람(이 글에서는 작성자라 부릅니다)이 아닌 다른 사람이 그 코드를 한 번 더 읽어 보는 일입니다. 합치기 전에 실수를 짚어 주고 더 나은 방법을 제안받으려는 것입니다. 이 확인을 거친 코드만 저장소의 기준 브랜치에 들어갑니다.

쉽고 빠른 이해

코드 리뷰는 작성자 말고 다른 사람이 그 변경을 한 번 더 읽고 의견을 남기는 절차입니다. 바뀐 줄마다 동료가 댓글을 달고, 필요하면 고쳐서 다시 올리는 방식으로 진행됩니다.

이 확인이 없으면 실수가 그대로 합쳐집니다. 작성자는 자기 코드의 문제를 스스로 못 보는 일이 잦고, 팀이 같은 방식으로 코드를 짜고 있는지도 아무도 모르게 됩니다.

어떻게 도는가:

  1. 작성자가 리뷰를 요청합니다
  2. 리뷰어가 줄마다 의견을 답니다
  3. 작성자가 의견을 반영해 다시 올립니다
  4. 리뷰어가 승인하면 그제야 합쳐집니다

대가도 있습니다. 리뷰를 기다리는 동안 병합이 늦어지고, 리뷰어의 시간도 그만큼 듭니다.

급한 상황이면 건너뛰기도 합니다. 혼자 관리하는 프로젝트나 장애 대응처럼 확인보다 속도가 급할 때는 이 절차를 생략합니다.

상세

주방에서 요리사가 만든 접시는 손님상에 나가기 전에 주방장 앞을 한 번 지납니다. 저울과 타이머가 양과 굽는 시간을 이미 맞춰 준 뒤에도, 주방장은 그 접시가 주문한 음식이 맞는지 가게가 늘 내던 모양인지를 봅니다. 아니면 접시는 손님상 대신 주방 안으로 돌아갑니다.

코드 리뷰는 이 주방장 역할을 동료가 맡는 절차입니다. 작성자가 자기 변경을 합치기 전에 다른 사람에게 보여주고, 그 사람이 바뀐 줄마다 의견을 답니다. 어색한 한 줄은 보기 싫은 데서 끝나지 않고 오작동으로 이어집니다. 이 확인이 빠지면 그 오류가 그대로 사용자에게 나갑니다. 여러 사람이 함께 코드를 고치는 저장소에서, 한 사람의 실수나 습관이 그대로 굳어지지 않게 막는 것이 이 절차의 목적입니다.

리뷰가 확인하는 대상

동료가 보는 것은 문법 오류가 아닙니다. 컴파일러나 정적 분석 도구가 이미 그런 것을 잡아 줍니다. 사람이 보는 것은 그 코드가 하려는 일과 실제로 짠 방식이 맞는지, 팀이 정한 이름 규칙이나 구조를 따르는지처럼 기계가 판단하기 어려운 부분입니다.

또 하나는 지식입니다. 리뷰를 하며 동료는 자신이 안 짠 코드가 어떻게 도는지 보게 되고, 그 사람이 나중에 그 코드를 고칠 때는 이미 한 번 읽어 본 상태로 시작합니다.

건너뛰기도 하는 때

코드 리뷰는 여러 사람이 같이 코드를 고치는 저장소에서 의미가 있습니다. 혼자 관리하는 작은 프로젝트에는 봐 줄 다른 사람이 없으므로 이 절차를 둘 이유가 없습니다.

서비스가 멈춰서 당장 고쳐야 하는 장애 대응처럼, 확인보다 속도가 급한 상황에서도 리뷰를 건너뛰고 먼저 고친 뒤 나중에 돌아보기도 합니다. 다만 이런 예외를 늘리면 리뷰가 있으나 마나 한 절차가 됩니다.

왕복이 도는 순서

리뷰는 한 번의 대화로 끝나지 않고 여러 번 오가는 왕복입니다. 작성자와 리뷰어가 승인이 날 때까지 이 왕복을 되풀이합니다.

sequenceDiagram
    participant 작성자
    participant 리뷰어
    작성자->>리뷰어: 다시 올린다
    리뷰어-->>작성자: 의견을 남긴다
    Note over 작성자,리뷰어: 승인이 날 때까지 되풀이한다

승인이 나기까지 이 순환이 몇 번이고 되풀이될 수 있습니다. 정해진 왕복 횟수는 없고, 리뷰어가 더 볼 것이 없다고 판단할 때 끝납니다.

리뷰가 놓치는 부분

코드 리뷰가 모든 것을 잡지는 않습니다. 리뷰어는 화면에 보이는 변경분만 읽으므로, 여러 파일이 얽혀야 드러나는 오류는 그 화면만으로 안 보입니다. 그런 오류는 실제로 돌려 보는 테스트나 운영에 올린 뒤에야 드러납니다.

리뷰어가 시간에 쫓기면 형식만 갖추고 제대로 안 읽고 승인하는 일도 생깁니다. 이러면 리뷰를 거쳤다는 기록만 남고 확인 효과는 사라집니다. 그리고 리뷰를 기다리는 동안 병합이 늦어지므로, 리뷰가 쌓이는 팀은 그만큼 배포도 늦어집니다.

리뷰를 막아서는 규칙

많은 저장소는 리뷰 없이 합치는 것을 아예 막아 둡니다. 특정 사람이 승인해야만 합칠 수 있게 정해 두는 것을 승인 규칙이라 부릅니다.

어느 영역은 누가 승인해야 하는지를 미리 정해 둔 사람을 코드 소유자라고 부릅니다. 그 영역에 손을 대면 이 사람의 승인이 필요합니다.

팀마다 이런 정함을 문서로 남기기도 합니다. 이 문서를 코드 리뷰 규칙이라 부릅니다.

관련 항목

코드 리뷰 앞뒤에 놓이는 버전 관리 단계

브랜치 전략 · 커밋 메시지 · 풀 리퀘스트 · 병합 · 리베이스

코드 리뷰가 잡아내려는 결함

경쟁 상태 · TOCTOU · 메모리 누수 · SQL 인젝션

코드 리뷰와 함께 결함을 잡는 다른 검증 방법

정적 분석 · 단위 테스트 · 페어 프로그래밍 · ThreadSanitizer

코드 리뷰를 관장하는 규칙과 담당자

코드 소유자 · 승인 규칙 · 코드 리뷰 규칙 · 브랜치 보호 규칙

코드 리뷰 기능을 구현한 도구

Git · GitHub · GitLab · Gerrit · Bitbucket

다른 이름: code review · 코드 검토