02-02 PR과 코드 리뷰

Pull Request를 품질 게이트로 활용하는 법 — 좋은 PR 작성, 효과적인 리뷰, 브랜치 보호.


Pull Request를 품질 게이트로 활용하는 법 — 좋은 PR 작성, 효과적인 리뷰, 브랜치 보호.

목표: PR로 코드 품질을 지키고 협업 마찰을 줄이기


🔄 PR 흐름

graph LR
    BRANCH["feature 브랜치"] --> PR["PR 생성"]
    PR --> CI["🤖 CI 자동 검사"]
    CI --> REVIEW["👀 동료 리뷰"]
    REVIEW --> FIX["수정"]
    FIX --> REVIEW
    REVIEW --> MERGE["✅ 머지"]

PR은 단순 머지 수단이 아니라 자동화된 품질 검문소다: Lint → Test → Security Scan → 사람 리뷰.


✍️ 좋은 PR 작성법

  • 작게 쪼개라: 리뷰 가능한 크기(보통 400줄 이하). 큰 PR은 리뷰 품질이 급락
  • 하나의 목적: 한 PR = 하나의 논리적 변경
  • 설명 충실히: 무엇을·왜·어떻게 테스트했는지
  • 스스로 먼저 리뷰: 올리기 전 diff를 직접 읽기

PR 템플릿 예시:

## 변경 사항
- 로그인 OAuth 연동 추가

## 이유
- 소셜 로그인 요구사항(#123)

## 테스트
- [ ] 단위 테스트 통과
- [ ] 로컬에서 구글 로그인 확인

## 스크린샷
(UI 변경 시)

👀 효과적인 코드 리뷰

리뷰어 자세

  • 코드를 비판하되 사람을 비판하지 않는다
  • 칭찬도 남긴다(좋은 패턴 강화)
  • “이렇게 해야 한다”보다 “왜 이렇게 했나요?” 질문형
  • 막는(blocking) 의견과 단순 제안(nit)을 구분 표시: nit:

우선순위

우선항목
높음버그·보안·데이터 손실 가능성
중간설계·가독성·테스트 누락
낮음스타일·네이밍(nit:) — 가능하면 자동화로

[!tip] 스타일은 자동화로 포맷·린트는 리뷰에서 다투지 말고 Prettier/ESLint/pre-commit으로 자동화하라. 리뷰는 로직과 설계에 집중. → 03-04-Git-훅과-자동화


🔀 머지 방식 선택

방식결과적합
Merge commit모든 커밋 + 병합 커밋 보존히스토리 완전 보존
Squash and merge모든 커밋을 1개로 압축깔끔한 main(권장)
Rebase and merge커밋 보존 + 선형병합 커밋 없는 선형

대부분의 팀은 Squash로 main을 깔끔하게 유지한다.


🛡️ 브랜치 보호 규칙 (Branch Protection)

GitHub/GitLab에서 main을 보호:

  • ✅ main 직접 push 금지(PR 필수)
  • ✅ 머지 전 상태 체크(CI) 통과 필수
  • 최소 N명 승인 필요
  • ✅ 최신 base와 동기화 후 머지
  • CODEOWNERS: 영역별 필수 리뷰어 자동 지정
# .github/CODEOWNERS
/src/auth/    @security-team
*.tf          @infra-team

📋 체크리스트

  • 작고 목적이 분명한 PR 작성
  • PR 템플릿 활용
  • 질문형·비폭력 리뷰
  • blocking vs nit 구분
  • 머지 방식(squash 등) 선택
  • 브랜치 보호 + 상태 체크 설정
  • CODEOWNERS 구성

🔗 관련 노트

  • 02-01-브랜치-전략 — 이전
  • 02-03-커밋-컨벤션과-시맨틱-버저닝 — 다음
  • 02-02-GitHub-Actions — PR CI 구현
  • 01-04-원격-저장소와-협업 — push/PR 기초

마지막 업데이트: 2026-06-02