포스트

[이제와서 시작하는 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. 새로고침하여 저장 확인

## 📸 스크린샷
![Profile Page](./screenshots/profile.png)

## ✅ 체크리스트
- [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 병합

병합 방식:

  1. Merge commit (기본):
    • 병합 커밋 생성
    • 히스토리 보존
  2. Squash and merge:
    • 모든 커밋을 하나로 합침
    • 깔끔한 히스토리
  3. 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)

단계별 분할:

  1. 리팩토링 → 기능 추가 순서
  2. 백엔드 → 프론트엔드 순서
  3. 핵심 기능 → 부가 기능 순서
  4. 로직 → 테스트 순서

💡 : 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: 수정 후 재요청:

  1. 피드백 확인
  2. 코드 수정
  3. 커밋 및 푸시 (자동 업데이트)
  4. “Re-request review” 클릭

Q3. PR 크기는 얼마나 되어야 하나요?

A: 작을수록 좋습니다:

  • ✅ 300줄 이하 (리뷰하기 좋음)
  • ⚠️ 500줄 이상 (리뷰 어려움)
  • ❌ 1000줄 이상 (분할 권장)

Q4. 내 PR이 무시당해요!

A:

  • 🔔 리뷰어 지정
  • 💬 Slack/Discord로 알림
  • 📅 팀 규칙 확인 (24시간 이내 리뷰 등)

실습 과제

과제 1: 첫 PR 생성

  1. 새 브랜치 생성
  2. README에 내 이름 추가
  3. 푸시 및 PR 생성
  4. 설명 작성

과제 2: PR 리뷰 연습

  1. 팀원 PR 찾기 (또는 오픈소스)
  2. 코드 리뷰
  3. 건설적인 피드백 작성

과제 3: PR 템플릿 만들기

  1. .github/pull_request_template.md 생성
  2. 팀에 맞는 템플릿 작성
  3. 다음 PR에 적용

마무리

축하합니다! GitHub 기초편 15개를 모두 완료했습니다! 🎉

기초편에서 배운 내용:

  • ✅ GitHub 시작 (계정, 프로필, 보안)
  • ✅ Repository 관리 (생성, README, 라이선스)
  • ✅ Git 기본 (add, commit, push, pull)
  • ✅ 브랜치 (생성, 병합, 전략)
  • ✅ 협업 (Fork, Clone, Pull Request)

다음 단계: 🚀 실전편에서는 Issues, Projects, GitHub Actions 등을 배웁니다!

📚 GitHub 마스터하기 시리즈

🌱 기초편 (입문자)

  1. GitHub 소개와 계정 만들기
  2. 프로필 꾸미기와 포트폴리오
  3. 보안 설정과 인증
  4. Repository 이해하기
  5. README 작성법
  6. .gitignore와 라이선스
  7. 첫 커밋과 관리
  8. git add와 commit
  9. git push와 pull
  10. 실전 워크플로우
  11. Branch 기본
  12. Merge와 Rebase
  13. 브랜치 전략
  14. Fork와 Clone
  15. Pull Request 👉 현재 글

💼 실전편 (중급자)

  1. Issues 활용법
  2. Projects와 칸반보드
  3. 코드 리뷰 실전
  4. Discussions 활용
  5. 팀 협업 전략
  6. GitHub Pages 블로그

🚀 고급편 (전문가)

  1. GitHub Actions 입문
  2. Actions 고급 활용
  3. Webhooks와 API
  4. GitHub Apps 개발
  5. 보안 기능 활용
  6. Packages 레지스트리
  7. Codespaces 클라우드 개발
  8. GitHub CLI 마스터
  9. Insights와 Analytics

🏆 심화편 (전문가+)

  1. Submodules와 Subtree
  2. Git Internals 이해
  3. 브랜칭과 릴리스 전략
  4. GraphQL API 활용
  5. GitHub Copilot 마스터
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.