동작하는 코드
예제 1: GitHub CLI로 저장소 만들기
GitHub CLI(gh)를 설치하면 터미널에서 GitHub를 다룰 수 있습니다:
brew install gh
gh auth login
저장소 만들기:
cd ~/my-project
gh repo create my-project --public --push --source=.
이 명령어 하나로:
- GitHub에 저장소 생성
origin원격 연결- 현재 코드 push
확인:
gh repo view --web # 브라우저에서 열기
예제 2: 이슈 만들기
gh issue create \
--title "로그인 페이지 버그" \
--body "비밀번호 재설정 후 자동 로그인이 안 됩니다."
출력:
https://github.com/username/my-project/issues/1
이슈 목록:
gh issue list
출력:
ID TITLE LABELS UPDATED
1 로그인 페이지 버그 2분 전
예제 3: Pull Request 만들기
# feature 브랜치에서 작업 후
git checkout -b fix/login-bug
echo "// 버그 수정 코드" > login-fix.js
git add login-fix.js
git commit -m "fix: 비밀번호 재설정 후 자동 로그인 버그 수정"
git push origin fix/login-bug
gh pr create \
--title "fix: 로그인 버그 수정" \
--body "이슈 #1 해결
## 변경 내용
- 비밀번호 재설정 후 세션 갱신 로직 수정"
직접 수정하기
Pull Request 코드 리뷰 사이클
PR을 만들면 팀원이 코드를 검토합니다:
개발자 리뷰어
│ │
│── PR 생성 ──────────────────→ │
│ │── 코드 검토
│ │── 코멘트 작성
│ ←── 리뷰 피드백 ──────────── │
│
│── 수정 코드 커밋
│── git push (PR 자동 업데이트)
│
│── 리뷰 재요청 ──────────────→ │
│ │── 재검토
│ │── 승인 (Approve)
│ ←── 승인 ─────────────────── │
│
│── Merge PR
│── 브랜치 삭제
리뷰 피드백 반영:
# 리뷰어가 "변수명을 더 명확하게" 코멘트를 달았을 때
vim login-fix.js # 수정
git add login-fix.js
git commit -m "refactor: 변수명 명확하게 수정"
git push # PR에 자동으로 반영
PR은 브랜치를 추적하므로 push하면 자동으로 업데이트됩니다.
PR 목록 및 상세:
gh pr list
gh pr view 1 # PR #1 상세 보기
gh pr view 1 --web # 브라우저에서 열기
PR 병합:
gh pr merge 1 --squash # squash merge (feature 커밋들을 하나로)
gh pr merge 1 --merge # merge commit
gh pr merge 1 --rebase # rebase merge
Draft PR: 진행 중임을 표시
# Draft PR: 아직 리뷰 준비가 안 됐을 때
gh pr create \
--title "feat: 결제 시스템 구현" \
--body "진행 중..." \
--draft
Draft PR의 용도:
- "작업 중이니 아직 리뷰하지 마세요" 표시
- 진행 상황 공유
- CI 테스트 결과 확인
- 조기 피드백 요청
Ready for review 상태로 전환:
gh pr ready 1
"왜?" — GitHub가 단순 저장소 이상인 이유
GitHub는 Git 저장소 호스팅 + 협업 플랫폼입니다.
| 기능 | 역할 | | ---------------- | ---------------------------------- | | Issues | 버그 리포트, 기능 요청, 할 일 관리 | | Pull Request | 코드 리뷰 + 머지 요청 | | Actions | CI/CD 자동화 | | Projects | 칸반 보드로 작업 관리 | | Discussions | 팀 토론 |
Pull Request 워크플로우
이슈 생성 (#1 "로그인 버그")
↓
브랜치 생성 (fix/login-bug)
↓
코드 수정 + 커밋 (closes #1)
↓
PR 생성 (코드 리뷰 요청)
↓
코드 리뷰 + 피드백
↓
수정 반영 + 재검토
↓
승인 (Approve) → Merge
↓
브랜치 삭제 + 이슈 자동 닫힘
커밋 메시지나 PR 본문에 closes #1, fixes #1을 넣으면 PR 병합 시 이슈가 자동으로 닫힙니다.
CI 상태 확인
PR에서 GitHub Actions 결과를 확인:
gh pr checks 1
출력:
All checks were successful
✓ CI / test (2m 15s)
✓ CI / lint (45s)
CI가 실패한 상태에서는 병합을 막을 수 있습니다.
흔한 실수
실수 1: PR 제목이 불명확
# 나쁨
업데이트
수정
fix
# 좋음
fix: 비밀번호 재설정 후 자동 로그인 안 되는 버그 수정
feat: Google 소셜 로그인 기능 추가
docs: API 인증 섹션 추가
실수 2: PR에 너무 많은 변경 사항
# 피하세요: 한 PR에 수십 개 파일 변경
# 리뷰하기 어렵고 머지 충돌 위험 증가
# 권장: 한 PR에 하나의 목적
# "로그인 기능 추가" PR → login.js, auth.js, tests 관련 파일만
실수 3: 리뷰 없이 main에 직접 push
# 나쁜 습관
git push origin main # 직접 push
# 좋은 습관
# 1. feature 브랜치 생성
# 2. 작업 + 커밋
# 3. PR 생성
# 4. 리뷰 받기
# 5. PR 병합
브랜치 보호 규칙을 설정하면 직접 push를 막을 수 있습니다.
심화 학습
Fork와 오픈소스 기여
직접 push 권한이 없는 저장소에 기여할 때:
- Fork: 내 계정으로 저장소 복사
- Clone: 내 Fork를 로컬에 복사
- 브랜치 + 수정 + push (내 Fork로)
- PR: 원본 저장소에 기여 요청
# 원본 최신화 (upstream 설정)
git remote add upstream https://github.com/original/repo.git
git fetch upstream
git merge upstream/main
PR 템플릿 설정
.github/PULL_REQUEST_TEMPLATE.md 파일을 만들면 PR 생성 시 자동으로 템플릿이 채워집니다:
## 변경 내용
-
## 관련 이슈
closes #
## 체크리스트
- [ ] 기능 구현 완료
- [ ] 테스트 추가
- [ ] 문서 업데이트
- [ ] 브라우저 테스트
## 스크린샷 (UI 변경 시)
GitHub에서 유용한 단축키
GitHub 웹에서:
t— 파일 검색b— 브랜치 전환.— 웹 에디터(vscode.dev) 열기Ctrl+K— 커맨드 팔레트gc— 커밋 목록으로 이동
- GitHub에 새 저장소를 만들고 로컬에서 연결하세요.
gh issue create로 이슈를 하나 만드세요.- 새 브랜치에서 수정 후
gh pr create로 PR을 만드세요. 이슈 번호를 본문에 포함하세요. - Draft PR을 만들어보고,
gh pr ready로 리뷰 준비 상태로 전환하세요. gh pr merge --squash로 PR을 병합하고 이슈가 자동으로 닫히는지 확인하세요.
Q1. Pull Request의 주된 목적은?
- A) 코드를 원격 저장소에 업로드하는 것
- B) 브랜치를 자동으로 삭제하는 것
- C) 코드 리뷰를 거쳐 브랜치를 병합 요청하는 것
- D) 충돌을 자동으로 해결하는 것