Git & GitHub으로 협업하며 개발하기 (상세)

2026년 5월 12일 16분

이 글은 “Git & GitHub으로 협업하며 개발하기” 강의의 상세 내용입니다. 강의 개요는 여기에서 확인할 수 있습니다.

후속 강의: Git을 넘어 — 오픈소스 기여자의 세계로

이 내용을 슬라이드로 보려면 프레젠테이션 모드를 이용하세요.

시연 코드 저장소
https://github.com/your-org/git-github-collaboration-demo

Part 1 — Git & GitHub 기초

Git이란?

Git은 분산 버전 관리 시스템(DVCS) 입니다.
파일의 변경 이력을 기록하고, 원하는 시점으로 되돌리고, 여러 사람이 동시에 작업해도 충돌 없이 합칠 수 있게 해 줍니다.

핵심 개념은 네 가지 공간(공간을 의식하면 Git이 절반은 쉬워집니다):

  • Working Directory — 지금 내가 편집하고 있는 실제 파일들
  • Staging Area (Index) — “다음 커밋에 포함시킬” 변경분을 모아 두는 임시 영역
  • Local Repository — 커밋이 영구히 저장되는 곳 (로컬 .git/ 폴더)
  • Remote Repository — GitHub처럼 다른 사람과 공유하는 원격 저장소
%%{init: {'theme':'base','themeVariables':{'primaryColor':'#e3f2fd','primaryBorderColor':'#90caf9','lineColor':'#546e7a','textColor':'#333','mainBkg':'#fafafa','nodeBorder':'#90a4ae'}}}%% flowchart LR WD["Working Directory\n(편집 중인 파일)"] -- "git add" --> SA["Staging Area\n(다음 커밋 후보)"] SA -- "git commit" --> R["Local Repository\n(.git/)"] R -- "git push" --> RR["Remote Repository\n(GitHub)"] RR -- "git pull / fetch" --> WD style WD fill:#bbdefb,stroke:#1976d2,stroke-width:2px,rx:10,ry:10 style SA fill:#fff9c4,stroke:#f9a825,stroke-width:2px,rx:10,ry:10 style R fill:#c8e6c9,stroke:#388e3c,stroke-width:2px,rx:10,ry:10 style RR fill:#d1c4e9,stroke:#7b1fa2,stroke-width:2px,rx:10,ry:10

아래 데모에서 파일이 네 공간 사이를 어떻게 이동하는지 직접 눌러 보며 확인할 수 있습니다.

GitHub이란?

Git이 “도구"라면, GitHub은 그 도구로 만들어진 결과물을 여러 사람이 함께 쓰는 공간 입니다.
정확히는 Git 저장소를 클라우드에서 호스팅하고, 협업 기능을 얹어 둔 서비스입니다.

GitHub이 제공하는 주요 협업 기능:

기능역할
Repository코드 저장소 — Git 저장소의 원격 버전
Issues버그·기능·논의 트래커
Pull Requests브랜치 병합 요청 + 코드 리뷰의 장
ActionsCI/CD 자동화 (테스트, 빌드, 배포)
Discussions코드와 직접 연결되지 않은 자유 토론 공간
Projects칸반 보드 형태의 작업 관리

비슷한 서비스로 GitLab, Bitbucket, Gitea 등이 있습니다.
Git이라는 표준 위에서 각자 협업 기능을 얹은 형태입니다.

기본 명령어 한 사이클

Git에서 가장 자주 쓰는 명령어 한 사이클은 다음과 같습니다:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 1. 저장소를 내 컴퓨터에 복제
git clone https://github.com/<user>/<repo>.git
cd <repo>

# 2. 파일 수정 후 스테이징
git add <file>          # 특정 파일만
git add .               # 변경된 파일 전체

# 3. 커밋
git commit -m "Add timer start/pause/reset"

# 4. 원격 저장소에 업로드
git push

# 5. 다른 사람의 변경 사항 받아오기
git pull

각 명령은 앞서 본 4개의 공간 사이를 이동시키는 동작입니다.
“지금 내 변경이 어느 공간에 있는가” 만 의식하면 Git은 어렵지 않습니다.

