coredot.today
MIT Missing Semester 완전 가이드 — CS 교육이 빠뜨린 '진짜 실력'
블로그로 돌아가기
MITMissing SemesterGitVim터미널개발자 도구CS 교육

MIT Missing Semester 완전 가이드 — CS 교육이 빠뜨린 '진짜 실력'

MIT가 만든 전설의 무료 강의 'The Missing Semester'를 완전 해부한다. 왜 세계 최고의 CS 학생들도 터미널 앞에서 헤매는가? 1969년 Unix 쉘부터 2026년 AI 코딩 에이전트까지, CS 교육이 빼먹은 '진짜 실력'의 모든 것.

코어닷투데이2026-03-2732

들어가며: 4년간 배우지 못한 것

컴퓨터공학과 4학년 학생이 있다. 운영체제를 배웠고, 알고리즘을 풀었고, 분산 시스템 논문도 읽었다. 그런데 이 학생에게 이런 질문을 던지면:

  • "이 프로젝트의 로그 파일에서 가장 많이 발생한 에러 TOP 5를 뽑아줘"
  • "지난주 커밋에서 실수로 삭제된 함수를 복구해줘"
  • "서버에서 8080 포트를 잡고 있는 프로세스를 찾아서 죽여줘"

…반 이상이 구글을 열어 검색부터 한다.

이것은 그 학생이 멍청해서가 아니다. 아무도 가르쳐주지 않았기 때문이다.

개발자 도구 상자를 처음 열어보는 순간

2020년, MIT의 세 명의 대학원생이 이 문제를 정면으로 해결하기로 했다. Anish Athalye, Jon Gjengset, Jose Javier Gonzalez Ortiz — 이들은 MIT에서 조교를 하면서 반복적으로 같은 현상을 목격했다:

"학생들은 커리어 내내 수천 시간 동안 이 도구들을 사용하게 된다. 그런데 이걸 제대로 가르치는 수업이 단 하나도 없었다."

그래서 그들은 MIT의 1월 독립 활동 기간(IAP)에 11개 강의, 무료, 전 세계 공개 수업을 만들었다. 이름은:

The Missing Semester of Your CS Education — CS 교육이 빠뜨린 한 학기

이 강의는 공개 직후 Hacker News, Reddit을 휩쓸었고, 17개 언어로 번역되었으며, 2026년 현재까지 매년 업데이트되며 수백만 명이 수강한 전설적인 강의가 되었다. 이 글에서는 왜 이런 강의가 필요했는지, 무엇을 가르치는지, 그리고 2026년 AI 시대에 이 도구들이 왜 더 중요해졌는지를 완전 해부한다.


제1장: 왜 이걸 아무도 안 가르쳤을까?

CS 교육의 구조적 빈틈

대학 컴퓨터공학 커리큘럼을 살펴보자:

가르치는 것 ✅안 가르치는 것 ❌
알고리즘과 자료구조쉘(Shell)과 터미널 사용법
운영체제 이론실제 OS를 다루는 명령어
소프트웨어 공학 원칙Git 버전 관리 실전
프로그래밍 언어론텍스트 에디터 (Vim/Emacs) 활용
네트워크 프로토콜SSH, 원격 서버 관리
데이터베이스 설계커맨드라인 데이터 가공

오른쪽 열이 바로 Missing Semester가 채우는 빈칸이다.

이런 상황이 생긴 이유는 간단하다. 학계에서는 이것들을 "도구(tools)"로 분류하고, 도구는 "필요하면 알아서 배우는 것"이라고 생각했다. 마치 목수 학교에서 나무의 물리학은 가르치지만 망치 쓰는 법은 가르치지 않는 것과 같다.

실제로 벌어지는 일들

Missing Semester 강사들이 MIT에서 목격한 실제 상황들:

😱
반복되는 참사들
① 파일 날림: Git을 몰라서 rm -rf로 프로젝트를 날리고, 과제를 처음부터 다시 작성
② 3시간짜리 작업을 30초에: 수백 개 파일의 변수명을 하나씩 수동으로 바꾸다가 밤을 새움 (sed 한 줄이면 끝)
③ 비밀번호 유출: .env 파일을 git에 올려서 API 키가 공개 저장소에 노출
④ 디버깅 지옥: print문을 100개 넣는 대신, 디버거나 프로파일러를 쓰면 5분이면 해결

"컴퓨터는 수작업을 자동화하기 위해 만들어졌다. 그런데 학생들은 여전히 수작업으로 반복 작업을 하고 있었다." — Missing Semester 소개 페이지


