practical-tutorials/project-based-learning. "바닥부터 직접 만들며 배우는(build from scratch)" 프로그래밍 튜토리얼을 프로그래밍 언어별로 모아 둔 거대한 큐레이션 목록이다. 데이터베이스·셸·OS·Git·인터프리터·Redis 클론 같은 "네 손으로 직접 만드는 X" 튜토리얼이 22개 언어 섹션에 약 450개 링크로 정리돼 있다. 실행되는 앱이 아니라 단 하나의 README.md가 상품인 awesome 리스트로, "수동적 강의 시청"이 아니라 "능동적 만들기"가 더 잘 배운다는 철학에 베팅한 레포다. (저장소: practical-tutorials/project-based-learning · 형식 Markdown 큐레이션 · 라이선스 MIT · ★ 약 271k · GitHub 역대 최상위권 스타 레포)
"이 레포 자체는 코드를 가르치지 않는다 — '무엇을 만들며 배울지'를 언어별로 안내하는 거대한 지도다."
프로그래밍을 배울 때 강의 영상만 끝없이 보면, 다 본 뒤에도 정작 뭔가를 만들지 못하는 경우가 많습니다. 이 레포의 철학은 정반대입니다 — 처음부터 진짜 프로그램 하나를 만들어 보라는 것. "C로 텍스트 에디터 만들기", "Go로 블록체인 만들기", "Rust로 운영체제 만들기" 같은 실전 빌드 튜토리얼을 언어별로 분류해 한 페이지에 모아 두었습니다. 여러분은 자기 언어 · 자기 수준에 맞는 프로젝트를 골라, 링크를 따라가 끝까지 만들어 보면 됩니다. 다 만들고 나면 동작하는 결과물과 포트폴리오가 손에 남습니다.
README.md 하나에 카테고리별 링크로 정리되며, "awesome-*"라는 이름의 레포들에서 유래한 장르입니다. 품질의 비결은 자동 생성이 아니라 사람의 선별 + PR 검수에 있습니다.핵심을 한 번 더 짚으면 — 이 레포에는 실행할 코드가 없습니다. 깃허브 별 27만 개를 받은 이 거대한 레포의 정체는 잘 정리된 링크 목록 하나입니다. 그래서 이 문서도 "코드 아키텍처"가 아니라 "목록이 어떻게 구성·관리되는가"와 "이 목록으로 어떻게 공부하는가"를 파고듭니다.
"규모, 변치 않는 가치, 그리고 '만들며 배운다'는 강력한 철학 — 그래서 몇 년이 지나도 계속 트렌딩에 오른다."
많은 입문자가 튜토리얼 영상·강의를 끝없이 봅니다. 보는 동안엔 다 아는 것 같지만, 막상 빈 에디터 앞에 앉으면 한 줄도 못 짜는 '튜토리얼 지옥(tutorial hell)'에 빠집니다. 지식이 '읽은 것'에 머물고 '해 본 것'이 되지 못했기 때문입니다.
수동적으로 보기만 하면 '익숙함'이 '능력'으로 착각됩니다. 정작 스스로 설계하고, 막히고, 디버깅하고, 여러 기술을 엮는 진짜 어려운 부분은 한 번도 겪지 않습니다. 그래서 강의 100개를 봐도 작은 앱 하나를 처음부터 못 만드는 일이 흔합니다.
이 레포의 처방은 단순합니다 — "진짜 프로그램 하나를 처음부터 끝까지 만들어 봐라." 데이터베이스·셸·인터프리터를 직접 구현하면, 그 내부 원리가 몸으로 이해됩니다. 막히고 고치는 과정 자체가 학습이고, 끝나면 동작하는 결과물 + 포트폴리오가 남습니다.
| 지표 | 값 |
|---|---|
| 스타 | 약 271k — GitHub 역대 최상위권(트렌딩에 반복 등장) |
| 튜토리얼 링크 | 약 450개(다중 파트 시리즈 합치면 ~300개 주제) |
| 언어 섹션 | 22개 + Additional Resources |
| 큰 섹션 | Python ~128 · C/C++ ~97 · HTML/CSS ~74 · Go ~33 |
| 라이선스 | MIT (자유롭게 포크·복사·재배포) |
이 레포가 몇 년이 지나도 계속 트렌딩에 오르는 이유는, 내용이 '유행을 안 타는(evergreen)' 지식이기 때문입니다. "데이터베이스를 직접 만들어 보라"는 가치는 10년 전에도 지금도 유효합니다. 거의 유지보수하지 않아도 신선하게 남고, README가 "시작하려면 그냥 이 레포를 포크하세요"라고 안내해 입문자의 첫 포크·첫 PR 대상으로도 인기가 높습니다.
이 레포 = 요리 학원이 아니라 '직접 만들어 볼 요리 레시피 색인'. 요리 영상을 100개 보는 것과, 레시피를 보며 실제로 한 끼를 만들어 보는 것은 다릅니다. 이 레포는 "오늘은 이 요리(프로젝트)에 도전해 봐"라며 잘 정리된 레시피 목록을 건네줍니다 — 칼질은 여러분이 직접 합니다.
"애플리케이션 코드는 없다. '스택'은 곧 문서(Markdown) + 링크를 지키는 자동화다."
실행되는 프로그램이 아니므로 백엔드·프론트엔드가 없습니다. 대신 "목록을 어떻게 관리하느냐"가 이 레포의 기술입니다.
| 관심사 | 실제 사용 |
|---|---|
| 형식 | 단 하나의 손으로 관리하는 Markdown(README.md). GFM(깃허브 마크다운)의 중첩 불릿·[제목](링크)·앵커 목차 사용. |
| 링크 검사 CI | Travis CI(.travis.yml)가 awesome_bot(루비 도구)으로 README의 모든 링크를 크롤링해 죽은 링크(404)가 있으면 빌드 실패시킴(--allow-redirect로 3xx는 허용). |
| 이슈 봇 | .github/stale.yml — 30일 비활성 이슈를 stale로 표시하고 14일 뒤 자동 종료(고정·보안 등 라벨은 예외). |
| 기여 템플릿 | PR 템플릿 + 버그/기능요청 이슈 템플릿. CONTRIBUTING.md에 엄격한 작성 규칙. |
| 없는 것 | package.json·빌드 시스템·코드 테스트·GitHub Actions(여긴 Travis)·소스 디렉토리. |
요점은 이 레포의 '엔지니어링'은 코드가 아니라 '문서를 깨끗하고 일관되게 유지하는 규칙·자동화'라는 것입니다. 기여 규칙(CONTRIBUTING.md)은 매우 엄격합니다 — PR 하나당 튜토리얼 하나, 형식은 정확히 [제목](링크), URL 단축기 금지, 올바른 언어 섹션에 배치, 새 언어면 목차 항목 추가 등.
"최상위 구분은 '프로그래밍 언어별'. 큰 언어는 다시 주제·프레임워크로 가지를 친다."
책장을 언어별 칸으로 나눈 도서관을 떠올리면 됩니다. 최상위는 언어(##)로 나뉘고, 큰 언어는 다시 주제(###)로, JavaScript는 프레임워크(####)까지 가지를 칩니다.
| 언어 | 대략 규모 · 특징 |
|---|---|
| Python | ~128개. 웹 스크래핑·봇·데이터과학·ML·OpenCV·딥러닝까지 가장 풍부. |
| C/C++ | ~97개. OS·DB·에디터 등 '바닥부터 시스템 만들기'의 보고. 네트워크·OpenGL 하위. |
| HTML/CSS | ~74개. 웹앱 + React/Angular/Vue/Node 프레임워크 하위 트리. |
| Go | ~33개. 블록체인·REST 서버·컨테이너 직접 만들기. |
| Rust | ~16개. OS·브라우저 엔진·NES 에뮬레이터. |
| 그 외 | Java·C#·Ruby·PHP·Dart(Flutter)·Lua·Haskell·Clojure·Elixir·Kotlin·Swift… 총 22개 섹션. |
# 단일 튜토리얼
- [Build Your Own Text Editor](https://...) (제목+링크, 때로 (video) 태그)
# 다중 파트 시리즈는 부모-자식 들여쓰기
- Building Blockchain in Go
- [Part 1](https://...)
- [Part 2](https://...)
...
이렇게 일관된 한 줄 문법이 있어야 사람이 읽기 좋고, 동시에 awesome_bot 같은 자동 도구가 링크를 검사할 수 있습니다 — 구성과 자동화가 맞물려 돌아갑니다.
"거의 모든 것이 README 하나에 있다. 나머지는 기여·CI를 돕는 곁가지 파일."
| 파일 | 역할 |
|---|---|
| README.md | 이 레포의 99%. 모든 튜토리얼 링크가 언어별로 정리된 본체. |
| CONTRIBUTING.md | "PR당 튜토리얼 하나", 항목 형식, 단축 URL 금지 등 기여 규칙. |
| .travis.yml | 링크 검사 자동화 설정(루비 + awesome_bot). |
| .github/ | 이슈 stale 봇, PR·이슈 템플릿 — 협업을 매끄럽게 하는 곁가지. |
이 레포 = 한 장짜리 거대한 지하철 노선도. 복잡한 시스템(역사·전동차)은 없고, 잘 그려진 노선도(README) 한 장이 전부입니다. 노선도를 깨끗하게 유지하는 규칙(CONTRIBUTING)과, 끊긴 노선이 없는지 점검하는 점검원(awesome_bot)이 곁다리로 붙어 있을 뿐이죠.
"고르는 법은 셋 — 내 언어 섹션으로 가서, 관심 주제를 고르고, 다 만든 뒤 난이도를 올린다."
① 목차(ToC)에서 내 언어 섹션으로 점프 → ② 하위 주제(웹앱·ML·게임·시스템) 중 끌리는 것 선택 → ③ 깊게 배우고 싶으면 다중 파트 시리즈를 고른다. 하나를 끝까지 만든 뒤, 한 단계 어려운 프로젝트로 올라갑니다.
핵심은 '끝까지 완성'입니다. 절반만 따라 하면 튜토리얼 지옥과 다를 게 없습니다.
이 장르의 보석들입니다: 텍스트 에디터 만들기(C, kilo) · 셸 만들기(C) · 간단한 데이터베이스 만들기(C, db_tutorial) · 밑바닥부터 OS 만들기 · CHIP-8 에뮬레이터 · TCP/IP 스택을 코딩하자. Rust에선 순수 Rust로 OS 만들기(blog_os), 브라우저 엔진 만들기, Go에선 밑바닥부터 컨테이너 만들기가 유명합니다.
Python: Flask로 마이크로블로그(Grinberg 메가 튜토리얼) · Django로 블로그 · 신경망 밑바닥부터 만들기 · 레딧 봇. JavaScript/웹: JavaScript30(30일간 30개) · 틱택토·할 일 목록. Java: 인터프리터 만들기(Crafting Interpreters) · HTTP 서버. 언어별로 결이 다릅니다 — 시스템 언어는 인프라, Python은 데이터/ML, JS는 웹앱.
알려진 시스템(Git·Redis·셸·DB·OS)을 직접 다시 만들어 보면, 평소 블랙박스였던 내부가 환히 보입니다. "어떻게 동작하지?"라는 질문에 코드로 답해 본 사람은, 같은 도구를 쓸 때도 훨씬 깊이 이해합니다.
"레포 자체엔 요구사항이 거의 없다 — 브라우저, 그리고 고른 프로젝트의 언어 도구뿐."
| 항목 | 요구사항 |
|---|---|
| 목록 읽기 | 웹 브라우저만 있으면 됨. 설치 불필요. |
| 튜토리얼 실습 | 고른 프로젝트의 언어 도구체인만(예: 에디터 만들기→C 컴파일러, Flask 앱→Python+pip, blog_os→Rust 툴체인). |
| 특별 하드웨어 | 대부분 불필요. 일부 딥러닝 항목만 선택적으로 GPU가 도움. |
| 기여(선택) | 유지보수자 측 링크 검사기 awesome_bot는 Ruby 필요(기여자는 안 돌려도 됨). |
"작은 앱 → 풀스택 → CLI 도구 → 인터프리터 → DB → OS 순으로 난이도를 올려 보자."
JavaScript30이나 틱택토 게임을 골라, 하루 만에 작고 완결된 앱 하나를 끝내 보세요. PBL의 리듬(끝까지 만들기)을 몸에 익히는 게 목표입니다.
Python의 Flask 마이크로블로그(또는 Django 블로그)를 따라가며 라우팅·템플릿·DB·인증을 한 번에 배우세요. 첫 '진짜 웹앱' 경험으로 좋습니다.
Go의 URL 단축기(Gin+Redis)나 C의 셸 만들기로, 다중 파트 시리즈를 읽고 따라가는 호흡을 익히세요.
Crafting Interpreters(Java 트리워커 → C 바이트코드 VM)나 Build Your Own Lisp로 파싱·AST·평가를 이해해 보세요.
C의 Let's Build a Simple Database(db_tutorial)로 페이저·B-트리·영속성을 직접 구현하며 DB의 속을 들여다보세요.
순수 Rust로 OS(blog_os), C로 TCP/IP 스택, Go로 BitTorrent 클라이언트 중 하나로, 0에서 동작하는 저수준 시스템까지 완주해 보세요.
"이 목록을 4주 코스로 쓰는 한 가지 방법."
| 주차 | 주제 | 이 목록에서 고를 것 |
|---|---|---|
| 1주차 | 완성의 감각 | 작은 앱 1개 완주(JavaScript30/틱택토). "끝까지 만들기" 습관 만들기. |
| 2주차 | 풀스택 흐름 | Flask/Django 블로그 — 요청→DB→화면의 한 사이클 체득. |
| 3주차 | 언어·내부 원리 | 인터프리터 또는 셸 만들기 — 파싱·실행 구조 이해. |
| 4주차 | 시스템 도전 | DB/네트워크 스택/OS 중 하나 — 저수준 내부까지 깊이 파기. |
"학습 방법론 + 큐레이션 레포 용어를 한자리에."
| 용어 | 의미 |
|---|---|
| 프로젝트 기반 학습(PBL) | 강의 시청 대신 완성 프로젝트를 직접 만들며 배우는 방법. |
| awesome 리스트 | 한 주제의 자료를 사람이 골라 정리한 큐레이션 목록(보통 README 하나). |
| 큐레이션 목록 | 자동 생성이 아닌, 사람이 선별·검수한 모음. 품질은 유지보수자 + PR 리뷰에서. |
| "build your own X" | 알려진 시스템(Git·Redis·셸·DB·OS)을 직접 재구현해 내부 원리를 배우는 장르. |
| 밑바닥부터(from scratch) | 편한 고수준 라이브러리에 기대지 않고 직접 구현하는 것(예: 라이브러리 없이 신경망). |
| 다중 파트 시리즈 | 여러 글로 나뉜 튜토리얼. README에선 부모 불릿 + 들여쓴 Part 링크로 표현. |
| awesome_bot | 마크다운의 모든 링크를 두드려 죽은 URL을 찾는 루비 도구. |
| stale 봇 | 오래 방치된 이슈를 자동 표시·종료하는 깃허브 자동화. |
| 튜토리얼 지옥 | 강의만 끝없이 보고 정작 스스로 못 만드는 상태. PBL이 깨려는 함정. |
"형제 격인 '직접 만들기' 자료들과 함께 보면 좋다."
CONTRIBUTING.md(포크 → PR당 튜토리얼 하나 → 올바른 언어 섹션에 배치)