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

Open Source Contribution
선수 강의: Git & GitHub으로 협업하며 개발하기
강의 개요
이미 Git과 GitHub의 기본을 익힌 학생들을 위한 오픈소스 기여 입문 특강입니다.
명령어와 PR의 작동 방식은 이미 알고 있지만,
“왜 어떤 PR은 머지되고 어떤 PR은 닫히는가”, “오픈소스 프로젝트 안의 사람들은 어떤 권한과 역할을 가지는가” 는 잘 다뤄지지 않습니다.
본 강의는 라이브 데모와 시연 중심 으로 진행됩니다.
실제 GitHub 프로젝트 페이지를 함께 둘러보고, 머지된 PR과 거절된 PR을 한 줄씩 읽어보며,
강의 중간에는 학생이 직접 첫 PR을 날려보고, 강사는 두 계정을 오가며 PR 한 사이클 전체(보내는 쪽 + 받는 쪽)를 시연합니다.
%%{init: {'theme':'base','themeVariables':{'primaryColor':'#e3f2fd','primaryBorderColor':'#90caf9','lineColor':'#546e7a','textColor':'#333','mainBkg':'#fafafa','nodeBorder':'#90a4ae','clusterBkg':'#f5f5f5','clusterBorder':'#bdbdbd'}}}%%
flowchart LR
subgraph 이미아는것["이미 아는 것 — 선수 수업"]
S1["Git\n명령어"] --> S2["로컬\nrepo"] --> S3["push / pull"]
end
subgraph 이번강의["이번 강의 — 오픈소스 기여"]
C1["good first\nissue"] --> C2["Fork & PR"]
C2 --> C3["리뷰 대응"] --> C4["Merged!"]
C4 --> C5["Contributor"]
end
이미아는것 -- "이번 강의가 잇는 다리" --> 이번강의
style S1 fill:#bbdefb,stroke:#1976d2,stroke-width:2px,rx:10,ry:10
style S2 fill:#bbdefb,stroke:#1976d2,stroke-width:2px,rx:10,ry:10
style S3 fill:#bbdefb,stroke:#1976d2,stroke-width:2px,rx:10,ry:10
style C1 fill:#fff9c4,stroke:#f9a825,stroke-width:2px,rx:10,ry:10
style C2 fill:#fff9c4,stroke:#f9a825,stroke-width:2px,rx:10,ry:10
style C3 fill:#fff9c4,stroke:#f9a825,stroke-width:2px,rx:10,ry:10
style C4 fill:#c8e6c9,stroke:#388e3c,stroke-width:2px,rx:10,ry:10
style C5 fill:#c8e6c9,stroke:#388e3c,stroke-width:2px,rx:10,ry:10
style 이미아는것 rx:15,ry:15
style 이번강의 rx:15,ry:15
강의 흐름
%%{init: {'theme':'base','themeVariables':{'primaryColor':'#e3f2fd','primaryBorderColor':'#90caf9','lineColor':'#546e7a','textColor':'#333','mainBkg':'#fafafa','nodeBorder':'#90a4ae','clusterBkg':'#f5f5f5','clusterBorder':'#bdbdbd'}}}%%
flowchart LR
subgraph 전반부["전반부 — 도입 & 구조"]
direction TB
P1["Part 1\n도입 + 가벼운 리뷰"]
P2["Part 2\nGitHub의 사람들"]
P1 --> P2
end
subgraph 중반부["중반부 — 프로젝트의 안쪽"]
direction TB
P3["Part 3\n프로젝트의\n해부학"]
P4["Part 4\n실제 PR\n사례 워킹"]
P5["Part 5\n코드 외\n기여의 길"]
P3 --> P4 --> P5
end
subgraph 후반부["후반부 — 실전 & 미래"]
direction TB
P6["Part 6\n실습 +\n강사 시연"]
P7["Part 7\nAI 시대의\n오픈소스 기여"]
P8["Part 8\n클로징 & Q&A"]
P6 --> P7 --> P8
end
전반부 --> 중반부 --> 후반부
style P1 fill:#e3f2fd,stroke:#90caf9,stroke-width:2px,rx:10,ry:10
style P2 fill:#e3f2fd,stroke:#90caf9,stroke-width:2px,rx:10,ry:10
style P3 fill:#fff9c4,stroke:#f9a825,stroke-width:2px,rx:10,ry:10
style P4 fill:#fff9c4,stroke:#f9a825,stroke-width:2px,rx:10,ry:10
style P5 fill:#fff9c4,stroke:#f9a825,stroke-width:2px,rx:10,ry:10
style P6 fill:#c8e6c9,stroke:#388e3c,stroke-width:2px,rx:10,ry:10
style P7 fill:#c8e6c9,stroke:#388e3c,stroke-width:2px,rx:10,ry:10
style P8 fill:#c8e6c9,stroke:#388e3c,stroke-width:2px,rx:10,ry:10
style 전반부 rx:15,ry:15
style 중반부 rx:15,ry:15
style 후반부 rx:15,ry:15
오픈소스 프로젝트의 권한 위계
%%{init: {'theme':'base','themeVariables':{'primaryColor':'#e3f2fd','primaryBorderColor':'#90caf9','lineColor':'#546e7a','textColor':'#333','mainBkg':'#fafafa','nodeBorder':'#90a4ae','clusterBkg':'#f5f5f5','clusterBorder':'#bdbdbd'}}}%%
flowchart TB
Anyone["누구나\n(GitHub 계정만 있으면)"]
Anyone --> Issue["이슈 작성"]
Anyone --> PR["PR 제출"]
PR --> Contributor["Contributor\nPR이 머지된 사람"]
Contributor -.승격.-> Committer["Committer\n쓰기 권한"]
Committer -.승격.-> Reviewer["Reviewer\n리뷰 자격"]
Reviewer -.승격.-> Maintainer["Maintainer\n머지 권한"]
Maintainer -.승격.-> Core["Core / TSC\n프로젝트 방향성 결정"]
style Anyone fill:#bbdefb,stroke:#1976d2,stroke-width:2px,rx:10,ry:10
style Issue fill:#eceff1,stroke:#546e7a,stroke-width:2px,rx:10,ry:10
style PR fill:#eceff1,stroke:#546e7a,stroke-width:2px,rx:10,ry:10
style Contributor fill:#fff9c4,stroke:#f9a825,stroke-width:2px,rx:10,ry:10
style Committer fill:#fff9c4,stroke:#f9a825,stroke-width:2px,rx:10,ry:10
style Reviewer fill:#fff9c4,stroke:#f9a825,stroke-width:2px,rx:10,ry:10
style Maintainer fill:#c8e6c9,stroke:#388e3c,stroke-width:2px,rx:10,ry:10
style Core fill:#c8e6c9,stroke:#388e3c,stroke-width:2px,rx:10,ry:10
학습 목표
- GitHub의 권한 시스템(Repository roles, Organization roles)을 화면에서 직접 확인합니다.
- 오픈소스 프로젝트 내 비공식 위계(Contributor → Maintainer → Core/TSC)와 거버넌스 구조를 이해합니다.
- 라이선스, CONTRIBUTING.md, Code of Conduct 등 프로젝트의 “사회적 인프라” 를 읽을 수 있게 됩니다.
- 실제 머지·거절된 PR을 통해 “좋은 PR” 과 “거절되는 PR” 의 차이를 체감합니다.
firstcontributions/first-contributions로 강의 중 첫 PR 을 제출하는 경험을 합니다.- PR을 보내는 쪽과 받는 쪽 양쪽 관점에서 한 사이클이 어떻게 흐르는지 관찰합니다 (라인 코멘트, suggested changes, 머지 전략 포함).
- AI 시대의 오픈소스 기여 정책과 윤리적 화두를 인식합니다.
수강 대상 · 선수 지식
| 수강 대상 | 선수 지식 |
|---|---|
| 오픈소스SW 수업을 듣고 있는 학생 | Git의 fork / branch / commit / PR 흐름 이해 |
| 오픈소스 기여를 시작하고 싶은 주니어 개발자 | 하나 이상의 프로그래밍 언어로 코드 작성 경험 |
| GitHub은 써봤지만 오픈소스 기여는 처음인 분 | GitHub 계정 보유 (없으면 강의 중 가입) |
| 메인테이너 시각이 궁금한 분 | (선택) AI 코드 어시스턴트 사용 경험 |
시연 환경
| 항목 | 구성 |
|---|---|
| 기기 | MacBook 또는 Windows 노트북 |
| 강사 계정 | GitHub 메인 계정 + 시연용 더미 계정 1개 |
| 학생 준비물 | GitHub 계정, 웹 브라우저 |
| 라이브 투어 대상 | Excalidraw, Mermaid, Kubernetes SIG 등 실제 OSS repo |
| 학생 실습 저장소 | firstcontributions/first-contributions |
| 참조 사이트 | choosealicense.com, matiassingers/awesome-readme, skills.github.com |
강의 구성
Part 1 — 도입: 우리가 매일 쓰는 도구는 모두 오픈소스
- Excalidraw 라이브 투어
- “강의자료에 들어간 이 도식, 어디서 그렸을까?” → Excalidraw 띄우기
github.com/excalidraw/excalidrawInsights → Contributors, 최근 머지된 작은 PR- 그 PR 작성자의 첫 PR 보여주기 → “시작은 한 줄 수정이었다”
- 가벼운 리뷰 — fork → branch → commit → PR → review → merge 흐름 한 컷
- 이미 안다는 전제로 빠르게 통과
Part 2 — GitHub의 사람들과 권한
- Repository roles — Read / Triage / Write / Maintain / Admin, Settings 화면 한 장
- Organization roles — Owner / Member / Outside collaborator (요약 한 줄)
- 프로젝트 내 비공식 위계 — Contributor → Committer → Reviewer → Maintainer → Core/TSC
- Kubernetes SIG 페이지 라이브 투어 — 거버넌스가 어떻게 시각적으로 드러나는가
- 프로필의 시각적 신호 — contribution graph, achievements, Sponsor 뱃지, Insights → Contributors
- (인터랙티브) 학생 본인 프로필 ↔ 유명 maintainer 프로필 비교
Part 3 — 오픈소스 프로젝트의 해부학
- 라이선스 —
choosealicense.com라이브 데모, MIT / Apache / GPL / AGPL 비교 - README의 미학 — 좋은 README 사례, shields.io 뱃지,
matiassingers/awesome-readme - 기여자 인프라 — CONTRIBUTING.md, Code of Conduct, Issue·PR 템플릿, Labels 색 체계
- 자동화 흔적 — CI 뱃지, Dependabot, Releases & semver, FUNDING.yml
- 로드맵과 의사결정 — Projects, Milestones, RFC·PEP·TC39가 어디 사는지
- 커뮤니티 채널 — Discord / Slack / Discussions / 메일링리스트, “프로젝트마다 다르다”
Part 4 — 실제 PR 사례 워킹: Mermaid
- 머지된 PR 1개 라이브 리딩 — 이슈 → 토론 → PR → 리뷰 → 머지 역추적
- 거절·논쟁된 PR 1개 — 어디서 어긋났는지, 무엇이 빠졌는지
- CLA / DCO / sign-off — Kubernetes·Linux의 CLA 봇 동작,
git commit -s한 줄 시연
Part 5 — 코드 외 기여의 길
- 번역(i18n), 문서 개선, 이슈 재현/트리아지, 디자인, 코드 리뷰
- “첫 PR이 꼭 코드일 필요는 없다” — 실제 사례 1~2개 스크린샷
Part 6 — 실습 + 강사 시연
- 학생 실습:
firstcontributions/first-contributions로 강의 중 첫 PR 제출 - 강사 시연: 서로 다른 두 계정을 오가며 PR 한 사이클 전체를 시연
- 보내는 쪽 (더미 계정) — fork → branch → 파일 수정 → PR 작성 → 제출
- 받는 쪽 (메인 계정의 repo) — PR 알림 받기 → 리뷰 → 변경 요청 → 머지
- 라인 코멘트 vs 일반 코멘트
- Approve / Request changes / Comment 차이
- Suggested changes 블록 직접 작성
- 일부러 컨플릭트 만들고 웹 에디터에서 resolve
- Squash / Rebase / Merge commit 비교
- 다시 보내는 쪽으로 돌아가 — 변경 요청에 답글, 수정 commit 추가, 재요청까지의 흐름
Part 7 — AI 시대의 오픈소스 기여
- Copilot / Cursor / Claude Code로 만든 PR이 환영받는가?
- AI 생성 PR을 금지·제한한 프로젝트 사례 (curl, NetBSD 등)
- 라이선스와 AI 학습 데이터 논쟁 — 한 줄 정리
- “여러분이 메인테이너라면 어떤 정책을 만들겠는가?” — 던지고 끝
Part 8 — 클로징 & Q&A
- 다음 단계: 자기 관심사 프로젝트의
good first issue찾는 법 - 추천 시작점 (first-contributions 외, GitHub Skills 등)
- 자유 질문
강의 방식
- 형태: 오프라인 대면 강의 또는 Zoom (약 2시간)
- 라이브 데모 중심: 강사가 실제 GitHub 페이지를 화면 공유로 둘러보는 형태
- 시각 자료 우선: 텍스트 슬라이드는 최소화, 실제 GitHub 화면·도식·다이어그램 위주
- 인터랙티브 구간: Part 2의 프로필 비교, Part 6의 학생 첫 PR 실습
- 상용 도구 미사용: 모든 도구는 오픈소스/무료
- 선수 강의: 본 강의는 Git & GitHub으로 협업하며 개발하기 또는 동등한 오픈소스SW 수업 수강을 전제로 합니다.
핵심 메시지 요약
| 파트 | 핵심 메시지 |
|---|---|
| Part 1 | 여러분이 매일 쓰는 모든 도구는 오픈소스이고, 그 contributors도 처음엔 한 줄 수정으로 시작했습니다 |
| Part 2 | GitHub은 단순한 코드 저장소가 아니라, 권한과 역할이 다층적으로 설계된 “사회"입니다 |
| Part 3 | 오픈소스 프로젝트는 코드뿐 아니라 라이선스·문서·자동화로 이루어진 하나의 생명체입니다 |
| Part 4 | 좋은 PR과 거절되는 PR의 차이는 “코드의 품질"보다 “맥락의 전달"에 있습니다 |
| Part 5 | 첫 기여는 꼭 코드일 필요가 없습니다 — 번역·문서·트리아지가 더 환영받기도 합니다 |
| Part 6 | PR을 보내는 쪽과 받는 쪽 양쪽을 모두 경험해야 협업의 감각이 완성됩니다 |
| Part 7 | AI 시대에 “누가 코드를 썼는가"의 의미가 다시 쓰이고 있고, 메인테이너의 정책도 갈라지고 있습니다 |
| Part 8 | 다음 PR은 여러분이 가장 좋아하는 프로젝트의 README 오타 수정에서 시작될 수 있습니다 |
문의
강의 일정 및 비용 문의는 이메일로 연락 주세요.