Skip to content
Published on

효과적인 코드 리뷰 문화 만들기: 리뷰어와 저자를 위한 실전 가이드라인

Authors
  • Name
    Twitter

효과적인 코드 리뷰 문화

들어가며: 코드 리뷰는 왜 중요하고, 왜 어려운가

코드 리뷰는 소프트웨어 개발에서 가장 널리 채택된 품질 관리 실천법 중 하나입니다. Google은 모든 코드 변경에 대해 최소 한 명의 리뷰어 승인을 요구하며, Microsoft 연구에 따르면 코드 리뷰를 통해 결함의 60-90%를 사전에 발견할 수 있습니다. 코드 리뷰는 단순히 버그를 찾는 행위를 넘어, 지식 공유, 코드 일관성 유지, 팀 전체의 코드 오너십 강화라는 핵심 가치를 제공합니다.

그런데 많은 팀에서 코드 리뷰가 병목이 됩니다. PR이 며칠씩 방치되거나, 리뷰 코멘트가 감정적 갈등으로 번지거나, "LGTM"이라는 한 마디로 형식적으로 끝나버리는 경우가 흔합니다. SmartBear의 연구에 따르면, 개발자의 60% 이상이 코드 리뷰 프로세스에 불만을 느끼고 있다고 합니다.

이 글에서는 Google Engineering Practices, Microsoft Research, LinkedIn의 사례 등을 바탕으로 효과적인 코드 리뷰 문화를 구축하는 실전 가이드라인을 다룹니다. 리뷰어와 저자 양쪽 모두를 위한 구체적인 행동 지침을 제시하고, 팀 단위에서 문화를 바꾸는 방법까지 설명합니다.

코드 리뷰의 핵심 목적

코드 리뷰를 시작하기 전에, 왜 하는지를 명확히 해야 합니다. 목적이 불분명하면 리뷰 과정이 방향을 잃고 비효율적이 됩니다.

버그 발견만이 목적이 아니다

많은 사람이 코드 리뷰의 주된 목적을 "버그 발견"이라고 생각하지만, 실제로 코드 리뷰에서 발견되는 결함의 대부분은 논리적 버그보다는 설계 문제, 가독성 이슈, 유지보수성 부족입니다. 코드 리뷰의 핵심 목적은 다음 네 가지입니다:

  1. 지식 공유와 학습: 팀원 전체가 코드베이스를 이해하게 됩니다. 특정 개인만 아는 "사일로(silo)"를 방지합니다.
  2. 코드 품질 향상: 설계, 가독성, 유지보수성 관점에서 코드를 개선합니다.
  3. 일관성 유지: 팀의 코딩 컨벤션과 아키텍처 패턴을 자연스럽게 전파합니다.
  4. 집단 코드 오너십: "내 코드"가 아니라 "우리 코드"라는 인식을 만듭니다.

Google의 코드 리뷰 원칙

Google Engineering Practices 문서에서는 코드 리뷰의 기본 원칙을 다음과 같이 정의합니다:

"코드 리뷰의 목적은 코드베이스의 전반적인 코드 건강 상태(code health)가 시간이 지남에 따라 개선되도록 하는 것이다. 이를 달성하기 위한 트레이드오프의 균형이 리뷰의 핵심이다."

즉, 완벽을 추구하면서 PR을 무한정 붙잡고 있는 것도, 대충 승인하여 품질을 낮추는 것도 좋지 않습니다. 코드베이스를 점진적으로 개선하는 방향으로 적절한 균형을 찾는 것이 중요합니다.

PR 저자를 위한 가이드라인

좋은 코드 리뷰는 좋은 PR에서 시작합니다. 리뷰어에게 리뷰하기 쉬운 PR을 제출하는 것은 저자의 책임입니다.

PR 크기: 작을수록 좋다

SmartBear의 연구에 따르면, 200-400줄의 변경이 최적의 리뷰 효율을 보입니다. 변경이 커질수록 리뷰어의 집중력이 떨어지고, 결함 발견율이 급격히 하락합니다.

