Coding Interview University(이하 CIU)는 John Washam(jwasham)이라는 개발자가 만든 저장소입니다. 그는 CS 학위가 없었고, 웹 개발은 했지만 "스택과 힙의 차이도, Big-O가 뭔지도 몰랐다"고 고백합니다. 그런 그가 8개월간 풀타임으로 독학해 결국 아마존 소프트웨어 엔지니어로 취업했고, 그 과정에서 만든 "공부할 것 to-do 리스트"가 점점 불어나 지금의 거대한 학습 플랜이 되었습니다.
중요한 건 이겁니다: 이 저장소에는 실행되는 프로그램이 거의 없습니다. 파일 대부분이 README.md 하나에 들어 있는 Markdown(마크다운·서식 있는 텍스트 문법) 문서입니다. 즉 CIU의 "코드"는 "무엇을, 어떤 순서로, 어떻게 공부하라"는 지시문 그 자체입니다.
헬스장에 가면 트레이너가 "오늘은 가슴, 내일은 등, 이 무게로 이만큼"이라고 짜 주죠. CIU는 그 운동 계획표의 컴퓨터공학 버전입니다. "오늘은 배열, 내일은 연결 리스트, 이 영상 보고 → 직접 코드로 구현하고 → 문제 2~3개 풀어라."
트레이너(jwasham)가 이미 한 번 그 코스를 완주하고 아마존에 합격했다는 게 신뢰의 근거입니다. 게다가 그는 "나는 너무 많이 했다, 너희는 이만큼 안 해도 된다"며 군더더기를 쳐내 줍니다.
그래서 이 딥다이브는 다른 레포 분석과 결이 조금 다릅니다. 우리는 "이 소프트웨어가 어떻게 동작하나"가 아니라, "이 학습 자료가 어떻게 설계됐고, 거기서 무엇을·어떻게 배울 수 있나"를 해부합니다.
CIU는 2016년에 공개된 뒤 꾸준히 GitHub 최상위권 저장소였고, 2026년 현재 TrendShift 주간 트렌딩에 다시 올라왔습니다. 신상 저장소가 아닌데도 다시 트렌딩하는 이유, 그리고 애초에 이렇게까지 인기 있는 이유를 짚어 봅니다.
CS 학위가 없는 사람에게 CIU는 "4년치 등록금과 시간을 아껴 준다"는 약속입니다. 부트캠프 수료생, 전공 전환자, 비전공 독학러에게 이만큼 구체적인 지도는 드뭅니다. 게다가 실제 성공 사례(저자 본인)가 붙어 있습니다.
유튜브에 "Big-O 강의"를 치면 수천 개가 뜹니다. 초보자는 어느 걸 봐야 할지, 어디까지 깊게 봐야 할지 모릅니다. CIU는 그 바다에서 "이거 보세요, 이만큼만요"라고 골라 주는 사서(司書) 역할을 합니다.
이게 바로 curated list(큐레이션 리스트·전문가가 골라 정리한 목록)의 힘입니다. 콘텐츠를 새로 만드는 게 아니라, 흩어진 좋은 자료를 "순서와 분량"까지 정해서 묶는 것 자체가 거대한 가치입니다.
README는 GitHub 특유의 task list(작업 목록·- [ ] 문법으로 만드는 체크박스)로 가득합니다. 학습자는 저장소를 Fork(포크·내 계정으로 복제)한 뒤 끝낸 항목에 x를 넣어 - [x]로 바꿉니다. 진행률이 눈에 보이니 게임의 퀘스트 클리어처럼 동기가 유지됩니다.
스페인어·중국어·일본어·러시아어 등 17개 언어로 번역돼 있고(한국어는 진행 중), 8만 명 이상이 Fork 했습니다. 사람들이 자기 진행 상황을 포크에 기록하기 때문에, Fork 수가 곧 "실제로 쓰는 사람 수"에 가깝습니다.
채용 시장이 얼어붙거나 정리해고가 늘 때마다 "이직·취업 준비" 수요가 폭발하고, 그때마다 CIU 같은 검증된 로드맵이 재조명됩니다. 콘텐츠가 늙지 않는(Big-O와 자료구조는 10년 전이나 지금이나 같은) 분야라는 점도 장수의 비결입니다.
일반 소프트웨어라면 여기서 백엔드/프론트엔드/인프라를 나눕니다. CIU는 학습 자료이므로, "스택"을 ① 학습 콘텐츠(무엇을 배우나) ② 학습을 굴리는 도구(어떻게 익히나)로 나눠 봅니다.
| 덩어리 | 포함 주제 | 한 줄 설명 |
|---|---|---|
| 기초 이론 | Big-O / 점근 분석 | "이 알고리즘이 빠른가 느린가"를 수학 기호로 표현하는 법 |
| 자료구조 | 배열·연결 리스트·스택·큐·해시테이블·트리·그래프 | 데이터를 메모리에 "어떻게 담을지" 그릇의 종류 |
| 알고리즘 | 정렬·탐색·재귀·동적계획법(DP)·그래프 순회 | 그릇에 담은 데이터를 "어떻게 다룰지" 절차 |
| 시스템·실무 | 시스템 설계·확장성·OS(프로세스/스레드)·캐시·네트워킹 | 큰 서비스를 "어떻게 설계하고 굴릴지" (경력자용 심화) |
O(n)은 데이터가 2배면 시간도 2배(선형), O(n²)은 데이터가 2배면 시간은 4배(제곱). 면접에서 "이 코드의 시간 복잡도는?"이라는 질문에 답하기 위한 공통 언어입니다. 비유하면 "요리 재료가 2배로 늘면 요리 시간이 얼마나 더 걸리나"를 표준 단위로 말하는 것.CIU가 단순 링크 모음을 넘어서는 이유는, 저자가 "어떻게 익혀야 머리에 남는가"까지 방법론을 박아 뒀기 때문입니다. 핵심 3가지:
| 도구 | 정체 | 역할 |
|---|---|---|
| Task list | GitHub 체크박스 - [ ] | 진행률 추적 — Fork 후 항목마다 x 체크 |
| Flashcards | 플래시카드(앞=질문/뒤=답) | 망각 방지 — 저자가 직접 만든 카드 사이트 + Anki 연동 |
| Practice repos | practice-c / -cpp / -python | "읽고 끝"이 아니라 직접 구현 — 저자의 연습 코드 저장소 |
저자는 어셈블리어부터 머신러닝·통계까지 온갖 걸 카드로 만들었다가 "필요 이상으로 과했다"고 후회합니다. 핵심 교훈: 도구는 따라 하되, 분량은 자기 목표(면접 통과)에 맞게 줄여라. CIU 전체를 관통하는 메시지가 바로 이 "나처럼 시간 낭비하지 마라"입니다.
CIU의 진짜 설계는 "학습자가 어떤 경로로 움직이고, 어떤 피드백 루프를 도는가"에 있습니다. 이걸 흐름도로 그리면 다음과 같습니다.
원본 README는 하나의 진실(Single Source of Truth)입니다. 모두가 같은 커리큘럼을 봅니다. 그런데 진행 상태는 개인 포크에 저장되므로, 8만 명이 서로 충돌 없이 각자 진도를 기록할 수 있습니다. 원본을 더럽히지 않으면서 개인화하는 깔끔한 구조죠.
git remote add upstream …으로 원본을 연결해 두고, 원본에 새 자료가 추가되면 git pull upstream main으로 내 포크에 받아오라고 안내합니다. 단, --push upstream DISABLE로 내 진도가 실수로 원본에 올라가는 사고를 막습니다. 비유하면 "교과서 원본은 도서관에 두고, 내 필기는 복사본에만 하되, 교과서 개정판이 나오면 새 내용만 옮겨 적는 것."저자가 가장 강조하는 실수 방지책입니다. 많은 사람이 영상만 잔뜩 보고 "안다고 착각"하지만, 직접 구현하고 문제를 풀지 않으면 면접장에서 무너집니다. 그래서 각 주제마다 "개념을 본 뒤 → 그 자료구조를 직접 코딩하고 → 관련 문제 2~3개를 그때그때 풀어라"를 강제합니다.
저자가 직접 저지른 실수입니다. 몰아서 본 지식은 몇 달 뒤 거의 남지 않았고, 노트 정리에만 3일을 다시 썼습니다. 인풋(보기)과 아웃풋(풀기) 사이 간격이 벌어질수록 망각이 커집니다.
예: 연결 리스트를 배웠다면, 바로 LeetCode에서 연결 리스트 문제 2~3개를 풀고 다음 주제로. 나중에 또 2~3개. "배우면서 동시에 적용"이 핵심입니다. 채용은 지식의 양이 아니라 적용 능력을 봅니다.
CIU는 일부러 대학 CS 커리큘럼의 약 75%만 다룹니다. 면접 통과라는 목표에 필요 없는 건 과감히 "Optional(선택)" 아래로 내려 두죠. README 중간에 ---- 이 아래는 전부 선택 ---- 구분선이 있어, 핵심과 곁가지를 명확히 가릅니다. 끝없는 완벽주의를 막는 장치입니다.
| 경로 | 역할 | 초보자가 볼 곳? |
|---|---|---|
| README.md | 전체 학습 플랜 본체. 목차→이론→자료구조→알고리즘→시스템설계→취업 순 | 여기만 봐도 됨 ✅ |
| translations/ | 모국어로 편하게 보고 싶을 때. 단 번역본은 원본보다 늦게 갱신될 수 있음 | 영어가 부담되면 ✅ |
| extras/cheat sheets/ | 시험 직전 빠르게 훑는 요약표 | 복습 단계에서 ✅ |
| .github/workflows/ | 저장소 유지보수 자동화(GitHub Actions). 학습 내용 아님 | 몰라도 됨 ⏭️ |
이 저장소는 "책 한 권 + 번역본 17종 + 부록 치트시트"로 된 출판물 같습니다. 코드 폴더가 주인공인 보통의 GitHub 레포와 정반대로, 여기선 문서(README)가 주인공이고 코드는 외부 연습 저장소(practice-*)로 분리돼 있습니다.
모든 프로그램은 데이터를 어딘가에 담습니다. 배열은 칸이 정해진 사물함, 연결 리스트는 손을 잡고 늘어선 사람들, 해시테이블은 이름표로 즉시 찾는 사물함입니다. 각각 "빠른 작업/느린 작업"이 다릅니다.
실습 아이디어: 언어 내장 자료구조를 쓰지 말고, 동적 배열(자동으로 늘어나는 배열)을 직접 구현해 보세요. add, remove, resize를 만들어 보면 "내부에서 무슨 일이 벌어지는지" 감이 옵니다.
폴더 안의 폴더(트리), 친구의 친구(그래프)처럼 "계층·연결"을 다루는 구조입니다. 면접 단골이며, BFS(너비 우선)·DFS(깊이 우선) 순회는 거의 반드시 나옵니다.
실습 아이디어: 이진탐색트리에 숫자를 넣고 빼는 코드를 짠 뒤, 같은 트리를 전위·중위·후위·레벨 순서로 출력해 보세요. "순회 순서"가 왜 중요한지 체감됩니다.
퀵정렬·병합정렬을 직접 구현하고, 재귀(자기 자신을 부르는 함수)로 사고하는 법을 익힙니다. 동적계획법(DP)은 "큰 문제를 작은 문제로 쪼개 답을 재활용"하는 기법으로, 가장 어렵지만 가장 자주 나옵니다.
"수백만 명이 쓰는 트위터를 설계해 보라" 같은 문제에 답하는 영역입니다. 자료구조/알고리즘이 "한 대의 컴퓨터 안"이라면, 시스템 설계는 "수천 대의 컴퓨터를 어떻게 엮나"입니다. 신입에겐 선택, 경력엔 필수입니다.
실습 아이디어: 종이에 "URL 단축기(bit.ly)"를 설계해 보세요. 데이터베이스, 캐시, 고유 키 생성 방식을 그림으로 그려 보면 시스템 설계 면접의 감을 잡을 수 있습니다.
| 요구사항 | 내용 |
|---|---|
| 사전 지식 | 변수·반복문·함수 정도의 최소한의 코딩 경험 |
| 시간 | 수개월(저자는 8개월 풀타임 — 단, "너희는 이만큼 안 해도 된다"). 직장 병행 시 더 김 |
| 언어 | 학습용으로 C(메모리·포인터 감 잡기) + 파이썬(빠른 작성) 추천. 면접용은 C++·자바·파이썬 |
| 도구 | Git/GitHub 계정, 코드 에디터, Anki(무료, iOS만 유료 $25), 화이트보드 or 큰 스케치북 |
| 문제풀이 사이트 | LeetCode(저자 최애, 1~2개월 구독 가치 있음), HackerRank, Codeforces 등 |
저자는 면접에서 컴퓨터가 아니라 화이트보드·종이에 손으로 코딩하게 된다는 점을 강조합니다. 그래서 집에 큰 스케치북을 두고 연필+지우개로 연습하라고 하죠(펜은 못 지워서 금방 지저분해진다며). 키보드 없이 "말하면서 손으로 푸는" 연습이 실제 면접과 가장 가깝기 때문입니다.
CIU를 Fork → 로컬에 clone → "Big-O" 챕터의 영상 1개를 보고 노트 정리 → 해당 항목을 - [x]로 바꿔 커밋. Git 워크플로와 학습 추적을 동시에 체험하는 게 목표입니다.
좋아하는 언어로 "자동으로 크기가 늘어나는 배열"을 밑바닥부터 구현. 가득 차면 2배로 늘리는 resize를 넣고, 왜 평균적으로 O(1) 추가가 가능한지 주석으로 설명해 보세요.
Anki를 깔고 "자료구조 10장"짜리 카드를 직접 만든 뒤, 매일 복습. 동시에 연결 리스트·스택·큐 주제마다 LeetCode Easy 문제 2~3개를 풀어 "배우며 적용" 루프를 한 주간 돌려 보세요.
선택·삽입·병합·퀵 정렬을 직접 구현하고, 1만·10만 개 난수로 실행 시간을 측정해 표로 비교. Big-O 이론(O(n²) vs O(n log n))이 실제 시간으로 어떻게 나타나는지 눈으로 확인합니다.
화이트보드/종이에 bit.ly 같은 URL 단축 서비스를 설계. 고유 키 생성, 데이터베이스 스키마, 캐시 계층, 초당 수천 요청 처리 방안을 그림과 말로 설명해 보세요. 가능하면 친구에게 5분간 발표하듯 "말로 푸는" 연습까지.
| 주차 | 주제 | 목표 |
|---|---|---|
| 1주 | Big-O · 점근 분석 | 시간/공간 복잡도를 말로 설명할 수 있기 |
| 2~3주 | 배열 · 연결 리스트 · 스택 · 큐 | 각 구조 직접 구현 + Easy 문제 각 3개 |
| 4주 | 해시테이블 · 이진탐색 · 비트 연산 | 해시 충돌 처리 이해, 비트 트릭 익히기 |
| 5~6주 | 트리 · 이진탐색트리 · 힙 | BFS/DFS 순회 구현, 우선순위 큐 이해 |
| 7주 | 정렬 (병합·퀵·힙) | 4종 직접 구현 + 성능 비교 표 |
| 8~9주 | 그래프 (순회 · 최단경로) | 인접 리스트/행렬, BFS/DFS로 문제 풀이 |
| 10주 | 재귀 · 동적계획법(DP) | DP Easy~Medium 문제로 "쪼개기" 사고 훈련 |
| 11주 | OS 기초 · 캐시 · 네트워킹 · 시스템 설계 맛보기 | 프로세스/스레드, 캐시 개념, 설계 1문제 |
| 12주 | Final Review · 모의 면접 · 이력서 | 치트시트 복습, 화이트보드 모의면접, 지원 |
하루 1~2시간이라도 매일이 몰아서 주말 8시간보다 낫습니다(간격 반복 효과). 그리고 어떤 주차든 그 주제의 코딩 문제를 손에서 놓지 마세요. 이론만 진도 빼는 건 CIU 저자가 가장 후회한 실수입니다.
| 용어 | 뜻 |
|---|---|
| 자료구조 | 데이터를 메모리에 저장·조직하는 방식(배열·리스트·트리 등). "데이터를 담는 그릇" |
| 알고리즘 | 문제를 푸는 단계적 절차. "그릇에 담은 데이터를 다루는 레시피" |
| Big-O | 데이터가 늘 때 알고리즘이 느려지는 정도를 나타내는 표기(예: O(n), O(log n)) |
| BFS / DFS | 너비 우선/깊이 우선 탐색. 트리·그래프를 훑는 두 가지 순서 |
| 재귀(Recursion) | 함수가 자기 자신을 호출해 문제를 작게 줄여 가는 기법 |
| 동적계획법(DP) | 작은 문제의 답을 저장·재활용해 중복 계산을 없애는 최적화 기법 |
| 시스템 설계 | 대규모 서비스를 여러 서버·DB·캐시로 어떻게 구성할지 설계하는 영역 |
| Fork | 남의 GitHub 저장소를 내 계정으로 통째 복제. CIU는 진도 기록용으로 사용 |
| Task list | Markdown - [ ] 문법으로 만드는 체크박스 목록. 진행률 추적용 |
| Anki / 간격 반복 | 잊을 때쯤 다시 보여 주는 플래시카드 복습 방식. 장기 기억 형성 |
| LeetCode | 코딩 면접 문제 연습 사이트. 저자가 가장 추천하는 문제 풀이 플랫폼 |
| MOOC | Coursera·edX 같은 온라인 공개 강좌. CIU가 링크로 많이 참조 |
| CC-BY-SA-4.0 | 출처 표시 + 동일 조건 공유 시 자유 이용 가능한 콘텐츠 라이선스 |