제2장: 쉘(Shell) — 컴퓨터와 대화하는 진짜 언어

1969년 — 모든 것의 시작

Missing Semester의 첫 번째 강의는 쉘(Shell)이다. 왜 쉘부터 시작할까? 쉘의 역사를 알면 이해가 된다.

1969년, AT&T 벨 연구소에서 켄 톰프슨(Ken Thompson)데니스 리치(Dennis Ritchie)Unix를 만들었다. 이때 같이 탄생한 것이 Thompson shell — 최초의 Unix 쉘이다.

쉘의 핵심 철학은 단순했다:

"한 가지 일을 잘하는 작은 프로그램들을 만들고, 이것들을 파이프로 연결한다."

이 Unix 철학은 55년이 지난 2026년에도 살아 있다. grep으로 검색하고, sort로 정렬하고, uniq로 중복을 제거하고, head로 상위 N개만 뽑는다 — 이 작은 도구들을 파이프(|)로 연결하면, 수십 줄의 Python 코드가 필요한 작업을 한 줄로 끝낼 수 있다.

쉘 마법사 — 명령어로 마법을 부리는 개발자

실전 예시: "이 서버 로그에서 가장 많이 실패한 API 엔드포인트는?"

상황: 100만 줄짜리 access.log 파일에서 HTTP 500 에러가 가장 많이 발생한 엔드포인트 TOP 5를 찾아야 한다.

Python으로 하면:

hljs language-python
from collections import Counter

errors = Counter()
with open("access.log") as f:
    for line in f:
        parts = line.split()
        if len(parts) > 8 and parts[8] == "500":
            errors[parts[6]] += 1

for endpoint, count in errors.most_common(5):
    print(f"{count:>6} {endpoint}")

쉘 한 줄로 하면:

hljs language-bash
awk '$9 == 500 {print $7}' access.log | sort | uniq -c | sort -rn | head -5

결과는 같다. 하지만 쉘 명령은 파일을 만들 필요도, 실행 환경을 셋팅할 필요도 없다. 터미널에서 바로 치면 된다.

Missing Semester가 가르치는 쉘 핵심 개념

기초
탐색과 조작 — pwd, cd, ls, mv, cp, mkdir, rm. 파일 시스템의 지도를 읽는 법
중급
리다이렉션과 파이프 — >, >>, <, | . 프로그램의 입출력을 연결하는 배관공 스킬
중급
권한과 sudo — rwx 퍼미션, root 접근. 시스템 보안의 기초
고급
셸 스크립팅 — 변수, 조건문, 반복문, 특수 변수($?, $@, !!). 자동화의 시작
고급
검색 도구 — find, grep, ripgrep, fzf. 수만 개 파일에서 원하는 것을 순식간에 찾기

알아두면 인생이 바뀌는 쉘 특수 변수들

💎 쉘 특수 변수 치트시트
$? — 직전 명령의 종료 코드 (0이면 성공)
$! — 마지막 백그라운드 프로세스의 PID
!! — 직전 명령 전체 (sudo !! 로 권한 재실행!)
$@ — 스크립트에 전달된 모든 인자
$# — 인자의 개수
$$ — 현재 스크립트의 PID

특히 !!(bang-bang)은 실무에서 가장 많이 쓰이는 트릭이다. 명령을 실행했는데 "Permission denied"가 뜨면? sudo !! 한 방이면 직전 명령을 관리자 권한으로 다시 실행한다.


제3장: Vim — "왜 이 에디터에서 못 나가죠?"

세계에서 가장 유명한 밈

프로그래머 세계에서 가장 오래된 밈 중 하나:

"Vim에 들어갔는데 나올 수가 없어요"

Stack Overflow에서 "How to exit Vim"이라는 질문은 수백만 회 조회되었다. 실제로 2017년 Stack Overflow 블로그에 따르면, 이 질문은 역대 가장 많이 조회된 질문 중 하나다.

왜 이런 일이 벌어질까? Vim은 모달 에디터(modal editor)이기 때문이다. 일반 에디터(VS Code, 메모장)에서는 키보드를 누르면 글자가 입력되지만, Vim에서는 모드에 따라 같은 키가 완전히 다른 동작을 한다.

Vim 마스터와 초보자의 차이

Vim의 핵심 철학: "프로그래머는 쓰는 것보다 읽고 편집하는 데 더 많은 시간을 쓴다"

Missing Semester가 Vim을 가르치는 이유는 깊은 통찰에 기반한다:

"프로그래머는 긴 글을 처음부터 쓰는 것이 아니라, 기존 코드를 읽고, 탐색하고, 수정하는 데 대부분의 시간을 쓴다."

일반 에디터는 "타이핑"에 최적화되어 있다. Vim은 "편집"에 최적화되어 있다. 차이가 뭘까?

🐌
일반 에디터에서 변수명 바꾸기
마우스로 단어 더블클릭 → Ctrl+H → 검색어 입력 → 대체어 입력 → "모두 바꾸기" 클릭 → 확인
손이 키보드와 마우스를 왔다갔다. 5단계, 약 10초.
Vim에서 변수명 바꾸기
:%s/oldName/newName/g — 끝.
손은 키보드에서 떠나지 않는다. 1단계, 약 3초.

Vim의 5가지 모드

모드진입 키역할비유
NormalEsc이동, 삭제, 복사지휘관 — 명령을 내림
Inserti텍스트 입력타이피스트 — 글을 씀
Visualv텍스트 선택형광펜 — 영역을 표시
ReplaceR덮어쓰기수정 테이프 — 기존 글을 대체
Command:파일 저장, 종료 등메뉴 — 설정을 변경

Vim은 프로그래밍 언어다

Missing Semester가 강조하는 Vim의 가장 강력한 특성 — Vim의 키 조합은 프로그래밍 언어처럼 합성(composable)된다:

  • 동사: d(삭제), c(변경), y(복사)
  • 명사/이동: w(단어), $(줄 끝), gg(파일 처음)
  • 수식어: i(안쪽), a(바깥쪽)

이것들을 조합하면:

🎹 Vim 조합의 예술
dw — 단어 하나 삭제 (delete + word)
d$ — 줄 끝까지 삭제 (delete + end-of-line)
ci" — 따옴표 안의 내용을 변경 (change + inner + ")
da( — 괄호를 포함해서 삭제 (delete + around + ()
3dd — 3줄 삭제 (3 + delete + line)
ggVGd — 파일 전체 선택 후 삭제 (파일처음 + Visual Line + 파일끝 + delete)

새로운 동사나 명사를 배울 때마다, 가능한 조합이 곱셈으로 늘어난다. 동사 5개 × 명사 10개 = 50가지 편집 명령이 자동으로 생긴다. 이것이 Vim 숙련자가 마치 마법처럼 빠르게 코드를 편집하는 비결이다.

참고: 2026년에는 VS Code의 Vim 확장(vscodevim), Neovim, JetBrains의 IdeaVim 등으로 Vim의 편집 철학을 모든 에디터에서 쓸 수 있다. 풀 Vim을 쓸 필요 없이, 키 바인딩만 가져오는 것도 강력한 생산성 향상이 된다.


제4장: Git — 시간 여행 기계

"코드를 날려 본 적 없는 개발자는 없다"

학생 시절 이런 경험이 있을 것이다:

프로젝트_최종.zip
프로젝트_최종_수정.zip
프로젝트_최종_진짜최종.zip
프로젝트_최종_진짜최종_v2.zip
프로젝트_최종_이걸로제출.zip

이것은 웃긴 밈이 아니라 버전 관리 시스템 없이 살아가는 사람들의 현실이다.

Git — 타임라인을 관리하는 로봇

Missing Semester의 Git 강의가 특별한 이유

대부분의 Git 튜토리얼은 이렇게 시작한다: "git init을 치세요, git add를 치세요, git commit을 치세요." 명령어를 주문(incantation)처럼 외우게 한다.

Missing Semester는 정반대로 접근한다:

"못생긴 인터페이스는 암기해야 한다. 하지만 아름다운 설계는 이해할 수 있다."

그래서 Git의 데이터 모델부터 가르친다. 명령어가 아니라 구조를 먼저 이해시키는 것이다.

Git의 핵심: 3가지 객체

Git의 내부는 놀랍도록 단순한 3가지 객체로 이루어져 있다:

Blob (파일)
파일의 내용을 바이트 배열로 저장
= "이 파일의 스냅샷"
Tree (디렉토리)
이름 → Blob 또는 다른 Tree의 매핑
= "이 폴더의 구조"
Commit (커밋)
부모 커밋 + 메타데이터 + 최상위 Tree
= "이 시점의 전체 프로젝트"

그리고 핵심 통찰:

"모든 Git 명령은 커밋 DAG(방향 비순환 그래프)에 객체를 추가하거나, 레퍼런스를 이동시키는 것이다."

이것을 이해하면:

  • git commit = 새 커밋 객체를 만들고 HEAD를 이동
  • git branch = 새 레퍼런스(포인터)를 생성
  • git merge = 두 갈래를 합치는 새 커밋 생성
  • git rebase = 커밋 체인을 다른 베이스 위에 재구성

명령어를 외우는 대신, "이 명령이 그래프를 어떻게 변형하는가"를 생각하면 된다.

실무에서 자주 쓰는 Git 구원자들

🚑 Git 긴급 구조 키트
실수로 커밋했을 때:
git reset --soft HEAD~1 — 커밋 취소, 변경사항은 유지

"이 버그 언제 들어온 거야?":
git bisect — 이진 탐색으로 버그 도입 커밋을 자동 추적

"이 줄 누가 고쳤어?":
git blame 파일명 — 각 줄의 마지막 수정자 표시

작업 중 급한 일이 생겼을 때:
git stash → 급한 일 처리 → git stash pop — 임시 저장소

제5장: 그 외 Missing Semester 강의들

데이터 가공 (Data Wrangling)

정규표현식(regex), sed, awk, sort, uniq 등을 조합해 원시 데이터를 원하는 형태로 변환하는 기술. CSV, 로그 파일, JSON을 터미널에서 바로 가공한다.

실전 예시: 서버 로그에서 특정 시간대의 접속 패턴 분석

hljs language-bash
grep "2026-03-27" access.log | awk '{print $4}' | cut -d: -f2 | sort | uniq -c | sort -rn

이 한 줄로 "오늘 시간대별 접속 수"를 바로 뽑을 수 있다.

디버깅과 프로파일링

print 디버깅의 한계를 넘어서는 도구들:

  • pdb/gdb — 코드 실행을 한 줄씩 추적하는 디버거
  • strace/dtrace — 시스템 콜 추적 (프로그램이 OS에 뭘 요청하는지)
  • perf/flamegraph — CPU 사용 패턴을 시각화하는 프로파일러
  • valgrind/ASAN — 메모리 누수 탐지

보안과 암호학

  • 해시 함수 — SHA-256으로 파일 무결성 검증
  • SSH 키 관리 — 비밀번호 대신 공개키 인증
  • GPG 서명 — 커밋과 파일에 서명하여 신원 증명
  • 패스워드 매니저 — 1Password, pass 등 실전 사용법

커맨드라인 환경

  • tmux — 터미널 멀티플렉서. 하나의 화면을 여러 창으로 분할
  • dotfiles — .bashrc, .vimrc 등 설정 파일을 Git으로 관리
  • SSH — 원격 서버 접속, 포트 포워딩, config 관리
  • 별칭(alias) — 긴 명령어를 짧게 줄이기

제6장: 직접 테스트해 보자 — 당신의 "Missing Semester" 실력은?

이론은 충분하다. 아래 퀴즈로 당신의 개발자 도구 실력을 테스트해 보자:


제7장: 2026년 — AI 시대에 왜 더 중요한가

"AI가 다 해주는데 터미널을 왜 배워요?"

2026년, GitHub Copilot, Claude Code, Cursor 등 AI 코딩 도구가 일상이 된 시대에 쉘이나 Git을 배울 필요가 있을까? 오히려 더 필요하다. 그 이유:

🤖
AI 시대에 터미널이 더 중요한 3가지 이유
① AI 도구 자체가 터미널 기반이다 — Claude Code, GitHub Copilot CLI, aider 모두 터미널에서 작동한다. 터미널을 모르면 AI 도구를 제대로 활용할 수 없다.

② AI의 출력을 검증하려면 도구를 알아야 한다 — AI가 생성한 코드를 git diff로 확인하고, 테스트를 실행하고, 로그를 분석하는 것은 모두 개발자의 몫이다.

③ 자동화의 레버리지가 곱해진다 — AI가 코드를 생성하고, 쉘 스크립트가 그것을 빌드·테스트·배포하는 파이프라인. 두 레이어의 자동화가 결합되면 생산성은 곱셈이 된다.

Missing Semester 2026년판의 변화

실제로 Missing Semester 2026년 강의는 이런 변화를 반영했다:

  • "Agentic Coding" 강의가 새로 추가 — AI 코딩 에이전트 활용법
  • AI 도구를 별도 강의가 아닌 모든 강의에 통합 — 각 주제에서 AI를 어떻게 활용하는지 함께 다룸
  • "Beyond the Code" 강의 — 코드 너머의 소프트웨어 엔지니어링 (문서화, 오픈소스 기여, 협업)

AI가 코드를 대신 쓰는 시대가 왔지만, 도구의 원리를 이해하는 개발자와 이해하지 못하는 개발자의 격차는 더 벌어지고 있다.


제8장: Missing Semester를 시작하는 법 — 실전 로드맵

추천 학습 순서

Week 1
쉘 기초 — 터미널 열기, 파일 탐색, 기본 명령어(cd, ls, mv, cp, mkdir). 매일 GUI 대신 터미널로 파일 관리해 보기
Week 2
Git 기초 — init, add, commit, push, pull, branch. 개인 프로젝트에 바로 적용. 버전 관리의 자유를 느끼기
Week 3
쉘 스크립팅 + 파이프 — 리다이렉션, 파이프, grep, find. 반복 작업 자동화 시작
Week 4
Vim 기초 — vimtutor 완료 (약 30분), 이후 1주일간 모든 편집을 Vim으로. 초반 느려도 참기
Week 5+
고급 주제 — tmux, SSH, 디버깅, 보안. 필요할 때 하나씩 확장

핵심 리소스

리소스링크특징
Missing Semester 공식 사이트missing.csail.mit.edu강의 노트 + 유튜브 영상 + 연습 문제
한국어 번역공식 사이트에서 링크 제공커뮤니티 번역 (17개 언어)
YouTube 재생 목록2026, 2020, 2019 버전 모두 공개각 강의 약 1시간
OSSU Discord#missing-semester-forum질문·토론 커뮤니티

제9장: 역사 속의 Missing Semester — Unix에서 AI까지

1969
Unix 탄생
쉘의 시작
1976
vi 에디터
Bill Joy, BSD
1991
Vim + Linux
Bram Moolenaar
2005
Git 탄생
Linus Torvalds
2011
GitHub 폭발
오픈소스 혁명
2020
Missing Semester
MIT IAP
2023
AI 코딩 도구
Copilot, ChatGPT
2026
Agentic Coding
AI + 도구의 융합

핵심 인물들

켄 톰프슨 & 데니스 리치 (1969) — Unix와 C 언어를 만들어 현대 컴퓨팅의 기반을 놓았다. 쉘, 파이프, 파일 시스템 등 우리가 쓰는 거의 모든 개발 도구의 조상이다.

빌 조이 (1976) — UC Berkeley에서 vi 에디터를 만들었다. "화면 기반" 편집이라는 혁명적 개념을 도입했다 (그 전에는 한 줄씩 편집하는 ed만 있었다).

브람 무네러 (1991) — vi를 개선한 Vim(Vi IMproved)을 만들었다. 2023년 타계할 때까지 32년간 Vim을 유지보수했다.

리누스 토발즈 (2005) — Linux 커널의 버전 관리를 위해 2주 만에 Git을 만들었다. "기존 도구(BitKeeper)의 라이선스가 취소되어서 화가 나서 만들었다"는 유명한 일화가 있다.

Anish, Jon, Jose (2020) — MIT 대학원생 세 명이 "아무도 가르치지 않는 것"을 가르치는 수업을 만들어, 전 세계 수백만 개발자에게 영향을 주었다.


마치며: 가장 좋은 시작은 지금이다

Missing Semester의 교훈은 기술 그 자체보다 더 깊은 곳에 있다.

"도구를 배우는 것은 시간 투자가 아니라 시간 절약이다."

쉘 명령 하나를 배우는 데 5분이 걸린다. 하지만 그 5분의 투자는 커리어 내내 수천 번 반복될 작업을 매번 몇 초씩 줄여준다. Vim의 ci" 조합을 외우는 데 10초가 걸리지만, 그 10초는 앞으로 수만 번의 편집에서 매번 5초를 아껴준다.

Missing Semester가 특별한 이유는, 이 도구들을 "고급 기술"이 아니라 "기본 소양"으로 가르쳤다는 점이다. 마치 글쓰기에서 타이핑을 배우듯, 프로그래밍에서 도구를 배우는 것은 시작이지 끝이 아니다.

1969년 Unix의 첫 쉘에서 2026년 AI 코딩 에이전트까지 — 도구는 계속 진화했지만, "반복 작업을 자동화하고, 효율적으로 문제를 해결하라"는 핵심 철학은 55년째 변하지 않았다.

터미널을 열자. cd 한 번이면 새로운 세계가 열린다.

🎓 강의 사이트: missing.csail.mit.edu

📺 YouTube 재생 목록: 2026, 2020, 2019 모두 무료 공개

🌏 한국어 번역: 공식 사이트에서 링크 제공

💬 커뮤니티: OSSU Discord (#missing-semester-forum)