PR 크기 (변경 줄 수)결함 발견율리뷰 소요 시간리뷰어 집중도
1-200줄높음15-30분매우 높음
200-400줄높음30-60분높음
400-800줄보통60-90분보통
800줄 이상낮음2시간 이상낮음

큰 기능을 구현할 때는 다음 전략으로 PR을 분할합니다:

  • 레이어별 분할: 데이터베이스 스키마 변경, API 엔드포인트, 프론트엔드 UI를 별도 PR로
  • 기능별 분할: 하나의 큰 기능을 독립적으로 동작하는 작은 단위로
  • 리팩토링과 기능 변경 분리: 리팩토링 PR과 새 기능 PR을 섞지 않기

PR 설명 템플릿

좋은 PR 설명은 리뷰어의 시간을 절약합니다. 다음은 실전에서 사용할 수 있는 PR 설명 템플릿입니다.

## 변경 사항 요약

사용자 프로필 페이지에 아바타 업로드 기능을 추가합니다.

## 변경 동기

- 사용자 피드백: 프로필 커스터마이징 요구 (이슈 #234)
- 다음 분기 소셜 기능 출시의 선행 작업

## 변경 내용

- ProfileAvatar 컴포넌트 신규 생성
- 이미지 리사이징 유틸리티 함수 추가 (최대 500x500px)
- S3 업로드 API 엔드포인트 구현
- 기존 프로필 페이지에 아바타 섹션 통합

## 테스트 방법

1. 프로필 페이지에서 아바타 클릭
2. 이미지 파일 선택 (JPEG, PNG 지원)
3. 크롭 영역 조정 후 업로드
4. 페이지 새로고침 후 아바타 유지 확인

## 스크린샷

(변경 전/후 스크린샷 첨부)

## 체크리스트

- [x] 단위 테스트 추가/수정
- [x] 기존 테스트 통과 확인
- [x] 접근성 검토 (alt 텍스트 등)
- [ ] 문서 업데이트 (별도 PR 예정)

셀프 리뷰 먼저

PR을 제출하기 전에 반드시 자신의 코드를 먼저 리뷰하세요. 많은 실수는 셀프 리뷰 단계에서 잡을 수 있습니다.

# PR 제출 전 셀프 리뷰를 위한 Git 설정
# diff를 좀 더 읽기 쉽게 표시하는 옵션
git config --global diff.algorithm histogram
git config --global diff.colorMoved default

# 변경 사항 전체를 한눈에 확인
git diff --stat main...HEAD

# 파일별로 상세 확인
git diff main...HEAD -- path/to/specific/file

셀프 리뷰 체크리스트:

  • 디버깅용 console.logprint 문이 남아있지 않은가
  • TODO 코멘트를 남겼다면, 이슈 트래커에 등록했는가
  • 변수명과 함수명이 의도를 명확히 전달하는가
  • 불필요한 파일이 커밋에 포함되지 않았는가

리뷰어를 위한 가이드라인

리뷰어의 역할은 단순히 코드의 문제를 지적하는 것이 아닙니다. 코드베이스의 건강을 유지하면서 저자의 성장을 돕는 것이 핵심입니다.

리뷰 응답 시간: 빠를수록 좋다

Google은 24시간 이내에 첫 리뷰 코멘트를 다는 것을 권장합니다. 리뷰가 느리면 다음과 같은 문제가 발생합니다:

  • 저자의 컨텍스트가 사라져서 수정 비용이 증가
  • 다른 PR과의 충돌 가능성 증가
  • 팀 전체의 개발 흐름(flow)이 끊김
  • 저자가 리뷰를 기다리며 멀티태스킹을 하면서 생산성 저하

실전 팁: 리뷰 요청이 오면 즉시 전체를 리뷰하지 못하더라도, 먼저 간단히 훑어보고 대략적인 방향에 대한 코멘트를 남기세요. "전체적인 접근 방식은 좋아 보입니다. 세부 리뷰는 오후에 하겠습니다"라는 한 마디가 저자에게 큰 안도감을 줍니다.

건설적 피드백의 기술

코드 리뷰에서 어떻게 말하느냐무엇을 말하느냐만큼 중요합니다. 동일한 피드백도 표현에 따라 학습 기회가 되거나 감정적 충돌이 됩니다.

나쁜 리뷰 코멘트 vs 좋은 리뷰 코멘트

# 나쁜 예시 1: 인신공격
"이렇게 짜면 누가 이해하겠어요?"

# 좋은 예시 1: 코드에 집중
"이 함수가 3가지 역할을 하고 있어서 이해하기 어려울 수 있습니다.
 단일 책임 원칙에 따라 분리하면 어떨까요?"
# 나쁜 예시 2: 모호한 지적
"이 부분 다시 해주세요."

# 좋은 예시 2: 구체적 제안
"이 정렬 로직에서 O(n^2) 복잡도가 발생합니다.
 데이터가 1000건을 넘으면 성능 이슈가 생길 수 있으니,
 Map을 사용한 O(n) 접근을 고려해보면 좋겠습니다."
# 나쁜 예시 3: 명령형
"이 변수명 바꿔."

# 좋은 예시 3: 질문형 + 근거
"Nit: userList보다 activeUsers가 의도를 더 명확히
 전달할 것 같은데, 어떻게 생각하시나요?"
# 나쁜 예시 4: 지식 과시
"당연히 팩토리 패턴을 써야지."

# 좋은 예시 4: 학습 기회 제공
"여기에 팩토리 패턴을 적용하면 새로운 타입 추가 시
 기존 코드 수정 없이 확장할 수 있습니다.
 참고: https://refactoring.guru/design-patterns/factory-method"
# 나쁜 예시 5: 감정적 반응
"또 이런 실수를..."

# 좋은 예시 5: 시스템 개선 관점
"이 패턴의 실수가 반복되고 있으니, 린트 규칙을 추가해서
 자동으로 잡히도록 하면 어떨까요?
 ESLint의 no-restricted-syntax 규칙이 적합할 것 같습니다."

코멘트 접두어 시스템

코멘트의 중요도를 명확히 하면 저자가 우선순위를 판단하기 쉽습니다. 다음은 널리 사용되는 접두어 시스템입니다.

접두어의미저자의 대응
Blocker반드시 수정해야 승인 가능수정 필수
Suggestion개선 제안이지만 현재도 동작함수정 권장, 논의 가능
Nit사소한 스타일/가독성 개선수정 선택사항
Question이해를 위한 질문답변 필요, 코드 수정은 불필요할 수 있음
Praise잘 작성된 부분에 대한 칭찬대응 불필요 (하지만 동기부여에 매우 효과적)
FYI참고 정보 공유대응 불필요
# 접두어 사용 예시

[Blocker] 이 쿼리에서 SQL Injection 취약점이 있습니다.
파라미터 바인딩을 사용해주세요.

[Suggestion] 이 로직을 별도 유틸 함수로 추출하면
다른 모듈에서도 재사용할 수 있을 것 같습니다.

[Nit] 이 줄의 들여쓰기가 4칸인데 프로젝트 컨벤션은 2칸입니다.

[Question] 이 캐시 TTL이 1시간인데, 특별한 이유가 있을까요?

[Praise] 이 에러 핸들링 패턴 정말 깔끔하네요!
다른 모듈에도 같은 패턴을 적용하면 좋겠습니다.

코드 리뷰 체크리스트

리뷰할 때 일관된 품질을 유지하기 위한 체크리스트입니다.

## 코드 리뷰 체크리스트

### 설계 (Design)

- [ ] 변경이 시스템 전체 아키텍처와 일관되는가?
- [ ] 적절한 수준의 추상화가 적용되었는가?
- [ ] 단일 책임 원칙을 따르는가?
- [ ] 향후 확장에 유연한 구조인가?

### 기능 (Functionality)

- [ ] 코드가 PR 설명에 명시된 대로 동작하는가?
- [ ] 엣지 케이스가 처리되었는가?
- [ ] 에러 처리가 적절한가?
- [ ] 동시성/병렬 처리 이슈는 없는가?

### 가독성 (Readability)

- [ ] 변수, 함수, 클래스 이름이 의도를 명확히 전달하는가?
- [ ] 필요한 곳에 주석이 있는가? (무엇을 하는지가 아니라 왜 하는지)
- [ ] 복잡한 로직에 대한 설명이 충분한가?
- [ ] 코드를 처음 보는 사람이 이해할 수 있는가?

### 테스트 (Testing)

- [ ] 새로운 기능에 대한 테스트가 추가되었는가?
- [ ] 테스트가 의미 있는 시나리오를 커버하는가?
- [ ] 기존 테스트가 모두 통과하는가?
- [ ] 테스트 자체의 가독성은 좋은가?

### 보안 (Security)

- [ ] 사용자 입력이 적절히 검증/이스케이프되는가?
- [ ] 인증/인가 로직이 올바르게 적용되었는가?
- [ ] 민감 정보가 로그에 노출되지 않는가?
- [ ] 의존성에 알려진 취약점은 없는가?

### 성능 (Performance)

- [ ] N+1 쿼리 등 명확한 성능 문제는 없는가?
- [ ] 불필요한 메모리 할당이나 루프는 없는가?
- [ ] 적절한 인덱스가 사용되고 있는가?
- [ ] 캐싱 전략이 적절한가?

리뷰 도구 및 자동화 비교

코드 리뷰의 효율을 높이기 위한 도구와 자동화 전략을 비교합니다.

코드 리뷰 플랫폼 비교

기능GitHub PRGitLab MRGerritPhabricator
인라인 코멘트지원지원지원지원
멀티 리뷰어지원지원지원지원
CODEOWNERS지원지원플러그인미지원
리뷰 자동 할당지원지원미지원지원
코멘트 해결 추적지원지원지원지원
머지 전 CI 통합우수우수보통보통
학습 곡선낮음낮음높음보통

자동화할 수 있는 것은 자동화하라

리뷰어의 시간은 기계가 할 수 없는 판단에 집중해야 합니다. 다음은 자동화로 대체할 수 있는 영역입니다.

자동화 대상도구 예시효과
코드 스타일/포맷Prettier, Black, gofmt스타일 관련 리뷰 코멘트 제거
정적 분석ESLint, SonarQube, Pylint일반적 버그 패턴 자동 탐지
타입 체크TypeScript, mypy타입 관련 오류 사전 차단
보안 스캔Snyk, Trivy, CodeQL알려진 취약점 자동 탐지
테스트 커버리지Codecov, Coveralls테스트 부족 영역 시각화
PR 크기 경고Danger.js, custom bot큰 PR에 대한 자동 경고
# GitHub Actions - PR 크기 자동 경고 예시
name: PR Size Check
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  check-size:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Check PR size
        run: |
          ADDITIONS=$(git diff --numstat origin/main...HEAD | awk '{s+=$1} END {print s}')
          DELETIONS=$(git diff --numstat origin/main...HEAD | awk '{s+=$2} END {print s}')
          TOTAL=$((ADDITIONS + DELETIONS))
          echo "Total changes: $TOTAL lines"
          if [ "$TOTAL" -gt 800 ]; then
            echo "::warning::PR이 800줄을 초과합니다 ($TOTAL줄). PR 분할을 고려해주세요."
          fi
# CODEOWNERS 파일 예시
# 특정 디렉토리에 대한 자동 리뷰어 지정

# 전체 프로젝트 기본 리뷰어
* @team-leads

# 프론트엔드 코드
/src/components/ @frontend-team
/src/pages/ @frontend-team

# 백엔드 API
/src/api/ @backend-team
/src/services/ @backend-team

# 인프라/배포 설정
/terraform/ @devops-team
/k8s/ @devops-team
/.github/workflows/ @devops-team

# 보안 관련 코드 (반드시 보안팀 승인 필요)
/src/auth/ @security-team
/src/crypto/ @security-team

안티패턴과 실패 사례

코드 리뷰에서 흔히 발생하는 안티패턴과 그 해결 방법을 살펴봅니다.

안티패턴 1: 러버 스탬프 리뷰

증상: 코드를 제대로 읽지 않고 습관적으로 "LGTM"을 남기는 것.

원인: 리뷰어가 바쁘거나, PR이 너무 크거나, 리뷰를 형식적 절차로 인식하는 경우.

해결책:

  • PR 크기를 400줄 이하로 제한하여 리뷰 부담 감소
  • 리뷰 시 최소 1개의 실질적 코멘트를 남기도록 팀 규칙 설정
  • 리뷰 품질을 정기적으로 회고에서 논의

안티패턴 2: 게이트키퍼 리뷰

증상: 시니어 개발자가 모든 PR의 리뷰어가 되어 병목이 발생하는 것.

원인: "이 사람이 승인하지 않으면 안 돼"라는 문화, 신뢰 부족.

해결책:

  • CODEOWNERS를 활용하여 도메인별 리뷰어 분산
  • 주니어 개발자도 리뷰어로 참여시켜 점진적 역량 강화
  • 리뷰어 로테이션 제도 도입

안티패턴 3: 바이크셰딩(Bikeshedding)

증상: 변수명이나 공백 같은 사소한 문제에 과도한 시간을 소비하면서, 설계 결함이나 성능 문제는 놓치는 것. "사소한 문제가 토론하기 쉽기 때문에" 발생하는 파킨슨의 사소함 법칙(Law of Triviality)의 전형적인 사례.

원인: 코드 스타일에 대한 자동화가 부족하거나, 리뷰의 우선순위 기준이 없는 경우.

해결책:

  • Prettier/Black 등의 포매터로 스타일 논쟁 원천 차단
  • 코멘트 접두어 시스템(Blocker/Suggestion/Nit) 도입으로 우선순위 명확화
  • 팀 스타일 가이드 문서화로 반복 논쟁 방지

안티패턴 4: 공격적 리뷰

증상: 코드가 아닌 사람을 비판하는 코멘트, 조롱하는 어조, "왜 이렇게 짰어?"식의 코멘트.

원인: 심리적 안전감(psychological safety) 부족, 커뮤니케이션 훈련 부재.

해결책:

  • 코드 리뷰 커뮤니케이션 가이드라인 수립 및 온보딩에 포함
  • "코드에 대한 피드백이지, 사람에 대한 평가가 아니다"라는 원칙 명문화
  • 문제가 되는 리뷰 패턴에 대해 1:1 피드백 제공

안티패턴 5: 무한 핑퐁 리뷰

증상: 수정, 재리뷰, 또 수정, 또 재리뷰가 끝없이 반복되어 PR이 몇 주씩 열려있는 것.

원인: 리뷰 기준이 불명확하거나, 리뷰어가 처음에 모든 피드백을 주지 않고 매 라운드마다 새로운 문제를 제기하는 경우.

해결책:

  • 리뷰어는 한 번에 모든 피드백을 제공 (가능한 한)
  • 3라운드 이상 반복되면 동기식 대화(화상 통화, 페어 프로그래밍)로 전환
  • "충분히 좋음(good enough)" 기준을 팀에서 합의

리뷰 속도 최적화 전략

코드 리뷰 속도는 팀 전체의 생산성에 직접적 영향을 미칩니다. DORA(DevOps Research and Assessment) 리서치에서도 리드 타임 단축이 소프트웨어 딜리버리 성과의 핵심 지표임을 밝히고 있습니다.

리뷰 시간 할당 전략

권장 리뷰 시간 할당 (일일 기준)

아침 (업무 시작 직후): 15-30분 리뷰 시간 확보
  - 전날 밤에 들어온 PR 확인
  - 간단한 PR은 즉시 리뷰 완료

점심 전: 15분 리뷰 시간 확보
  - 오전에 들어온 PR 확인
  - 복잡한 PR은 오후 일정에 리뷰 블록 설정

오후: 필요 시 집중 리뷰 블록
  - 큰 PR이나 복잡한 설계 리뷰에 할당
  - 30-60분 단위로 집중

총 리뷰 시간: 하루 1-1.5시간 이내 권장

리뷰 병목 해소를 위한 프로세스 설계

  1. 리뷰어 자동 할당: CODEOWNERS와 라운드 로빈 방식을 결합
  2. SLA 설정: 첫 응답 4시간 이내, 최종 승인 24시간 이내
  3. 스탠드업에서 리뷰 현황 공유: "리뷰 대기 중인 PR이 있습니다"를 일상적으로 공유
  4. WIP(Work In Progress) PR 활용: 초기 설계에 대한 피드백을 조기에 받기

특수 상황에서의 코드 리뷰

주니어 개발자의 PR 리뷰

주니어 개발자의 PR을 리뷰할 때는 특히 교육적 관점이 중요합니다:

  • 왜 그렇게 해야 하는지 이유를 함께 설명
  • 관련 문서나 학습 자료 링크를 첨부
  • 한 번에 너무 많은 피드백을 주지 않기 (3-5개의 핵심 포인트에 집중)
  • 잘한 부분에 대한 칭찬을 반드시 포함

긴급 핫픽스 리뷰

프로덕션 장애 상황에서의 리뷰는 평소와 다른 기준이 필요합니다:

  • 범위를 최소화: 장애 해결에 필요한 최소한의 변경만 포함
  • 사후 리뷰: 핫픽스 배포 후 정상 프로세스로 후속 리뷰 진행
  • 리뷰 생략 기준 명문화: 어떤 조건에서 리뷰 없이 배포할 수 있는지 사전에 합의

외부 기여자(오픈소스) 리뷰

외부 기여자의 PR은 추가적인 고려사항이 있습니다:

  • 기여 가이드라인을 명확히 문서화
  • 첫 기여에 대해 특별히 환영하는 메시지 전달
  • 프로젝트 맥락을 모를 수 있으므로 배경 설명을 충분히 제공

팀 도입 체크리스트

코드 리뷰 문화를 팀에 새로 도입하거나 개선할 때 사용할 수 있는 단계별 체크리스트입니다.

## 코드 리뷰 문화 도입 체크리스트

### Phase 1: 기반 구축 (1-2주)

- [ ] 팀 코딩 스타일 가이드 문서화
- [ ] 코드 포매터/린터 CI 파이프라인에 통합
- [ ] PR 설명 템플릿 저장소에 추가
- [ ] CODEOWNERS 파일 설정
- [ ] 리뷰 응답 SLA 합의 (예: 첫 응답 4시간 이내)

### Phase 2: 프로세스 정립 (2-4주)

- [ ] 코멘트 접두어 시스템(Blocker/Suggestion/Nit) 도입
- [ ] PR 크기 가이드라인 설정 (예: 400줄 이하 권장)
- [ ] 리뷰어 로테이션 제도 시작
- [ ] 건설적 피드백 가이드라인 공유 및 워크숍
- [ ] 리뷰 체크리스트 팀 공유

### Phase 3: 습관화 (1-2개월)

- [ ] 주간 리뷰 메트릭 측정 시작 (응답 시간, PR 크기, 라운드 수)
- [ ] 스프린트 회고에서 리뷰 프로세스 피드백 수집
- [ ] 좋은 리뷰 사례 팀 내 공유 (월간)
- [ ] 리뷰 가이드라인 업데이트 (분기별)

### Phase 4: 최적화 (지속적)

- [ ] 자동화 범위 확대 (AI 코드 리뷰 도구 검토 등)
- [ ] 크로스팀 리뷰 세션 도입
- [ ] 리뷰 문화 관련 팀 만족도 서베이 (분기별)
- [ ] 리뷰 메트릭 기반 프로세스 개선

측정 지표: 코드 리뷰 효과 추적하기

개선하려면 측정해야 합니다. 다음은 코드 리뷰 문화의 건강도를 파악할 수 있는 핵심 지표입니다.

지표설명건강한 범위위험 신호
첫 응답 시간PR 제출 ~ 첫 코멘트4시간 이내24시간 이상
최종 승인 시간PR 제출 ~ 최종 승인24시간 이내72시간 이상
평균 PR 크기변경된 코드 줄 수200-400줄800줄 이상
리뷰 라운드 수수정 ~ 재리뷰 반복 횟수1-2회4회 이상
리뷰 참여율팀원 중 리뷰에 참여하는 비율80% 이상50% 이하
코멘트 밀도PR당 평균 코멘트 수2-8개0개(러버 스탬프) 또는 20개 이상(과도한 지적)

자주 묻는 질문

"리뷰 코멘트에 동의하지 않을 때는 어떻게 하나요?"

의견이 다를 때는 다음 단계를 따릅니다:

  1. 먼저 리뷰어의 의도를 정확히 이해했는지 확인 (되묻기)
  2. 자신의 관점과 근거를 코멘트로 설명
  3. 2라운드 이상 합의가 안 되면 동기식 대화(화상 통화)로 전환
  4. 그래도 합의가 안 되면 제3자(테크 리드)의 판단을 요청

핵심은 옳고 그름의 문제가 아니라 트레이드오프의 문제로 접근하는 것입니다.

"시간이 없어서 리뷰를 못 하겠습니다"

리뷰는 "내 일 외에 추가로 하는 것"이 아니라 개발 업무의 핵심 부분입니다. 리뷰할 시간이 없다면, 그것은 일정 계획에 리뷰 시간이 반영되지 않았다는 뜻입니다.

  • 스프린트 계획 시 개발 작업의 20%를 리뷰 시간으로 확보
  • 리뷰를 스탠드업에서 공유하여 팀 전체가 인식
  • 급한 경우 다른 리뷰어에게 위임하되, 그 사실을 PR에 코멘트로 남기기

"모든 PR에 리뷰가 필요한가요?"

대부분의 경우 예입니다. 하지만 다음 경우에는 간소화된 프로세스를 적용할 수 있습니다:

  • 자동 생성된 코드 (Protobuf, OpenAPI 등)
  • 문서 오타 수정 등 극히 사소한 변경
  • 긴급 핫픽스 (사후 리뷰 필수)

이러한 예외 상황은 반드시 팀에서 사전에 합의하고 문서화해야 합니다.

마무리: 코드 리뷰는 기술이 아니라 문화다

효과적인 코드 리뷰는 단순히 도구나 프로세스의 문제가 아닙니다. 그것은 팀이 함께 성장하겠다는 의지의 표현이며, 서로의 코드에 관심을 갖고 건설적으로 소통하는 문화입니다.

Google의 코드 리뷰 가이드에서도 강조하듯, 완벽한 코드란 존재하지 않습니다. 코드 리뷰의 목표는 완벽함이 아니라 점진적 개선입니다. 어제보다 오늘의 코드베이스가 조금이라도 나아졌다면, 그것이 좋은 리뷰입니다.

코드 리뷰 문화를 바꾸는 것은 하루아침에 되지 않습니다. 하지만 작은 습관의 변화 -- 코멘트에 접두어를 붙이기, PR 설명을 조금 더 상세히 쓰기, 좋은 코드에 칭찬 코멘트를 남기기 -- 가 모여서 팀의 문화를 바꿉니다.

오늘 리뷰하는 그 PR에서부터 시작해보세요.

참고 자료