GitHub 웹 UI 둘러보기

저장소 페이지 상단의 탭이 곧 GitHub의 협업 기능입니다:

  • Code — 파일 트리, README, 브랜치/태그 목록
  • Issues — 작업·논의 트래커
  • Pull requests — 머지 요청과 리뷰
  • Actions — CI/CD 실행 결과
  • Projects / Wiki / Security / Insights — 부가 기능

처음에는 Code → Issues → Pull requests 셋만 익숙해져도 충분합니다.


Part 2 — Sourcetree 입문

왜 GUI를 쓰는가

Git을 CLI만으로 익히면 두 가지가 어려워집니다:

  1. 그래프 시각화 — 브랜치들이 어떻게 갈라지고 합쳐졌는지, 텍스트만 봐서는 머릿속에 그려지지 않습니다.
  2. 머지/충돌 상황 — 어디가 충돌인지, 양쪽 코드가 각각 무엇인지 한눈에 비교하기 어렵습니다.

Sourcetree(Atlassian 제공, 무료)는 이 두 가지를 시각적으로 보여 주는 GUI 도구입니다.
특히 Git Flow를 메뉴로 지원 한다는 점이 이 강의에서 Sourcetree를 고른 이유입니다.

Sourcetree 다운로드
https://www.sourcetreeapp.com/

설치와 GitHub 연동

  1. Sourcetree를 설치합니다.
  2. 첫 실행 시 Atlassian 계정 등록을 요구할 수 있습니다 (무료).
  3. 계정 추가 → GitHub 을 선택해 OAuth로 GitHub 계정과 연결합니다.
  4. 메뉴 → Clone에서 GitHub의 저장소 URL을 붙여 넣으면 로컬에 복제됩니다.

핵심 화면 구성

Sourcetree의 메인 화면은 크게 네 영역으로 나뉩니다:

  • 좌측 사이드바 — 로컬 브랜치, 원격 브랜치, 태그, Stash 목록
  • 상단 그래프 — 커밋 히스토리를 시각화한 브랜치 그래프
  • 하단 좌측 — 선택한 커밋에 포함된 파일 목록
  • 하단 우측 — 선택한 파일의 diff (변경 내용)

작업 흐름은 상단 그래프로 현재 상황 파악 → 우측 상단 버튼(Commit, Push, Pull, Branch, Merge) 으로 명령 실행입니다.

CLI ↔ GUI 1:1 대응표

CLI 명령어Sourcetree에서의 동작
git clone <url>메뉴 → Clone, URL 입력
git status좌측 사이드바 “File Status”
git add <file>변경 파일을 Stage 영역으로 끌어다 놓기
git commit -m "..."“Commit” 버튼 + 메시지 입력
git push상단 Push 버튼
git pull상단 Pull 버튼
git checkout -b feature/x“Branch” 버튼 → 이름 입력 → “Create Branch”
git merge <branch>대상 브랜치 우클릭 → “Merge into current branch”
git stash상단 Stash 버튼

명령어를 모두 외울 필요는 없습니다. “내가 지금 무엇을 하고 싶은가” 를 GUI에서 찾는 습관이 먼저 들면, CLI는 자연스럽게 따라옵니다.

에디터에서 보는 Git — VS Code의 Git 통합

Sourcetree가 “브랜치와 히스토리 관리” 에 강점이라면,
VS Code의 Git 통합은 “코드를 편집하면서 변경을 곧바로 확인” 하는 데 강점입니다.
두 도구는 경쟁 관계가 아니라 보완 관계입니다.

VS Code가 보여 주는 Git 정보:

위치표시 내용
파일 탐색기파일 이름의 색상과 글자 표시 — U (Untracked, 초록), M (Modified, 노랑), D (Deleted, 빨강)
에디터 좌측 거터라인별 변경 표시 — 초록 막대(추가), 파란 막대(수정), 빨간 삼각형(삭제). 호버하면 이전 내용 미리보기
Source Control 패널 (⌃⇧G)변경 파일 목록, 인라인 diff, 스테이지/언스테이지, 커밋 메시지 입력, Push/Pull 버튼
상태 바 (하단)현재 브랜치 이름, push/pull 필요한 커밋 개수, 동기화 버튼
Timeline 뷰파일 단위 커밋 히스토리 — 한 파일이 어떤 커밋에서 어떻게 바뀌어 왔는지

