[이제와서 시작하는 GitHub 마스터하기 - 기초편 #15] Pull Request: 협업과 코드 리뷰의 핵심
[이제와서 시작하는 GitHub 마스터하기 - 기초편 #15] Pull Request: 협업과 코드 리뷰의 핵심
학습 목표
이 장을 마치면 다음을 할 수 있습니다:
- ✅ Pull Request(PR)의 개념과 중요성을 이해할 수 있습니다
- ✅ PR을 생성하고 관리할 수 있습니다
- ✅ 효과적인 PR 설명을 작성할 수 있습니다
- ✅ 코드 리뷰를 주고받을 수 있습니다
지난 편 복습
기초편 #14에서는 Fork와 Clone을 배웠습니다:
- Fork와 Clone의 차이점
- 오픈소스 프로젝트 Fork하기
- 저장소 Clone하여 로컬 작업
- Upstream과 Origin 원격 저장소 관리
Pull Request란?
개념
Pull Request(PR)는 내 변경사항을 원본 저장소에 병합 요청하는 것입니다.
graph LR
A[내 브랜치] -->|PR 생성| B[코드 리뷰]
B -->|승인| C[main 브랜치 병합]
B -->|수정 요청| A
왜 중요한가?
코드 리뷰:
- 👀 다른 개발자가 코드 검토
- 🐛 버그 조기 발견
- 💡 더 나은 해결책 제안
- 📚 지식 공유
협업:
- 🤝 명확한 협업 프로세스
- 📝 변경사항 문서화
- 🔒 main 브랜치 보호
- ✅ CI/CD 자동화
PR 생성하기
1. 브랜치 작업 및 푸시
1
2
3
4
5
6
7
8
9
# 브랜치 생성
git checkout -b feature/user-profile
# 작업 및 커밋
git add .
git commit -m "feat: add user profile page"
# 푸시
git push origin feature/user-profile
2. GitHub에서 PR 생성
자동 프롬프트:
1
2
푸시 직후 GitHub 저장소 방문 시:
"Compare & pull request" 버튼이 나타남
수동 생성:
1
2
3
4
5
1. GitHub 저장소 방문
2. "Pull requests" 탭 클릭
3. "New pull request" 버튼
4. base: main ← compare: feature/user-profile 선택
5. "Create pull request" 클릭
3. PR 정보 작성
제목
1
2
3
4
5
6
7
8
9
좋은 예시 ✅:
- feat: Add user profile page with avatar upload
- fix: Resolve memory leak in data processing
- docs: Update API documentation for v2.0
나쁜 예시 ❌:
- Update
- Fix bug
- Changes
설명 템플릿
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
## 📝 변경 사항
- 사용자 프로필 페이지 추가
- 아바타 업로드 기능 구현
- 프로필 수정 API 연동
## 🎯 목적
사용자가 자신의 프로필을 관리할 수 있도록 함
## 🧪 테스트 방법
1. `/profile` 페이지 접속
2. 아바타 이미지 업로드
3. 프로필 정보 수정 후 저장
4. 새로고침하여 저장 확인
## 📸 스크린샷

## ✅ 체크리스트
- [x] 테스트 작성 완료
- [x] 문서 업데이트
- [x] 코드 리뷰 준비 완료
## 🔗 관련 이슈
Closes #123
PR 리뷰하기
리뷰어 역할
코드 확인:
1
2
3
1. "Files changed" 탭 클릭
2. 변경된 코드 라인별 검토
3. 라인 옆 "+" 버튼으로 코멘트 추가
리뷰 유형:
- ✅ Approve: 승인 (병합 가능)
- 💬 Comment: 의견만 남기기
- ❌ Request changes: 수정 요청
효과적인 리뷰 코멘트
좋은 코멘트 ✅:
1
2
3
4
# 구체적인 제안
💡 이 부분은 `map`을 사용하면 더 간결할 것 같습니다:
```javascript
const names = users.map(u => u.name);
질문
🤔 이 함수가 null을 반환할 수 있나요? 에러 처리가 필요할 것 같습니다.
칭찬
👍 에러 처리가 잘 되어 있네요! 깔끔합니다.
1
2
3
4
5
6
**나쁜 코멘트 ❌**:
```markdown
- "이상해요" (무엇이 이상한지 불명확)
- "안 됩니다" (이유 없음)
- "다시 하세요" (구체적 제안 없음)
PR 관리
Draft PR
개발 중인 PR:
1
2
3
1. "Create pull request" 옆 화살표 클릭
2. "Create draft pull request" 선택
3. 작업 완료 후 "Ready for review" 클릭
용도:
- 🚧 작업 진행 상황 공유
- 💬 조기 피드백 받기
- 🔄 CI 테스트 확인
PR 업데이트
피드백 반영:
1
2
3
4
5
6
# 같은 브랜치에서 수정
git add .
git commit -m "fix: apply review feedback"
# 푸시하면 자동으로 PR 업데이트
git push origin feature/user-profile
PR 병합
병합 방식:
- Merge commit (기본):
- 병합 커밋 생성
- 히스토리 보존
- Squash and merge:
- 모든 커밋을 하나로 합침
- 깔끔한 히스토리
- Rebase and merge:
- 일직선 히스토리
- 병합 커밋 없음
1
2
3
4
5
6
7
8
9
# GitHub에서:
1. "Merge pull request" 버튼
2. 병합 방식 선택
3. "Confirm merge" 클릭
# 로컬에서 정리:
git checkout main
git pull origin main
git branch -d feature/user-profile
PR 체크리스트
PR 크기 가이드
코드 리뷰의 효과는 PR 크기에 반비례합니다!
| PR 크기 | 리뷰 시간 | 버그 발견율 | 권장도 |
|---|---|---|---|
| ~100줄 | 10분 | 95% | ✅ 최고 |
| ~300줄 | 30분 | 80% | ✅ 좋음 |
| ~500줄 | 1시간 | 60% | ⚠️ 주의 |
| 1000줄+ | 2시간+ | 30% | ❌ 분할 권장 |
큰 PR을 나누는 방법
기능별 분할:
1
2
3
4
5
6
7
8
# 나쁜 예 (하나의 거대한 PR)
feat: implement entire user management system (1500 lines)
# 좋은 예 (기능별 분할)
feat: add user model and database schema (200 lines)
feat: implement user authentication API (250 lines)
feat: add user profile UI (180 lines)
feat: add user management tests (220 lines)
단계별 분할:
- 리팩토링 → 기능 추가 순서
- 백엔드 → 프론트엔드 순서
- 핵심 기능 → 부가 기능 순서
- 로직 → 테스트 순서
💡 팁: PR은 “한 번에 리뷰할 수 있는 크기”로 만드세요. 리뷰어가 30분 안에 이해할 수 있다면 완벽합니다!
생성 전 확인
- 최신 main과 동기화 완료
- 테스트 통과
- 불필요한 파일 제외 (.gitignore)
- 커밋 메시지 명확
- PR 크기 확인 (500줄 이하 권장)
PR 작성 시
- 명확한 제목
- 상세한 설명
- 테스트 방법 제공
- 관련 이슈 링크
- 스크린샷 (UI 변경 시)
병합 전 확인
- 최소 1명 승인
- CI 테스트 통과
- 충돌 해결 완료
- 문서 업데이트 (필요 시)
고급 기능
GitHub CLI로 PR 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
# gh 설치 후
gh pr create
# 자동으로 정보 입력
gh pr create --title "feat: add user profile" \
--body "Add user profile page" \
--assignee @me
# PR 목록 보기
gh pr list
# PR 체크아웃
gh pr checkout 123
PR 템플릿
.github/pull_request_template.md:
1
2
3
4
5
6
7
8
9
10
11
12
13
## 변경 사항
<!-- 무엇을 변경했나요? -->
## 목적
<!-- 왜 이 변경이 필요한가요? -->
## 테스트 방법
<!-- 어떻게 테스트하나요? -->
## 체크리스트
- [ ] 테스트 작성
- [ ] 문서 업데이트
- [ ] 코드 리뷰 요청
자동화
GitHub Actions:
1
2
3
4
5
6
7
8
9
10
name: PR Checks
on: pull_request
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run tests
run: npm test
자주 묻는 질문 (FAQ)
Q1. PR을 언제 생성해야 하나요?
A:
- ✅ 기능 개발 완료 후
- ✅ Draft PR로 조기 피드백 받을 때
- ✅ 버그 수정 완료 후
Q2. PR이 거절되면 어떡하죠?
A: 수정 후 재요청:
- 피드백 확인
- 코드 수정
- 커밋 및 푸시 (자동 업데이트)
- “Re-request review” 클릭
Q3. PR 크기는 얼마나 되어야 하나요?
A: 작을수록 좋습니다:
- ✅ 300줄 이하 (리뷰하기 좋음)
- ⚠️ 500줄 이상 (리뷰 어려움)
- ❌ 1000줄 이상 (분할 권장)
Q4. 내 PR이 무시당해요!
A:
- 🔔 리뷰어 지정
- 💬 Slack/Discord로 알림
- 📅 팀 규칙 확인 (24시간 이내 리뷰 등)
실습 과제
과제 1: 첫 PR 생성
- 새 브랜치 생성
- README에 내 이름 추가
- 푸시 및 PR 생성
- 설명 작성
과제 2: PR 리뷰 연습
- 팀원 PR 찾기 (또는 오픈소스)
- 코드 리뷰
- 건설적인 피드백 작성
과제 3: PR 템플릿 만들기
.github/pull_request_template.md생성- 팀에 맞는 템플릿 작성
- 다음 PR에 적용
마무리
축하합니다! GitHub 기초편 15개를 모두 완료했습니다! 🎉
기초편에서 배운 내용:
- ✅ GitHub 시작 (계정, 프로필, 보안)
- ✅ Repository 관리 (생성, README, 라이선스)
- ✅ Git 기본 (add, commit, push, pull)
- ✅ 브랜치 (생성, 병합, 전략)
- ✅ 협업 (Fork, Clone, Pull Request)
다음 단계: 🚀 실전편에서는 Issues, Projects, GitHub Actions 등을 배웁니다!
📚 GitHub 마스터하기 시리즈
🌱 기초편 (입문자)
- GitHub 소개와 계정 만들기
- 프로필 꾸미기와 포트폴리오
- 보안 설정과 인증
- Repository 이해하기
- README 작성법
- .gitignore와 라이선스
- 첫 커밋과 관리
- git add와 commit
- git push와 pull
- 실전 워크플로우
- Branch 기본
- Merge와 Rebase
- 브랜치 전략
- Fork와 Clone
- Pull Request 👉 현재 글
💼 실전편 (중급자)
🚀 고급편 (전문가)
- GitHub Actions 입문
- Actions 고급 활용
- Webhooks와 API
- GitHub Apps 개발
- 보안 기능 활용
- Packages 레지스트리
- Codespaces 클라우드 개발
- GitHub CLI 마스터
- Insights와 Analytics
🏆 심화편 (전문가+)
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
