GitHub 트렌딩 딥다이브 · 2026-06-24 · TrendShift

project-based-learning 딥다이브
— "강의를 보지 말고, 직접 만들면서 배워라" — 언어별로 정리된 '직접 만들기' 튜토리얼 대백과

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 역대 최상위권 스타 레포)

목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 — 이 목록은 어떻게 만들어지나
  4. 아키텍처 — 목록은 어떻게 구성돼 있나
  5. 디렉토리 구조 해부
  6. 학습 포인트 (어떻게 활용하나)
  7. 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

"이 레포 자체는 코드를 가르치지 않는다 — '무엇을 만들며 배울지'를 언어별로 안내하는 거대한 지도다."

한 줄로

project-based-learning은 "이 언어로 이런 걸 직접 만들어 봐"라는 튜토리얼 링크를 언어별로 모은 '만들며 배우기' 안내 지도다.

프로그래밍을 배울 때 강의 영상만 끝없이 보면, 다 본 뒤에도 정작 뭔가를 만들지 못하는 경우가 많습니다. 이 레포의 철학은 정반대입니다 — 처음부터 진짜 프로그램 하나를 만들어 보라는 것. "C로 텍스트 에디터 만들기", "Go로 블록체인 만들기", "Rust로 운영체제 만들기" 같은 실전 빌드 튜토리얼을 언어별로 분류해 한 페이지에 모아 두었습니다. 여러분은 자기 언어 · 자기 수준에 맞는 프로젝트를 골라, 링크를 따라가 끝까지 만들어 보면 됩니다. 다 만들고 나면 동작하는 결과물과 포트폴리오가 손에 남습니다.

용어
project-based learning (PBL, 프로젝트 기반 학습)
개념을 강의로 '듣는' 대신, 완성된 프로젝트를 직접 만들면서 그 과정에서 필요한 지식을 익히는 학습법입니다. 실제 버그와 싸우고 여러 기술을 엮다 보니 기억에 더 오래 남고, 끝나면 동작하는 결과물이 생깁니다. 수영을 책으로 배우지 않고 물에 들어가 배우는 것과 같습니다.
용어
awesome 리스트 · 큐레이션 목록
awesome 리스트는 어떤 주제에 대한 자료 링크를 사람이 직접 골라(curate) 정리한 목록입니다. 보통 README.md 하나에 카테고리별 링크로 정리되며, "awesome-*"라는 이름의 레포들에서 유래한 장르입니다. 품질의 비결은 자동 생성이 아니라 사람의 선별 + PR 검수에 있습니다.

핵심을 한 번 더 짚으면 — 이 레포에는 실행할 코드가 없습니다. 깃허브 별 27만 개를 받은 이 거대한 레포의 정체는 잘 정리된 링크 목록 하나입니다. 그래서 이 문서도 "코드 아키텍처"가 아니라 "목록이 어떻게 구성·관리되는가""이 목록으로 어떻게 공부하는가"를 파고듭니다.

2왜 주목받는가

"규모, 변치 않는 가치, 그리고 '만들며 배운다'는 강력한 철학 — 그래서 몇 년이 지나도 계속 트렌딩에 오른다."

먼저, '수동적 학습'의 함정

많은 입문자가 튜토리얼 영상·강의를 끝없이 봅니다. 보는 동안엔 다 아는 것 같지만, 막상 빈 에디터 앞에 앉으면 한 줄도 못 짜는 '튜토리얼 지옥(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개 보는 것과, 레시피를 보며 실제로 한 끼를 만들어 보는 것은 다릅니다. 이 레포는 "오늘은 이 요리(프로젝트)에 도전해 봐"라며 잘 정리된 레시피 목록을 건네줍니다 — 칼질은 여러분이 직접 합니다.

3기술 스택 — 이 목록은 어떻게 만들어지나

"애플리케이션 코드는 없다. '스택'은 곧 문서(Markdown) + 링크를 지키는 자동화다."

