풀 리퀘스트
pull request는 코드 변경사항을 리뷰하고 병합하는 기능을 제공하는 깃허브의 기능이다. 코드 변경사항을 다른 사람에게 알리고 리뷰를 받아 코드를 병합하는 과정을 통해 품질을 높일 수 있다.
개요
Pull Request(PR)는 분산 버전 관리 시스템인 Git 기반의 협업 환경에서 가장 핵심적인 단계이다. 개발자가 자신의 작업 브랜치에서 완료한 변경 사항을 메인 코드베이스(Main/Master)에 병합(Merge)해달라고 다른 팀원들에게 공식적으로 요청하는 절차를 의미한다. 이를 통해 코드 리뷰를 수행하고, 프로젝트의 품질을 유지하며, 버그를 사전에 방지한다.
혼자 작업하는 경우에는 자신이 모든 변경사항을 직접 검토할 수 있지만, 팀 프로젝트에서는 다른 사람의 시각 혹은 책임을 가진 누군가가 통합에 대한 책임과 권한을 가지고 검토하는 것이 중요하다. pull request는 이러한 협업 과정을 지원하는 중요한 도구이다.
단순히 로컬 브랜치를 원격에 push 하고 merge 하는것과 달리, pull request는 깃허브 웹 인터페이스를 통해 이루어지며, 아래 그림에서와 같이 코드 리뷰, 토론, 승인 등의 과정을 포함한다.
graph LR
Dev[Developer] -- "Push" --> Main[Main Repo/Server]
Main -- "Deploy (Bug Included ❌)" --> User[User]
style Dev fill:#f9f,stroke:#333,stroke-width:2px
style Main fill:#ff9,stroke:#333,stroke-width:2px
style User fill:#ddd,stroke:#333,stroke-width:1px
[직접 Push 후 배포 시 버그 발생 가능성]
graph LR
Dev[Developer] -- "Pull Request" --> Review[Review & Merge]
Review -- "Merge (No Bug ✅)" --> Main[Main Repo/Server]
Main -- "Deploy" --> User[User]
style Dev fill:#f9f,stroke:#333,stroke-width:2px
style Review fill:#fff,stroke:#333,stroke-width:4px
style Main fill:#ff9,stroke:#333,stroke-width:2px
style User fill:#ddd,stroke:#333,stroke-width:1px
[pull request 통한 코드 리뷰 및 병합 과정]
PR의 주요 목적은 다음과 같다.
- 코드 리뷰(Code Review): 동료 개발자가 작성된 코드를 검토하여 논리적 오류나 스타일 가이드를 체크한다.
- 변경 이력 기록: 어떤 이유로 코드가 수정되었는지 토론 과정과 함께 기록으로 남는다.
- 자동화 테스트(CI) 연동: PR이 생성되면 자동으로 빌드 및 테스트를 수행하여 안정성을 검증한다.
Sponsored
PR 절차
현재 feature 브랜치에서 작업을 완료했다고 가정하자. 이제 이 변경사항을 메인 브랜치에 병합하기 위해 PR을 생성하는 과정을 살펴보자. 이번 장에서는 주요 개념과 절차, 명령어 등을 간단하게 살펴보고 관련 실습은 07. 실전 튜토리얼 에서 진행하게 된다.
PR 절차 개요
실제 상황에서는 기존 브랜치로 부터 작업을 진행하는 경우도 있으나 여기서는 새로운 브랜치를 로컬에서 생성하여 작업을 완료한 후 PR을 생성하는 과정을 다음 절차에 따라 설명한다.
- 원격 저장소에 푸시
- PR 생성
- PR 검토
- PR 병합
1. 원격 저장소에 푸시
먼저 로컬에서 생성한 feature 브랜치를 원격 저장소에 푸시한다.
2. PR 생성
깃허브 웹사이트로 이동하여 해당 저장소의 "Pull Requests" 탭을 클릭한 후 "New Pull Request" 버튼을 클릭하거나 GitHub CLI를 사용하여 PR을 생성할 수 있다.

GitHub CLI를 사용하는 경우 다음 명령어를 입력한다. 필요한 경우 gh auth login 명령어로 인증을 먼저 진행한다.
$ gh pr create --base main --head feature --title "feat: add new feature" --body "This PR adds a new feature."
3. PR 검토
PR이 생성되면 팀원들이 코드를 검토하고 피드백을 제공할 수 있다. 필요한 경우 추가 커밋을 푸시하여 변경사항을 반영할 수 있다. GitHub 웹사이트에서 댓글을 통해 이슈와 팀원을 참조하여 토론할 수도 있다.

4. PR 병합
검토가 완료되고 승인이 되면 PR을 메인 브랜치에 병합할 수 있다. GitHub 웹사이트에서 "Merge pull request" 버튼을 클릭하거나 GitHub CLI를 사용하여 병합할 수 있다.

이때 병합전략에 따라 "Create a merge commit", "Squash and merge", "Rebase and merge" 중 하나를 선택할 수 있다. 병합전략은 04. 브랜치와 병합을 참고하기 바란다.
5. 브랜치 정리
병합이 완료되면 로컬과 원격 저장소에서 feature 브랜치를 삭제하여 브랜치를 정리할 수 있다. GitHub 웹사이트에서 "Delete branch" 버튼을 클릭하는 것이 간단하다.

현재 까지의 작업은 원격 저장소에서 진행된 것이므로 이를 로컬에도 반영해야 한다. 먼저 main으로 이동한 다음 원격 저장소의 main 브랜치를 pull 한다. 이후 로컬 브랜치를 삭제한다.
- 원격 저장소에서 병합후 로컬 브랜치를 삭제할 때
-d옵션을 사용하면 Git이 병합되지 않은 브랜치에 대해서는 기본적으로 삭제를 거부한다. - 여기서는 로컬에서 병합을 하지 않았지만 원격 저장소에서 병합이 되었기 때문에 feature 브랜치를 병합할 필요가 없다.
- 강제로 삭제하려면
-D옵션을 사용할 수 있다.
만일 원격 브랜치를 GitHub 웹사이트에서 삭제하지 않았다면 다음 명령어로 원격 브랜치도 삭제할 수 있다.