콘텐츠로 이동

5장: GitHub로 협업하기 - Fork, Pull Request, 코드 리뷰

협업의 핵심: Pull Request

Pull Request(PR)는 "내 코드 확인해 주세요" 라는 요청입니다.

1. 내 브랜치에서 작업
2. GitHub에 push
3. Pull Request 생성
4. 팀원이 코드 리뷰
5. 승인 → main에 병합

두 가지 협업 방식

방식 1: 공동 저장소 (팀 프로젝트)

저장소에 직접 push 권한이 있는 경우:

# 1. 최신 코드 가져오기
git pull origin main

# 2. 작업 브랜치 만들기
git checkout -b feature/add-search

# 3. 작업 & 커밋
git add .
git commit -m "add search functionality"

# 4. GitHub에 push
git push -u origin feature/add-search

그 다음 GitHub 웹사이트에서: 1. 저장소 페이지로 이동 2. "Compare & pull request" 버튼 클릭 (또는 Pull requests 탭 → New pull request) 3. 제목과 설명 작성 4. Create pull request 클릭

방식 2: Fork & Pull Request (오픈소스 기여)

저장소에 push 권한이 없는 경우 (오픈소스 프로젝트 등):

원본 저장소 (upstream)
    ↓ fork
내 저장소 (origin)
    ↓ clone
내 컴퓨터 (local)
# 1. GitHub에서 원본 저장소를 Fork (웹에서 진행)

# 2. Fork한 내 저장소를 clone
git clone [email protected]:myname/project.git

# 3. 원본 저장소를 upstream으로 추가
git remote add upstream [email protected]:original-owner/project.git

# 4. 작업 전 항상 원본 최신 상태 가져오기
git fetch upstream
git checkout main
git merge upstream/main

# 5. 작업 브랜치 만들기
git checkout -b fix/typo-in-readme

# 6. 작업 & 커밋 & push
git add .
git commit -m "fix typo in README"
git push -u origin fix/typo-in-readme

# 7. GitHub에서 원본 저장소에 Pull Request 생성
# (base: 원본/main ← compare: 내/fix-typos)

Pull Request 잘 쓰기

좋은 PR 제목

feat: 사용자 검색 기능 추가
fix: 로그인 페이지 버그 수정
docs: API 문서 업데이트
refactor: 인증 모듈 리팩토링

좋은 PR 설명 템플릿

## 변경 내용
- 검색 기능 추가
- 검색 결과 페이지 구현

## 변경 이유
- 사용자가 게시글을 검색할 수 없는 문제 해결

## 테스트 방법
1. 검색바에 키워드 입력
2. 엔터 키 누름
3. 결과가 정상적으로 표시되는지 확인

## 스크린샷
(필요한 경우 추가)

커밋 메시지 컨벤션 (Conventional Commits)

<타입>: <설명>

타입 종류:
  feat:     새로운 기능
  fix:      버그 수정
  docs:     문서 수정
  style:    코드 포맷팅 (기능 변화 없음)
  refactor: 코드 리팩토링
  test:     테스트 추가/수정
  chore:    빌드, 의존성 등 기타 작업

예시:

git commit -m "feat: add user search with keyword highlighting"
git commit -m "fix: resolve login redirect loop on Safari"
git commit -m "docs: add installation guide for Windows"

코드 리뷰

리뷰 받을 때

  • PR은 작게 유지하기 (200~400줄 이하가 이상적)
  • 이해하기 어려운 부분은 설명 남기기
  • 피드백은 개인적인 공격이 아닙니다 — 코드에 대한 의견일 뿐!

리뷰 할 때

# 좋은 리뷰 코멘트 예시:
"이 함수에서 예외 처리를 추가하는 게 어떨까요? 입력이 null일 때 에러가 날 수 있습니다."

"여기서 `filter` 대신 `reduce`를 쓰면 성능이 더 좋을 것 같아요. 이유는..."

# 피해야 할 리뷰:
"이거 이상함"  (구체적인 이유가 없음)
"다시 해"       (어떻게 고쳐야 하는지 모름)

GitHub Issues: 할 일 관리

# Issues는 GitHub의 할 일 목록입니다
# 코드와 직접 연결되어 있어 편리합니다

Issue 활용법

  1. 버그 리포트: 재현 방법, 기대 동작, 실제 동작
  2. 기능 요청: 왜 필요한지, 어떻게 작동해야 하는지
  3. 질문: 코드 관련 질문

Issue와 PR 연결

# 커밋 메시지로 Issue 닫기
git commit -m "fix: resolve login error #12"
# → #12 Issue가 자동으로 닫힘

# PR 설명에서도 연결 가능
# "Closes #12" 또는 "Fixes #12" 를 PR 설명에 적기

GitHub Projects (칸반 보드)

GitHub에서 제공하는 프로젝트 관리 도구: - To Do: 해야 할 일 - In Progress: 작업 중 - Done: 완료

Issues와 PR을 칸반 보드에 연결해서 진행 상황을 시각적으로 관리할 수 있습니다.

.github 폴더: 프로젝트 설정

.github/
├── ISSUE_TEMPLATE/
│   ├── bug_report.md      # 버그 리포트 템플릿
│   └── feature_request.md # 기능 요청 템플릿
├── PULL_REQUEST_TEMPLATE.md  # PR 템플릿
└── CODEOWNERS               # 자동 리뷰어 지정

실전 워크플로우: 팀 프로젝트

매일 작업 시작:
  1. git pull origin main        # 최신 코드 가져오기
  2. git checkout -b feature/xxx   # 작업 브랜치 만들기
  3. 코드 작성
  4. git add . && git commit     # 자주 커밋하기
  5. git push -u origin feature/xxx

작업 완료:
  6. GitHub에서 PR 생성
  7. 팀원 코드 리뷰
  8. 피드백 반영
  9. 승인 → main에 병합
  10. git checkout main && git pull  # 최신 main 가져오기

규칙:
  - main에는 직접 push하지 않기
  - 항상 PR을 통해서만 병합
  - PR은 최소 1명 이상의 리뷰 승인 필요

실습 미션

  1. GitHub에서 친구의 저장소를 Fork 해보세요
  2. Fork한 저장소를 clone 하세요
  3. 원본 저장소를 upstream으로 추가하세요
  4. 새 브랜치를 만들고 작은 수정을 하세요
  5. Push 후 원본 저장소에 Pull Request를 생성하세요
  6. (친구에게) PR을 리뷰하고 승인/코멘트를 남겨보세요

이전 장: 04-git-remote.md 다음 장: 06-git-tips.md - 꿀팁과 고급 기능