실행되는 프로그램이 아니므로 백엔드·프론트엔드가 없습니다. 대신 "목록을 어떻게 관리하느냐"가 이 레포의 기술입니다.

관심사실제 사용
형식단 하나의 손으로 관리하는 Markdown(README.md). GFM(깃허브 마크다운)의 중첩 불릿·[제목](링크)·앵커 목차 사용.
링크 검사 CITravis CI(.travis.yml)가 awesome_bot(루비 도구)으로 README의 모든 링크를 크롤링해 죽은 링크(404)가 있으면 빌드 실패시킴(--allow-redirect로 3xx는 허용).
이슈 봇.github/stale.yml — 30일 비활성 이슈를 stale로 표시하고 14일 뒤 자동 종료(고정·보안 등 라벨은 예외).
기여 템플릿PR 템플릿 + 버그/기능요청 이슈 템플릿. CONTRIBUTING.md에 엄격한 작성 규칙.
없는 것package.json·빌드 시스템·코드 테스트·GitHub Actions(여긴 Travis)·소스 디렉토리.
용어
awesome_bot · 링크 로트(link rot)
링크 로트는 시간이 지나며 URL이 죽거나(404) 바뀌어 가는 현상입니다. 450개나 되는 외부 링크 목록의 가장 큰 적이죠. awesome_bot은 마크다운 파일 안의 모든 링크를 자동으로 두드려 보고 죽은 링크를 찾아내는 루비 도구입니다. 다만 이 레포의 CI는 Travis CI 기반인데 오픈소스에서 Travis가 거의 퇴역해, 현재는 이 링크 검사가 사실상 잠들어 있습니다("예전엔 자동 검사했다" 정도로 이해).

요점은 이 레포의 '엔지니어링'은 코드가 아니라 '문서를 깨끗하고 일관되게 유지하는 규칙·자동화'라는 것입니다. 기여 규칙(CONTRIBUTING.md)은 매우 엄격합니다 — PR 하나당 튜토리얼 하나, 형식은 정확히 [제목](링크), URL 단축기 금지, 올바른 언어 섹션에 배치, 새 언어면 목차 항목 추가 등.

4아키텍처 — 목록은 어떻게 구성돼 있나

"최상위 구분은 '프로그래밍 언어별'. 큰 언어는 다시 주제·프레임워크로 가지를 친다."

전체 구조 한 장

# Project Based Learning (제목 + 소개) │ ├── ## Table of Contents (언어별 앵커 목차) │ ├── ## C/C++ ~97개 ── ### Network programming │ └ ### OpenGL ├── ## Python ~128개 ── ### Web Scraping / Bots │ ├ ### Data Science / ML │ └ ### Deep Learning / OpenCV ├── ## HTML and CSS ~74개 ── ### Web Applications │ └ #### React / Angular / Vue / Node ├── ## Go ~33개 ├── ## Rust / Java / C# / Ruby / PHP / Dart / ... (총 22개 언어) │ └── ## Additional Resources (학습 플랫폼 모음)