diff.png

핵심 장점은 “내가 지금 어디를 바꿨는가"를 에디터를 떠나지 않고 라인 단위로 즉시 확인할 수 있다는 것입니다.
커밋 전에 거터 표시만 훑어도 의도하지 않은 변경이 섞였는지 한눈에 잡힙니다.

실무 조합 예시: VS Code(편집 + 라인 단위 변경 확인) + Sourcetree(브랜치·머지·Git Flow) + CLI(스크립트·자동화).
세 도구가 각자 강한 부분만 맡으면 가장 매끄럽습니다.


Part 3 — Git Flow 워크플로 이해하기

Git Flow란?

Git Flow는 2010년 Vincent Driessen이 글 한 편으로 제안한 브랜치 전략입니다.
핵심 아이디어는 “브랜치마다 역할을 명확히 분리하자” 입니다.

A successful Git branching model
https://nvie.com/posts/a-successful-git-branching-model/

다섯 가지 브랜치의 역할

브랜치역할어디서 분기어디로 머지
main항상 배포 가능한 안정 버전(release/hotfix가 합쳐짐)
develop다음 릴리스를 향한 통합 브랜치main에서 1회release/hotfix가 합쳐짐
feature/*새 기능 개발developdevelop
release/*릴리스 준비(버전·문서·QA)developmain + develop
hotfix/*main의 긴급 버그 수정mainmain + develop

핵심은 “분기와 머지의 방향이 정해져 있다” 는 점입니다.

feature는 develop에서 따와 develop으로 합치고,
hotfix는 main에서 따와 main과 develop 모두에 합칩니다.

이 규칙만 지키면 브랜치가 아무리 많아져도 흐름이 어지러워지지 않습니다.

한 사이클의 흐름

%%{init: { 'gitGraph': {'mainBranchName':'main'}, 'themeVariables': {'git0':'#1976d2','git1':'#388e3c','git2':'#f9a825','git3':'#d32f2f','git4':'#7b1fa2'}}}%% gitGraph commit id: "init" branch develop commit id: "dev start" branch feature/timer commit id: "timer skeleton" commit id: "start/pause/reset" checkout develop merge feature/timer branch release/0.1.0 commit id: "prepare release" checkout main merge release/0.1.0 tag: "v0.1.0" checkout develop merge release/0.1.0 checkout main branch hotfix/critical commit id: "fix bug" checkout main merge hotfix/critical tag: "v0.1.1" checkout develop merge hotfix/critical

위 그래프에서:

  1. main에서 develop 분기
  2. developfeature/timer 분기 → 기능 구현 후 다시 develop으로 머지
  3. developrelease/0.1.0 → 출시 준비 → main에 머지 + 태깅 → develop에도 머지
  4. mainhotfix/critical → 긴급 수정 → main + develop 모두에 머지

아래 시뮬레이터에서 직접 버튼을 눌러 가며 같은 흐름을 만들어 볼 수 있습니다.
추상적인 다이어그램과 실제 그래프가 어떻게 일치하는지 한눈에 들어옵니다.

Git Flow vs GitHub Flow

항목Git FlowGitHub Flow
브랜치 수5종 (main, develop, feature, release, hotfix)2종 (main, feature)
적합한 프로젝트릴리스 주기가 있고 버전을 관리하는 프로젝트빠르게/자주 배포하는 SaaS
릴리스 단위명시적 (release/0.1.0)묵시적 (main에 머지 = 배포)
학습 곡선다소 가파름매우 단순
대표 사용처오픈소스, 모바일 앱, 패키지 라이브러리웹 서비스, 사내 도구

(이외에 Trunk-based development도 있으나, 대형 SaaS에서 feature flag와 결합해 쓰는 고급 전략입니다.)

왜 오픈소스에서 Git Flow가 자주 쓰이나

오픈소스 라이브러리·도구는 보통 버전을 명시적으로 릴리스 합니다. (예: v1.4.2)

사용자가 특정 버전에 고정해서 의존하기 때문에,
“지금 배포된 안정 버전"과 “다음 릴리스를 위해 개발 중인 버전"을 분리할 필요가 있습니다.
Git Flow의 maindevelop 분리가 이 요구에 정확히 들어맞습니다.


Part 4 — Sourcetree의 Git Flow 메뉴 살펴보기

Sourcetree에는 Git Flow가 메뉴 한 항목 으로 내장되어 있습니다.
메뉴 클릭 한 번이 곧 Vincent Driessen의 표준 흐름 한 단계를 그대로 실행합니다.

Git Flow 메뉴 활성화

저장소를 연 상태에서 상단 메뉴 Repository → Git Flow → Initialize Repository 를 선택합니다.
기본 브랜치 이름(main, develop, feature/, release/, hotfix/)을 확인하고 OK를 누르면
develop 브랜치가 자동으로 만들어집니다.

각 메뉴가 실행하는 Git 명령

Sourcetree 메뉴묶여 실행되는 Git 명령 (요약)
Initialize Repositorygit flow initdevelop 브랜치 생성
Start New Featuregit checkout developgit checkout -b feature/<name>
Finish Featuregit checkout developgit merge --no-ff feature/<name> → 브랜치 삭제
Start New Releasegit checkout developgit checkout -b release/<version>
Finish Releasereleasemain에 머지 + 태그 + develop에도 머지 + 브랜치 삭제
Start New Hotfixgit checkout maingit checkout -b hotfix/<name>
Finish Hotfixhotfixmain에 머지 + 태그 + develop에도 머지 + 브랜치 삭제

--no-ff 옵션이 핵심입니다.
빨리 감기(fast-forward) 머지 대신 명시적 머지 커밋을 만들어,
그래프에서 “이 묶음이 한 feature였다"는 정보가 사라지지 않게 합니다.

CLI로 같은 일을 할 때

git-flow CLI 확장을 설치하면 CLI에서도 같은 명령을 쓸 수 있습니다:

1
2
3
4
5
6
7
8
brew install git-flow-avh           # macOS
git flow init                       # 초기화
git flow feature start timer        # feature/timer 시작
git flow feature finish timer       # feature/timer 종료
git flow release start 0.1.0        # release/0.1.0 시작
git flow release finish 0.1.0       # 태깅 + main/develop 머지
git flow hotfix start critical      # hotfix/critical 시작
git flow hotfix finish critical     # 태깅 + main/develop 머지

Sourcetree의 Git Flow 메뉴는 이 CLI 명령들을 GUI로 감싼 것에 가깝습니다.
메뉴를 눌렀을 때 어떤 명령이 실행되는지 만 알면, 둘 사이를 오가는 데 어려움이 없습니다.


Part 5 — Pull Request와 코드 리뷰

Pull Request의 의미

Pull Request(PR)는 단순한 머지 요청이 아닙니다. 두 가지를 동시에 부탁하는 행위입니다:

  1. “내 브랜치를 합쳐 주세요” — 머지 요청
  2. “리뷰해 주세요” — 동료의 검토 요청

따라서 좋은 PR은 머지보다 리뷰가 쉬워지는 형태 로 만드는 것이 중요합니다.

좋은 PR의 조건

조건이유
작은 크기리뷰어가 머릿속에 한 번에 담을 수 있는 분량 (대략 200~400줄 이하)
명확한 제목한 줄로 “무엇이 바뀌었는지” — Add timer pause/reset처럼 동사로 시작
충분한 설명“왜 이 변경이 필요한가” — 결정의 맥락
의미 있는 커밋 단위한 커밋 = 한 의도. “WIP”, “fix typo"가 즐비한 PR은 리뷰가 어려움
테스트와 함께동작 확인 가능 — 테스트 코드, 실행 방법, 스크린샷 등

코드 리뷰 주고받기

GitHub PR 페이지의 핵심 인터페이스:

  • Files changed 탭 — diff. 라인 옆 + 버튼으로 인라인 코멘트 작성
  • Start a review → 여러 코멘트를 모아 한 번에 보내기
  • Review changes 메뉴 — Comment / Approve / Request changes 셋 중 선택
  • Resolve conversation — 토론이 끝난 코멘트 접기

리뷰는 “공격이 아니라 협업” 이라는 합의가 가장 중요합니다.
“이 코드 이상해요"보다 “여기 이런 케이스에서 어떻게 동작할까요?” 가 훨씬 건강한 리뷰입니다.

충돌(Merge Conflict) 해결

PR을 보내고 다른 PR이 먼저 머지되면, 내 브랜치가 main(또는 develop)과 충돌할 수 있습니다. Sourcetree의 충돌 해결 흐름:

  1. 충돌 발생 → 머지 시도가 중단되며 파일 옆에 ⚠️ 표시
  2. 충돌 파일 더블클릭 → 외부 머지 도구가 열림 (또는 텍스트로 <<<<<<< 마커 직접 편집)
  3. 양쪽 코드 중 어느 쪽을 살리고/합칠지 결정
  4. 저장 후 Mark Resolved → 다시 커밋

머지 도구로 Beyond Compare, Kaleidoscope(macOS), WinMerge(Windows) 등이 자주 쓰입니다.

아래 데모에서 충돌 한 건마다 “Keep mine / Keep theirs / Keep both” 중 무엇을 골라야 하는지, 결과 파일이 어떻게 달라지는지 직접 확인해 보세요.

Merge vs Rebase vs Squash

전략결과언제 쓰기 좋은가
Merge (–no-ff)머지 커밋이 남고 브랜치 모양이 그래프에 보존Git Flow의 기본. 히스토리에 “브랜치 단위"가 보임
Rebase머지 커밋 없이 일렬로 커밋이 이어짐깨끗한 일직선 히스토리를 선호할 때
Squash여러 커밋을 한 커밋으로 압축해 머지feature 브랜치 안 커밋이 지저분할 때, “한 PR = 한 커밋” 정책

세 가지 모두 GitHub PR의 머지 버튼 옆 드롭다운에서 선택할 수 있습니다.
팀이 한 가지 전략으로 합의해 두면 그래프가 일관됩니다.


Part 6 — AI 코드 생성기와 Git Flow

AI 코드 생성기 시대의 개발 흐름

2024년 이후 개발자의 일상에 AI 코드 생성기 가 자리 잡았습니다:

  • Claude Code (Anthropic) — 터미널에서 동작하는 에이전트형 코드 생성기
  • GitHub Copilot (GitHub × OpenAI) — 에디터 인라인 자동 완성 중심
  • Cursor — VS Code 포크 기반 IDE
  • Windsurf, Aider

이들의 공통점은 “사람이 의도를 말하면, AI가 코드를 만들고, 사람이 검토한다” 는 새로운 협업 구조를 만든다는 것입니다.

왜 Git Flow가 AI 시대에도 유효한가

AI 코드 생성기가 새로운 도구라고 해서 Git Flow가 낡은 것은 아닙니다.
오히려 Git Flow의 구조가 AI 워크플로와 잘 들어맞습니다:

Git Flow 요소AI 시대의 의미
feature/*AI가 한 번의 세션으로 다루기 좋은 작업 단위 — 너무 크면 환각, 너무 작으면 비효율
Pull RequestAI가 생성한 코드를 사람이 반드시 검토하는 자연스러운 관문
release/*AI 변경이 누적된 묶음을 사람이 한 번 더 검증하는 체크포인트
main 항상 배포 가능AI가 만든 회귀(regression)가 사용자에게 가지 않도록 막는 안전망
hotfix/*AI 코드가 만든 문제를 빠르게 되돌리는 명시적 경로

요약하면, Git Flow의 각 브랜치는 “사람의 개입 지점” 이고, AI 코드 생성기 시대에 그 지점은 더욱 중요해집니다.

AI 생성 코드를 리뷰할 때 추가로 봐야 할 것

사람이 작성한 코드 리뷰와 동일한 항목 + 다음을 추가로 봐야 합니다:

  • 환각(hallucination) — 존재하지 않는 함수·라이브러리·API를 호출하지 않는가
  • 라이선스 — 학습 데이터에서 비롯된 코드 조각이 라이선스를 위반하지 않는가
  • 보안 — 비밀키 노출, 인증·인가 누락, 입력 검증 누락
  • 테스트 커버리지 — AI가 “동작은 하는 것처럼 보이는” 코드를 만들 수 있으므로, 경계값/실패 경로를 사람이 직접 테스트
  • 의도와 일치성 — 시키지 않은 추가 동작(주석 자동 작성, 무관한 리팩토링)이 섞이지 않았는가

AI에게 커밋 메시지·PR 설명을 맡기기

AI가 가장 잘하는 글쓰기 중 하나가 변경 요약 입니다:

1
2
# Claude Code의 자동 커밋 메시지 예시
git diff --staged | claude "이 변경을 한 줄 요약하는 커밋 메시지를 작성해 줘"

PR 설명도 마찬가지입니다.
단, AI 요약은 “무엇이 바뀌었는가(WHAT)” 는 잘 쓰지만 “왜 바뀌었는가(WHY)” 는 사람이 직접 보충해야 합니다.
AI 요약을 초안으로 두고, “왜"를 한두 문장 더해 주는 정도가 가장 효율적입니다.


Part 7 — 시연: Claude Code + Git Flow로 타이머 앱 만들기

이 파트는 강사가 빈 저장소부터 배포까지 한 사이클을 화면 공유로 보여 주는 메인 시연 입니다.

아래의 단계별 흐름은 시연을 글로 옮겨 둔 복습용 기록입니다.
강의 중에는 화면을 따라가며 흐름을 잡고, 세부 단계는 끝난 뒤 이 글에서 확인해도 충분합니다 — 미리 외울 필요는 없습니다.

시연 환경

항목구성
저장소GitHub에 새로 생성한 빈 저장소
로컬 도구Sourcetree + 터미널 + Claude Code
AIClaude Code (Sonnet 4.6 기본)
결과물간단한 타이머 웹 앱 (HTML + CSS + JS, 약 100줄)

단계별 시연 흐름

Step 1 — 저장소 생성과 Clone

  1. GitHub 웹에서 timer-app 저장소를 비어 있는 상태로 생성
  2. Sourcetree에서 Clone, 로컬 폴더 선택
  3. 터미널에서 같은 폴더로 이동

Step 2 — Git Flow 초기화

  1. Sourcetree → Repository → Git Flow → Initialize Repository
  2. 기본값으로 OK → develop 브랜치가 생성되고 자동 체크아웃
1
2
# CLI로도 같은 동작
git flow init -d

Step 3 — feature/timer 시작

  1. Sourcetree → Git Flow → Start New Feature → 이름 timer
  2. feature/timer 브랜치로 자동 전환

Step 4 — Claude Code로 구현

터미널에서 Claude Code를 띄우고 작업을 작은 단위로 분리해서 요청합니다:

1
2
3
4
5
6
7
8
> 빈 폴더에 index.html, style.css, script.js로 구성된 타이머 앱 골격을 만들어 줘.
  화면에는 큰 숫자(MM:SS) 하나와 Start / Pause / Reset 세 버튼만 둬.

> 이제 Start 버튼 동작을 구현해 줘. setInterval로 1초마다 카운트하고,
  같은 버튼을 다시 누르면 일시정지하도록.

> Pause는 별도 버튼으로 두고, Reset은 00:00으로 되돌리는 동작.
  CSS는 다크 톤으로 간결하게.

각 요청 후 동작을 확인하고, 의도한 만큼만 코드가 들어왔는지 검토합니다.

Step 5 — 의미 있는 커밋 단위로 나누기

Sourcetree에서 변경 파일을 보며 다음 단위로 커밋을 분리합니다:

커밋 메시지포함 변경
Add timer skeleton with start/pause/reset UIHTML 구조, 기본 CSS
Implement start/pause toggle and tick logicscript.js의 시작/일시정지 로직
Implement reset and time formattingreset, formatTime() 유틸

“한 커밋 = 한 의도"가 유지되면 PR 리뷰가 훨씬 쉬워집니다.

Step 6 — Push와 Pull Request

  1. Sourcetree → Pushfeature/timer를 origin으로 푸시
  2. GitHub 페이지에 자동 표시되는 Compare & pull request 클릭
  3. 제목: Add timer feature (start / pause / reset)
  4. 설명: 무엇을·왜 + Claude Code 사용 여부 명시
  5. PR 페이지에서 리뷰 인터페이스, Files changed 탭, 인라인 코멘트 작성 화면을 둘러보기

Step 7 — 머지

  1. (시연용 상황) 셀프 승인 → Merge pull request
  2. 머지 전략은 Create a merge commit (Git Flow의 --no-ff와 동일한 효과)
  3. 로컬에서 Sourcetree → Git Flow → Finish Feature 로도 동일하게 종료 가능

Step 8 — release/0.1.0 → 배포

  1. Sourcetree → Git Flow → Start New Release → 버전 0.1.0
  2. 필요한 경우 README.md에 버전 추가, 마지막 점검
  3. Finish Release → 자동으로:
    • main에 머지
    • 태그 0.1.0 생성
    • develop에도 머지
  4. Push + Push tags 로 원격에 반영

Step 9 — hotfix/critical 시연

타이머가 1분을 넘기면 분 자릿수가 깨지는 버그를 일부러 만들어 놓고, hotfix 사이클을 보여 줍니다:

  1. Git Flow → Start New Hotfix → 이름 time-format
  2. Claude Code에게 한 줄 수정 요청
  3. Finish Hotfixmain에 머지 + 태그 0.1.1 + develop에도 자동 머지

최종 GitGraph

시연이 끝나면 Sourcetree 그래프가 Part 3의 다이어그램과 거의 동일한 모양이 됩니다.
추상적인 모델 ↔ 실제 그래프 가 일치하는 순간이 이 강의의 핵심 장면입니다.


Part 8 — 오픈소스 기여 흐름 살펴보기

오픈소스 저장소에서 먼저 확인할 핵심 문서

오픈소스 저장소를 처음 만났을 때 가장 먼저 확인할 것은 코드가 아니라 루트의 문서들 입니다.
프로젝트의 성격과 기여 방식이 코드보다 이 문서들에 먼저 드러납니다:

문서내용
README.md프로젝트 소개 — 무엇인지, 어떻게 설치/실행하는지, 빠른 시작 예시
LICENSE코드를 어떤 조건으로 쓸 수 있는가 (MIT, Apache 2.0, GPL 등)
CONTRIBUTING.md기여 방법 — 이슈/PR 작성 규칙, 커밋 컨벤션, 테스트 실행법
CODE_OF_CONDUCT.md커뮤니티 행동 강령 — 차별·괴롭힘 금지 등
CHANGELOG.md버전별 변경 이력 — 어떤 변경이 어느 버전에 들어갔는지, 호환성 주의 사항

기여 전에 적어도 README와 CONTRIBUTING은 꼭 읽어야 합니다.
CONTRIBUTING을 무시한 PR은 메인테이너의 신뢰를 잃기 쉽고,
CHANGELOG는 내 변경이 어떤 버전 흐름에 들어가는지 가늠하는 데 유용합니다.

Good First Issue 찾기

처음 기여한다면 라벨 good first issue 또는 help wanted 가 붙은 이슈부터 시작합니다.

GitHub 검색:

1
is:issue is:open label:"good first issue" language:python

좋은 첫 이슈의 조건:

  • 명확한 재현 방법 또는 명확한 작업 범위
  • 메인테이너가 최근에도 활동 중 (최근 30일 내 응답이 있는 저장소)
  • 다른 기여자가 이미 잡고 있지 않음 (코멘트 확인)

Fork → Branch → PR 흐름

내가 직접 푸시 권한이 없는 저장소에 기여할 때:

  1. Fork — 저장소를 내 계정으로 복제
  2. Clone — 내 fork를 로컬에 복제
  3. Branchfeature/<short-description> 같은 의미 있는 이름
  4. 작업 → 커밋 → push
  5. GitHub에서 원본 저장소에 PR 생성 (“base: upstream:main”, “compare: myuser:feature/…”)
  6. 리뷰 응답 → 추가 커밋 → 머지

upstream(원본)과 origin(내 fork)을 둘 다 원격으로 두면 동기화가 쉽습니다:

1
2
3
git remote add upstream https://github.com/<원본 조직>/<repo>.git
git fetch upstream
git rebase upstream/main

메인테이너와 소통하는 매너

  • 리뷰는 시간이 걸리는 일 — 메인테이너 대부분이 자원봉사이거나 본업과 병행 중입니다. 즉답을 기대하지 마세요. 며칠~일주일 정도의 응답 주기는 평범한 편입니다
  • 충분히 기다린 뒤에는 한 번 더 알려도 됩니다 — 2주 이상 무소식이면 “여유 되실 때 한 번 봐주시면 감사하겠습니다” 정도의 정중한 코멘트로 가볍게 환기시키는 정도가 적당합니다
  • 변경 요청을 받았을 때 — 동의하면 반영, 동의하지 않으면 근거를 정중하게 설명. 감정 없이 “왜 그렇게 결정했는지"만 또렷이 전하면 충분합니다
  • 합쳐지지 않을 수도 있음 — “프로젝트 방향과 맞지 않는다"는 결정도 정당합니다. 그 자체로 배움이 됩니다
  • 머지된 후 — 짧은 감사 인사 한 줄. 그리고 다음 이슈로 이동

AI 생성 코드를 오픈소스에 기여할 때

오픈소스 커뮤니티는 AI 생성 코드 기여에 대해 정책이 다양해지고 있습니다. 기여 전 다음을 확인하세요:

  • 저장소의 정책 — 일부 프로젝트는 AI 생성 코드를 거부하거나 명시를 요구함 (CONTRIBUTING.md 확인)
  • 라이선스 호환성 — 학습 데이터에서 비롯된 코드 조각이 프로젝트 라이선스와 충돌하지 않는지
  • 검토 책임 — “AI가 만든 것” 이라고 책임이 면제되지 않습니다. 기여자가 코드의 동작을 이해해야 합니다
  • 공시 — 의심스러우면 PR 설명에 “Claude Code로 초안을 작성하고 직접 검토했습니다” 정도로 명시

투명성과 책임감이 가장 좋은 정책입니다.


핵심 메시지 다시 보기

파트핵심 메시지
Part 1Git은 “변경의 이력"을, GitHub은 “협업의 장"을 제공합니다
Part 2Sourcetree로 브랜치를 그래프로 보면 머릿속에 Git의 멘탈 모델이 빠르게 자리잡습니다
Part 3Git Flow의 다섯 브랜치는 “안정성, 통합, 개발, 릴리스, 긴급 수정"이라는 다섯 가지 시간대를 분리합니다
Part 4Sourcetree의 Git Flow 메뉴는 복잡한 명령 묶음을 한 번의 클릭으로 줄여 줍니다
Part 5좋은 PR과 좋은 리뷰가 곧 좋은 협업입니다 — 코드보다 맥락을 먼저 전달하세요
Part 6AI 코드 생성기는 Git Flow의 feature·PR·release 구조 위에서 가장 안전하게 동작합니다
Part 7Claude Code + Git Flow 한 사이클이 처음부터 끝까지 흘러가는 모습을 따라가 보며 협업 감각을 익힙니다
Part 8첫 오픈소스 기여는 “코드"가 아니라 “맥락과 대화"에서 시작됩니다

참고 자료

코드컴포즈

이 콘텐츠에 접근하려면 로그인이 필요합니다.