Pull Request 개념과 역할, 브랜치 push→PR 생성→코드 리뷰→수정→merge까지 전체 워크플로, 좋은 PR 설명 작성법, 리뷰어 관점 피드백 남기기, PR 머지 방식 3가지(merge/squash/rebase)를 완전히 익힙니다.
🎯 학습 목표
이 강을 마치면 다음을 할 수 있습니다.
- Pull Request(PR)가 무엇인지, 왜 사용하는지 설명할 수 있습니다.
- 브랜치 push → PR 생성 → 코드 리뷰 → merge까지 전체 워크플로를 실행할 수 있습니다.
- 좋은 PR 제목과 설명을 작성하는 원칙을 이해합니다.
- GitHub에서 리뷰 피드백을 남기고 받는 방법을 알고 있습니다.
- Merge, Squash, Rebase 세 가지 머지 방식의 차이를 구분할 수 있습니다.
🔁 Pull Request란 무엇인가
이 섹션에서는 Pull Request의 개념과 Git의 merge 명령과 어떻게 다른지 살펴보겠습니다.
Pull Request(PR)는 "내 브랜치의 변경 사항을 다른 브랜치에 합쳐달라"는 요청을 GitHub 웹 인터페이스를 통해 공식적으로 제출하는 것입니다. 이름의 "Pull"은 상대방(메인테이너)이 내 작업을 당겨서(pull) 합쳐달라는 요청에서 왔습니다.
git merge와 PR의 차이는 과정에 있습니다. git merge는 로컬에서 즉시 병합하지만, PR은 병합 전에 팀원 검토(코드 리뷰) 단계를 거칩니다. 취업 후 거의 모든 회사에서 PR을 통한 코드 리뷰를 필수로 사용합니다.
PR의 핵심 가치입니다.
- 코드 리뷰: 다른 개발자가 내 코드를 검토해 버그·보안 문제·개선 사항을 발견
- 지식 공유: 팀 전체가 코드 변경 내역을 인지하고 논의하는 과정
- 기록 보존: PR 설명, 댓글, 결정 과정이 GitHub에 영구 기록됨
- 품질 게이트: 자동 테스트(CI)를 통과한 코드만 병합 허용
📋 PR 생성 — 단계별 워크플로
이 섹션에서는 실제 PR을 생성하고 리뷰를 받아 최종 병합까지 진행하는 전체 과정을 단계별로 살펴보겠습니다.
# 1. 기능 브랜치 작업 및 push
git switch -c feature/user-profile
# ... 작업 및 커밋들 ...
git push -u origin feature/user-profile
# push 후 GitHub이 자동으로 PR 생성 안내 링크 표시:
# remote: Create a pull request for 'feature/user-profile' on GitHub by visiting:
# remote: https://github.com/username/project/pull/new/feature/user-profile
GitHub 웹에서 PR을 생성하는 순서입니다.
- 저장소 페이지에서 노란색 배너의 "Compare & pull request" 버튼 클릭 (push 직후 자동 표시)
- base 브랜치(합칠 목적지, 보통 main)와 compare 브랜치(내 기능 브랜치) 확인
- PR 제목 입력 (커밋 메시지와 별개로 전체를 요약하는 제목)
- 설명(description) 작성
- 리뷰어(Reviewers), 담당자(Assignees), 라벨(Labels) 설정 (팀 규칙에 따라)
- "Create pull request" 버튼 클릭
✍️ 좋은 PR 작성법
이 섹션에서는 리뷰어가 빠르고 효과적으로 리뷰할 수 있게 도와주는 PR 작성 원칙을 살펴보겠습니다.
좋은 PR은 리뷰어의 시간을 아끼고 리뷰 품질을 높입니다. PR 제목과 설명은 커밋 메시지와 달리 코드를 읽기 전에 "맥락과 의도"를 전달하는 역할입니다.
# PR 제목 예시
feat: 사용자 프로필 페이지 추가 (#123)
fix: 결제 금액 소수점 반올림 오류 수정
refactor: 인증 미들웨어 모듈화
PR 설명의 기본 구성입니다.
- What (무엇을 했는가): 변경한 내용을 핵심만 간결하게 목록으로
- Why (왜 했는가): 이 변경이 필요한 이유, 해결하는 문제
- How to test (어떻게 테스트하는가): 리뷰어가 동작을 확인할 수 있는 단계별 방법
- Screenshots (UI 변경 시): Before/After 스크린샷
- Related issues: 관련 이슈 번호 (
Closes #123이라고 쓰면 PR merge 시 이슈 자동 닫힘)
팀에서 PR 템플릿을 정해두면 일관성이 높아집니다. GitHub에서
.github/PULL_REQUEST_TEMPLATE.md파일을 만들면 PR 생성 시 자동으로 설명 칸에 템플릿이 채워집니다.
👀 코드 리뷰 — 주고받기
이 섹션에서는 리뷰어와 PR 작성자 양쪽 관점에서 효과적인 코드 리뷰 방법을 살펴보겠습니다.
GitHub PR의 "Files changed" 탭에서 코드 라인별로 댓글을 달 수 있습니다. 줄 번호 옆의 + 아이콘을 클릭하면 해당 줄에 댓글을 입력할 수 있습니다.
리뷰어 관점: 피드백을 명확하고 건설적으로 남기는 방법입니다.
- 제안(suggestion)** 기능 활용: 리뷰어가 직접 수정 코드를 제안하면 PR 작성자가 클릭 한 번으로 반영 가능
- 단순 오류 지적보다 이유 + 개선 방향 함께 제시: "이 변수명이 모호합니다" 보다 "이 변수가 사용자 ID를 담고 있으므로
userId가 더 명확할 것 같습니다" - 심각도 구분: 반드시 수정해야 할 것(blocking)과 선택 사항인 제안(non-blocking)을 구분해 표시
PR 작성자 관점: 리뷰를 받는 방법입니다.
- 피드백에 방어적으로 반응하지 않기 — 코드에 대한 피드백이지 나에 대한 공격이 아닙니다
- 각 댓글에 수정 완료 또는 반대 의견을 명확히 답변하고 "Resolve" 처리
- 수정 사항 커밋 후 재리뷰 요청
# 리뷰 피드백 반영 후 push
git add .
git commit -m "fix: 코드 리뷰 반영 — 변수명 명확화 및 에러 처리 추가"
git push
# PR이 자동으로 업데이트됨 (새 커밋이 PR에 반영)
✅ PR 승인 및 merge 방식 선택
이 섹션에서는 리뷰가 완료된 PR을 합치는 세 가지 방식과 각각의 특징을 살펴보겠습니다.
리뷰어가 "Approve"(승인)하면 PR을 병합할 수 있습니다. GitHub은 세 가지 merge 방식을 제공합니다.
| 방식 | 동작 | 히스토리 | 사용 상황 |
|---|---|---|---|
| Merge commit | 모든 커밋 유지 + merge commit 추가 | 분기 흔적 보존 | 각 커밋이 의미 있을 때 |
| Squash and merge | PR의 모든 커밋을 1개로 합침 | main이 선형, 깔끔 | WIP 커밋이 많은 PR |
| Rebase and merge | 커밋을 main 위에 재배치, merge commit 없음 | 완전 선형 | 커밋 품질이 좋고 선형 히스토리 선호시 |
팀에서 한 가지 방식으로 통일하는 것이 중요합니다. 대부분의 팀은 Squash and merge를 선호합니다. 개발 중 남긴 "wip", "임시", "typo 수정" 같은 작은 커밋들이 main 히스토리에 섞이지 않고, PR 단위로 깔끔하게 정리되기 때문입니다.
📝 핵심 요약
12강에서 배운 내용을 정리해 보겠습니다.
PR 생성 흐름입니다.
- 기능 브랜치에서 작업 + 커밋
git push -u origin 브랜치명- GitHub에서 PR 생성 (제목·설명·리뷰어 설정)
- 코드 리뷰 → 수정 → 재리뷰
- Approve 후 merge
- 브랜치 삭제
PR 설명 필수 항목: What(무엇) · Why(왜) · How to test(테스트 방법) · Related issues(관련 이슈)
다음 강인 13강 — 협업 워크플로에서는 팀에서 실제로 사용하는 체계적인 Git 전략인 GitHub Flow와 Git Flow를 비교하고, 상황에 맞는 브랜치 전략을 선택하는 기준을 배웁니다!
관련 주제
- Pull Request
- 코드 리뷰
- PR 생성 흐름
- Merge·Squash·Rebase
- 좋은 PR 설명 작성법
- 개발·프로그래밍
- 개발·프로그래밍 강의
- 깃허브 사용법 18강 — Git & GitHub 협업
- 무료강의
- 무료 온라인 강의
- NUGUNA
- 누구나
📚 시리즈 전체 공유
깃허브 사용법 18강 — Git & GitHub 협업
이 강의가 속한 시리즈는 총 12강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.
댓글
불러오는 중...