책장을 언어별 칸으로 나눈 도서관을 떠올리면 됩니다. 최상위는 언어(##)로 나뉘고, 큰 언어는 다시 주제(###)로, 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 같은 자동 도구가 링크를 검사할 수 있습니다 — 구성과 자동화가 맞물려 돌아갑니다.

5디렉토리 구조 해부

"거의 모든 것이 README 하나에 있다. 나머지는 기여·CI를 돕는 곁가지 파일."

project-based-learning/ ├── README.md # 상품 그 자체: ~671줄, ~450 링크, 22개 언어 ├── CONTRIBUTING.md # 기여 규칙 + 항목 형식 명세 ├── LICENSE.md # MIT License (c) 2021 practical-tutorials ├── .travis.yml # CI: awesome_bot 링크 검사(현재 휴면) └── .github/ ├── stale.yml # 이슈 자동 stale/종료(30일 → +14일) ├── PULL_REQUEST_TEMPLATE.md # PR 체크리스트 └── ISSUE_TEMPLATE/ ├── Bug_report.md # 🐛 깨진 링크 등 신고 └── Feature_request.md # 🚀 새 튜토리얼 제안
파일역할
README.md이 레포의 99%. 모든 튜토리얼 링크가 언어별로 정리된 본체.
CONTRIBUTING.md"PR당 튜토리얼 하나", 항목 형식, 단축 URL 금지 등 기여 규칙.
.travis.yml링크 검사 자동화 설정(루비 + awesome_bot).
.github/이슈 stale 봇, PR·이슈 템플릿 — 협업을 매끄럽게 하는 곁가지.
비유

이 레포 = 한 장짜리 거대한 지하철 노선도. 복잡한 시스템(역사·전동차)은 없고, 잘 그려진 노선도(README) 한 장이 전부입니다. 노선도를 깨끗하게 유지하는 규칙(CONTRIBUTING)과, 끊긴 노선이 없는지 점검하는 점검원(awesome_bot)이 곁다리로 붙어 있을 뿐이죠.

6학습 포인트 (어떻게 활용하나)

"고르는 법은 셋 — 내 언어 섹션으로 가서, 관심 주제를 고르고, 다 만든 뒤 난이도를 올린다."

활용법

이 지도를 읽는 3단계

목차(ToC)에서 내 언어 섹션으로 점프 → 하위 주제(웹앱·ML·게임·시스템) 중 끌리는 것 선택 → 깊게 배우고 싶으면 다중 파트 시리즈를 고른다. 하나를 끝까지 만든 뒤, 한 단계 어려운 프로젝트로 올라갑니다.

핵심은 '끝까지 완성'입니다. 절반만 따라 하면 튜토리얼 지옥과 다를 게 없습니다.

대표 예시 — 시스템

"바닥부터 인프라 만들기" (C/C++ · Rust · Go)

이 장르의 보석들입니다: 텍스트 에디터 만들기(C, kilo) · 셸 만들기(C) · 간단한 데이터베이스 만들기(C, db_tutorial) · 밑바닥부터 OS 만들기 · CHIP-8 에뮬레이터 · TCP/IP 스택을 코딩하자. Rust에선 순수 Rust로 OS 만들기(blog_os), 브라우저 엔진 만들기, Go에선 밑바닥부터 컨테이너 만들기가 유명합니다.

대표 예시 — 앱 · 데이터

"실용 앱 만들기" (Python · JS · Java)

Python: Flask로 마이크로블로그(Grinberg 메가 튜토리얼) · Django로 블로그 · 신경망 밑바닥부터 만들기 · 레딧 봇. JavaScript/웹: JavaScript30(30일간 30개) · 틱택토·할 일 목록. Java: 인터프리터 만들기(Crafting Interpreters) · HTTP 서버. 언어별로 결이 다릅니다 — 시스템 언어는 인프라, Python은 데이터/ML, JS는 웹앱.

왜 효과적인가

읽는 게 아니라 '재현'하니까

알려진 시스템(Git·Redis·셸·DB·OS)을 직접 다시 만들어 보면, 평소 블랙박스였던 내부가 환히 보입니다. "어떻게 동작하지?"라는 질문에 코드로 답해 본 사람은, 같은 도구를 쓸 때도 훨씬 깊이 이해합니다.

7시스템 요구사항

"레포 자체엔 요구사항이 거의 없다 — 브라우저, 그리고 고른 프로젝트의 언어 도구뿐."

항목요구사항
목록 읽기웹 브라우저만 있으면 됨. 설치 불필요.
튜토리얼 실습고른 프로젝트의 언어 도구체인만(예: 에디터 만들기→C 컴파일러, Flask 앱→Python+pip, blog_os→Rust 툴체인).
특별 하드웨어대부분 불필요. 일부 딥러닝 항목만 선택적으로 GPU가 도움.
기여(선택)유지보수자 측 링크 검사기 awesome_bot는 Ruby 필요(기여자는 안 돌려도 됨).

8직접 해볼 수 있는 실습 과제

"작은 앱 → 풀스택 → CLI 도구 → 인터프리터 → DB → OS 순으로 난이도를 올려 보자."

실습 1 난이도 ★☆☆ 입문

프런트엔드 워밍업

JavaScript30이나 틱택토 게임을 골라, 하루 만에 작고 완결된 앱 하나를 끝내 보세요. PBL의 리듬(끝까지 만들기)을 몸에 익히는 게 목표입니다.

실습 2 난이도 ★☆☆ 입문

풀스택 CRUD 앱

Python의 Flask 마이크로블로그(또는 Django 블로그)를 따라가며 라우팅·템플릿·DB·인증을 한 번에 배우세요. 첫 '진짜 웹앱' 경험으로 좋습니다.

실습 3 난이도 ★★☆ 중급

CLI 도구를 바닥부터

Go의 URL 단축기(Gin+Redis)나 C의 셸 만들기로, 다중 파트 시리즈를 읽고 따라가는 호흡을 익히세요.

실습 4 난이도 ★★☆ 중급

장난감 인터프리터/언어

Crafting Interpreters(Java 트리워커 → C 바이트코드 VM)나 Build Your Own Lisp로 파싱·AST·평가를 이해해 보세요.

실습 5 난이도 ★★★ 고급

장난감 데이터베이스/키-값 저장소

C의 Let's Build a Simple Database(db_tutorial)로 페이저·B-트리·영속성을 직접 구현하며 DB의 속을 들여다보세요.

실습 6 난이도 ★★★ 고급

시스템 캡스톤

순수 Rust로 OS(blog_os), C로 TCP/IP 스택, Go로 BitTorrent 클라이언트 중 하나로, 0에서 동작하는 저수준 시스템까지 완주해 보세요.

9관련 기술 심화 학습 로드맵

"이 목록을 4주 코스로 쓰는 한 가지 방법."

주차주제이 목록에서 고를 것
1주차완성의 감각작은 앱 1개 완주(JavaScript30/틱택토). "끝까지 만들기" 습관 만들기.
2주차풀스택 흐름Flask/Django 블로그 — 요청→DB→화면의 한 사이클 체득.
3주차언어·내부 원리인터프리터 또는 셸 만들기 — 파싱·실행 구조 이해.
4주차시스템 도전DB/네트워크 스택/OS 중 하나 — 저수준 내부까지 깊이 파기.

10핵심 키워드 사전

"학습 방법론 + 큐레이션 레포 용어를 한자리에."

용어의미
프로젝트 기반 학습(PBL)강의 시청 대신 완성 프로젝트를 직접 만들며 배우는 방법.
awesome 리스트한 주제의 자료를 사람이 골라 정리한 큐레이션 목록(보통 README 하나).
큐레이션 목록자동 생성이 아닌, 사람이 선별·검수한 모음. 품질은 유지보수자 + PR 리뷰에서.
"build your own X"알려진 시스템(Git·Redis·셸·DB·OS)을 직접 재구현해 내부 원리를 배우는 장르.
밑바닥부터(from scratch)편한 고수준 라이브러리에 기대지 않고 직접 구현하는 것(예: 라이브러리 없이 신경망).
다중 파트 시리즈여러 글로 나뉜 튜토리얼. README에선 부모 불릿 + 들여쓴 Part 링크로 표현.
awesome_bot마크다운의 모든 링크를 두드려 죽은 URL을 찾는 루비 도구.
stale 봇오래 방치된 이슈를 자동 표시·종료하는 깃허브 자동화.
튜토리얼 지옥강의만 끝없이 보고 정작 스스로 못 만드는 상태. PBL이 깨려는 함정.

11참고 링크

"형제 격인 '직접 만들기' 자료들과 함께 보면 좋다."