코드 리뷰

한 줄 요약

Pull Request에서 코드를 검토하고 피드백을 주고받는 과정

선행 지식

개요

코드 리뷰는 다른 사람의 코드를 검토하고 피드백을 주는 과정입니다. 버그를 사전에 발견하고, 코드 품질을 높이며, 팀원 간 지식을 공유합니다.

코드 리뷰 화면

┌─────────────────────────────────────────────────────────────────┐
│ Pull Request #42: feat: 로그인 기능 추가                        │
├─────────────────────────────────────────────────────────────────┤
│ [Conversation] [Commits (3)] [Files changed (5)]                │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│ src/auth/login.js                                    +45  -10   │
│ ─────────────────────────────────────────────────────────────── │
│  10 │   function login(email, password) {                       │
│  11 │ +   if (!validateEmail(email)) {          ← 추가된 코드   │
│  12 │ +     throw new Error('Invalid email');                   │
│  13 │ +   }                                                     │
│  14 │     // ... rest of the code                               │
│     │                                                           │
│     │  💬 [Start a review]  [Add single comment]                │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

리뷰어로서

댓글 달기

  1. “Files changed” 탭 클릭
  2. 코드 줄 옆 + 버튼 클릭
  3. 댓글 작성
┌─────────────────────────────────────────────────────────────────┐
│  11 │ +   if (!validateEmail(email)) {                          │
│     │ ┌───────────────────────────────────────────────────────┐ │
│     │ │ validateEmail 함수가 정의되어 있지 않은 것 같습니다.    │ │
│     │ │ utils.js에서 import 해주세요.                          │ │
│     │ │                                                        │ │
│     │ │ [Add single comment] [Start a review]                  │ │
│     │ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘

리뷰 유형

유형용도
Comment단순 의견, 질문
Approve승인 (병합 가능)
Request changes수정 요청 (수정 전 병합 불가)

리뷰 제출

  1. “Review changes” 버튼 클릭
  2. 요약 댓글 작성
  3. 리뷰 유형 선택
  4. “Submit review” 클릭
┌─────────────────────────────────────────────────────────────────┐
│ Finish your review                                               │
│                                                                  │
│ ┌───────────────────────────────────────────────────────────┐   │
│ │ 전반적으로 좋습니다! 몇 가지 사소한 수정 사항 남겼습니다.    │   │
│ └───────────────────────────────────────────────────────────┘   │
│                                                                  │
│ ○ Comment                                                        │
│ ○ Approve ✓                                                     │
│ ● Request changes                                               │
│                                                                  │
│                                      [Submit review]            │
└─────────────────────────────────────────────────────────────────┘

좋은 리뷰 댓글

구체적으로

❌ "이거 별로예요"
✅ "이 함수가 null을 반환할 수 있는데, 호출하는 쪽에서 처리가 없어요"

이유와 함께

❌ "이름을 바꿔주세요"
✅ "getData보다 fetchUserProfile이 더 명확할 것 같아요. 
    무슨 데이터인지 바로 알 수 있거든요."

제안 형태로

❌ "이 코드 틀렸어요"
✅ "이 부분, 이렇게 하면 어떨까요?
    ```javascript
    const result = items.filter(item => item.active);
    ```"

칭찬도 함께

✅ "이 부분 깔끔하게 리팩토링되었네요! 👍"
✅ "에러 처리가 꼼꼼하게 되어있어서 좋습니다"

리뷰 받는 사람으로서

피드백에 응답하기

리뷰어: "이 변수명이 모호해 보입니다"

응답 방식:
1. 수정: 코드 수정 후 push, "Fixed!" 댓글
2. 설명: "이 이름을 선택한 이유는..."
3. 논의: "다른 의견이 있는데, 논의해볼까요?"

리뷰 반영 후

# 1. 리뷰 내용 반영
git add .
git commit -m "fix: 리뷰 반영 - 변수명 수정"
 
# 2. push (PR에 자동 반영)
git push
 
# 3. 리뷰 댓글에 응답
# "수정했습니다!" or "Resolved"

Resolve conversation

해결된 댓글은 “Resolve conversation” 버튼으로 정리합니다.

리뷰 체크리스트

코드 품질

  • 코드가 읽기 쉬운가?
  • 중복 코드가 없는가?
  • 함수/변수 이름이 명확한가?
  • 불필요한 주석이 없는가?

기능

  • 요구사항을 충족하는가?
  • 엣지 케이스 처리가 되었는가?
  • 에러 처리가 적절한가?

보안

  • 입력 검증이 되었는가?
  • 민감한 정보가 노출되지 않는가?
  • SQL 인젝션, XSS 등 취약점은 없는가?

성능

  • 비효율적인 알고리즘은 없는가?
  • 불필요한 API 호출은 없는가?
  • 메모리 누수 가능성은 없는가?

리뷰 에티켓

리뷰어

  • 비판이 아닌 제안 형태로
  • 코드를 비판하되 사람을 비판하지 않음
  • 시간 내에 리뷰 완료
  • 명확하게 수정 필요/선택 사항 구분

작성자

  • 열린 마음으로 피드백 수용
  • 방어적이지 않게 응답
  • 감사 표현 - 리뷰어의 시간을 존중
  • 빠른 응답 - 리뷰 흐름 유지

자주 하는 실수

리뷰가 너무 늦음

문제: PR이 오래 열려있음

해결:

  • 리뷰 요청 후 24-48시간 내 리뷰
  • 바쁘면 간단히라도 확인 의사 표시

너무 까다로운 리뷰

문제: 사소한 것까지 모두 지적

해결:

  • 중요도 표시: “nit:”, “minor:”, “blocker:”
  • 선택 사항은 “제안입니다” 표시

관련 문서

더 알아보기