컴퓨터공학을 처음부터 다시 정리해 보기로 했다. 목표는 두 가지다. 쓰는 사람과 읽는 사람이 같이 공부가 될 것, 그리고 다 쓰고 나면 책 원고로 묶을 수 있을 것. 그래서 주제 하나에 글 하나, 모두 300편을 쓴다. 이 글은 그 300편의 지도다. 앞으로 올라오는 글은 모두 아래 번호를 단다.

분류 기준

주제를 혼자 고르면 좋아하는 쪽으로 기운다. 그래서 뼈대는 ACM·IEEE-CS·AAAI 가 함께 낸 컴퓨터공학 교육과정 권고안 CS2023의 지식 영역(Knowledge Areas) 17개에서 가져왔다. 알고리즘 기초(AL), 컴퓨터 구조(AR), 인공지능(AI), 데이터 관리(DM), 프로그래밍 언어 기초(FPL), 그래픽스(GIT), HCI, 수학·통계 기초(MSF), 네트워크(NC), 운영체제(OS), 병렬·분산(PDC), 보안(SEC), 사회·윤리·직업(SEP), 소프트웨어 개발 기초(SDF), 소프트웨어 공학(SE), 특화 플랫폼 개발(SPD), 시스템 기초(SF)다.

여기에 두 가지를 조정했다.

  • 자료구조를 따로 뺐다. CS2023 에서는 알고리즘 영역 안에 있지만, 공부하는 순서로는 독립된 한 덩어리가 낫다.
  • 클라우드·DevOps 를 더했다. 교육과정의 중심은 아니지만, 지금 현업에서 코드를 “돌아가게” 만드는 일의 큰 몫이다. 우리 홈랩 k3s 클러스터에서 실제로 겪은 일을 예제로 쓸 수 있는 분야이기도 하다.

그 결과 15개 분야 × 20개 주제 = 300개가 됐다.

한눈에 보기

파트 분야 CS2023 대응 번호
1 수학적 기초 MSF 001–020
2 프로그래밍 기초와 언어 SDF·FPL 021–040
3 자료구조 AL 041–060
4 알고리즘 AL 061–080
5 컴퓨터 구조 AR 081–100
6 운영체제 OS 101–120
7 시스템과 병렬·분산 컴퓨팅 SF·PDC 121–140
8 네트워크 NC 141–160
9 데이터베이스 DM 161–180
10 소프트웨어 공학 SE 181–200
11 웹·모바일 플랫폼 개발 SPD 201–220
12 클라우드·DevOps·인프라 (실무) 221–240
13 보안 SEC 241–260
14 인공지능과 머신러닝 AI 261–280
15 그래픽스·HCI·사회와 윤리 GIT·HCI·SEP 281–300

공부 순서 추천

번호 순서대로 읽을 필요는 없다. 다만 앞 파트가 뒤 파트의 언어가 되는 경우가 많아서, 처음이라면 이 순서를 권한다.

  1. 2 → 3 → 4 (언어, 자료구조, 알고리즘). 모든 것의 바닥이다.
  2. 5 → 6 → 8 (구조, 운영체제, 네트워크). “컴퓨터가 실제로 어떻게 도는가”.
  3. 9 → 10 (데이터베이스, 소프트웨어 공학). 팀으로 서비스를 만드는 단계.
  4. 7 → 12 → 13 (분산, 클라우드, 보안). 운영과 장애의 세계.
  5. 14 (인공지능). 앞의 거의 모든 것을 재료로 쓴다.
  6. 1 과 15는 필요할 때마다 돌아온다. 수학은 막힐 때, 사람과 윤리는 기술이 사람을 만날 때.

Part 1. 수학적 기초

증명과 논리가 없으면 알고리즘 분석도, 암호도, 머신러닝도 “외운 것”에 머문다. (CS2023: MSF)

번호 주제
001 명제 논리와 진리표
002 술어 논리와 한정자
003 증명 기법 — 직접·대우·귀류
004 수학적 귀납법과 강한 귀납법
005 집합·관계·함수
006 동치 관계와 부분 순서
007 경우의 수 — 순열·조합·비둘기집 원리
008 점화식과 그 풀이
009 그래프 이론 기초 — 용어와 표현
010 트리의 성질과 증명
011 정수론 기초 — 나머지 연산과 최대공약수
012 모듈러 역원과 페르마 소정리
013 확률 기초 — 조건부 확률과 베이즈 정리
014 확률변수·기댓값·분산
015 주요 확률분포 — 이항·포아송·정규
016 통계적 추정과 가설 검정
017 선형대수 1 — 벡터·행렬·연립방정식
018 선형대수 2 — 고유값·고유벡터·특이값 분해
019 미분과 경사하강법의 수학
020 정보이론 — 엔트로피와 부호화

Part 2. 프로그래밍 기초와 언어

한 언어를 깊게, 여러 패러다임을 넓게. (CS2023: SDF·FPL)

번호 주제
021 변수·타입·표현식 — 컴퓨터가 값을 다루는 방식
022 제어 흐름과 반복문
023 함수·스코프·클로저
024 재귀적으로 생각하기
025 값 전달과 참조 전달
026 정적 타입과 동적 타입
027 메모리 모델 — 스택과 힙
028 가비지 컬렉션의 원리
029 객체지향 1 — 캡슐화와 추상화
030 객체지향 2 — 상속·다형성·합성
031 함수형 프로그래밍 — 불변성과 순수 함수
032 고차 함수·map·filter·reduce
033 제네릭과 타입 매개변수
034 예외 처리와 오류 설계
035 비동기 프로그래밍 — 콜백·프라미스·async/await
036 인터프리터와 컴파일러의 차이
037 어휘 분석과 구문 분석
038 타입 시스템과 타입 추론
039 JVM 과 바이트코드
040 Rust 의 소유권과 빌림

Part 3. 자료구조

문제를 푸는 속도는 대개 데이터를 어떻게 담느냐에서 정해진다. (CS2023: AL)

번호 주제
041 배열과 동적 배열
042 연결 리스트
043 스택
044 큐와 원형 큐
045 덱
046 해시 테이블과 충돌 해결
047 이진 탐색 트리
048 AVL 트리
049 레드블랙 트리
050 B-트리와 B+트리
051 힙과 우선순위 큐
052 트라이
053 그래프 표현 — 인접 행렬과 인접 리스트
054 분리 집합 (Union-Find)
055 세그먼트 트리
056 펜윅 트리
057 스킵 리스트
058 블룸 필터
059 LRU 캐시 구현
060 영속 자료구조

Part 4. 알고리즘

외우는 게 아니라 “왜 이 시간 안에 끝나는가”를 설명할 수 있어야 한다. (CS2023: AL)

번호 주제
061 점근 표기법 — 빅오·빅오메가·빅세타
062 시간 복잡도 분석 연습
063 분할 상환 분석
064 버블·선택·삽입 정렬
065 병합 정렬
066 퀵 정렬과 피벗 선택
067 계수·기수 정렬
068 이진 탐색과 그 변형
069 투 포인터와 슬라이딩 윈도
070 분할 정복
071 탐욕 알고리즘
072 동적 계획법 1 — 메모이제이션과 테이블
073 동적 계획법 2 — 배낭 문제와 최장 공통 부분수열
074 BFS 와 DFS
075 최단 경로 — 다익스트라
076 최단 경로 — 벨만포드와 플로이드워셜
077 최소 신장 트리 — 크루스칼과 프림
078 위상 정렬
079 문자열 탐색 — KMP
080 P·NP·NP-완전

Part 5. 컴퓨터 구조

코드가 실제로 도는 기계를 알면 성능 문제의 절반이 보인다. (CS2023: AR)

번호 주제
081 2진수·16진수와 정수 표현
082 2의 보수와 오버플로
083 부동소수점 IEEE 754
084 논리 게이트와 불 대수
085 조합 회로와 순차 회로
086 폰 노이만 구조
087 명령어 집합 구조 — RISC 와 CISC
088 어셈블리 언어 맛보기
089 CPU 데이터패스와 제어 장치
090 파이프라이닝
091 해저드와 분기 예측
092 메모리 계층 구조
093 캐시 — 사상 방식과 교체 정책
094 캐시 일관성
095 가상 메모리와 TLB
096 입출력과 인터럽트
097 DMA
098 멀티코어와 SIMD
099 GPU 구조
100 성능 측정 — CPI 와 암달의 법칙

Part 6. 운영체제

모든 프로그램이 기대는 계층. 서버 장애의 언어가 여기서 나온다. (CS2023: OS)

번호 주제
101 운영체제의 역할과 커널
102 시스템 콜
103 프로세스와 프로세스 상태
104 스레드와 멀티스레딩
105 CPU 스케줄링 알고리즘
106 컨텍스트 스위칭
107 경쟁 상태와 임계 구역
108 뮤텍스·세마포어·모니터
109 교착 상태 — 조건과 회피
110 페이징
111 세그멘테이션
112 페이지 교체 알고리즘
113 스래싱과 워킹 셋
114 파일 시스템 구조
115 아이노드와 디렉터리
116 디스크 스케줄링과 SSD
117 저널링 파일 시스템
118 리눅스 부팅 과정
119 cgroup 과 네임스페이스
120 가상화 — 하이퍼바이저와 컨테이너

Part 7. 시스템과 병렬·분산 컴퓨팅

한 대에서 여러 대로 넘어가는 순간 문제의 종류가 바뀐다. (CS2023: SF·PDC)

번호 주제
121 리눅스 셸과 파이프
122 프로세스 간 통신 — 파이프·공유 메모리·소켓
123 시그널
124 동시성과 병렬성의 차이
125 스레드 풀과 작업 큐
126 락 없는 자료구조와 CAS
127 메모리 가시성과 메모리 모델
128 이벤트 루프와 논블로킹 I/O
129 분산 시스템의 8가지 오해
130 CAP 정리와 PACELC
131 일관성 모델 — 강한 일관성과 최종 일관성
132 논리 시계와 벡터 시계
133 리더 선출
134 합의 알고리즘 — Raft
135 복제 전략
136 샤딩과 파티셔닝
137 분산 트랜잭션과 2PC·사가
138 멱등성과 재시도
139 장애 감지와 하트비트
140 MapReduce 와 분산 데이터 처리

Part 8. 네트워크

장애 보고의 “타임아웃”이 정확히 어디서 났는지 말할 수 있어야 한다. (CS2023: NC)

번호 주제
141 OSI 7계층과 TCP/IP 4계층
142 물리 계층과 이더넷
143 MAC 주소와 ARP
144 IP 주소와 서브넷
145 라우팅 기초
146 NAT
147 TCP 연결 수립과 종료
148 TCP 흐름 제어와 혼잡 제어
149 UDP
150 소켓 프로그래밍
151 DNS 동작 원리
152 HTTP/1.1
153 HTTP/2 와 HTTP/3
154 TLS 핸드셰이크
155 웹소켓
156 CDN
157 로드 밸런싱 — L4 와 L7
158 VPN 과 터널링
159 네트워크 디버깅 도구 — ping·traceroute·tcpdump
160 쿠버네티스 네트워킹 — Service·Ingress·CNI

Part 9. 데이터베이스

데이터가 회사의 자산이라면 DB 는 그 금고다. (CS2023: DM)

번호 주제
161 관계형 모델
162 SQL 기초 — SELECT 부터 JOIN 까지
163 집계·서브쿼리·윈도 함수
164 ER 모델링
165 정규화
166 반정규화와 그 대가
167 인덱스와 B+트리
168 실행 계획 읽기
169 트랜잭션과 ACID
170 격리 수준과 이상 현상
171 MVCC
172 락과 교착 상태
173 WAL 과 복구
174 복제 — 프라이머리와 레플리카
175 NoSQL 분류 — 키값·문서·컬럼·그래프
176 Redis 와 캐시 전략
177 검색 엔진과 역색인
178 데이터 웨어하우스와 OLAP
179 스키마 마이그레이션
180 벡터 데이터베이스

Part 10. 소프트웨어 공학

혼자 짜는 코드와 팀이 고치는 코드는 다른 기술을 요구한다. (CS2023: SE)

번호 주제
181 소프트웨어 개발 생명주기
182 애자일과 스크럼
183 요구사항 분석
184 UML 기초
185 SOLID 원칙
186 디자인 패턴 1 — 생성 패턴
187 디자인 패턴 2 — 구조 패턴
188 디자인 패턴 3 — 행위 패턴
189 클린 코드와 리팩터링
190 코드 리뷰
191 단위 테스트
192 통합 테스트와 E2E 테스트
193 테스트 주도 개발
194 Git 기초
195 Git 브랜치 전략
196 CI/CD
197 레이어드 아키텍처
198 도메인 주도 설계
199 마이크로서비스와 모놀리스
200 기술 부채

Part 11. 웹·모바일 플랫폼 개발

사용자가 실제로 만나는 곳. (CS2023: SPD)

번호 주제
201 웹 브라우저 렌더링 과정
202 HTML 시맨틱
203 CSS 레이아웃 — Flexbox 와 Grid
204 자바스크립트 이벤트 루프
205 DOM 과 이벤트
206 프론트엔드 프레임워크의 원리 — 가상 DOM 과 반응성
207 상태 관리
208 REST API 설계
209 GraphQL
210 gRPC
211 인증 — 세션과 토큰
212 OAuth 2.0 과 OpenID Connect
213 웹 성능 최적화
214 접근성(웹 접근성)
215 SSR·CSR·SSG
216 모바일 앱 아키텍처
217 크로스플랫폼 개발
218 PWA
219 임베디드와 IoT 기초
220 MQTT

Part 12. 클라우드·DevOps·인프라

코드를 “돌아가게” 만드는 기술. CS2023 밖이지만 현업 비중이 크다. (CS2023: (실무))

번호 주제
221 클라우드 서비스 모델 — IaaS·PaaS·SaaS
222 리눅스 서버 운영 기초
223 systemd
224 도커 이미지와 컨테이너
225 Dockerfile 작성법
226 쿠버네티스 아키텍처
227 파드·디플로이먼트·서비스
228 쿠버네티스 스토리지
229 헬름
230 GitOps 와 ArgoCD
231 Infrastructure as Code — Terraform
232 모니터링 — Prometheus 와 Grafana
233 로그 수집과 분석
234 분산 추적
235 SLI·SLO·에러 버짓
236 장애 대응과 포스트모템
237 백업과 재해 복구
238 오토스케일링
239 서비스 메시
240 비용 관리 (FinOps)

Part 13. 보안

기능이 맞아도 안전하지 않으면 틀린 코드다. (CS2023: SEC)

번호 주제
241 보안의 3요소 — 기밀성·무결성·가용성
242 위협 모델링
243 대칭키 암호
244 공개키 암호
245 해시 함수와 MAC
246 전자서명과 인증서
247 PKI 와 인증서 체인
248 비밀번호 저장
249 인증과 인가
250 OWASP Top 10 개관
251 SQL 인젝션
252 XSS 와 CSRF
253 접근 통제 실패와 IDOR
254 시큐어 코딩
255 네트워크 보안 — 방화벽·IDS·IPS
256 컨테이너와 쿠버네티스 보안
257 공급망 보안
258 침해 사고 대응
259 보안 로그와 SIEM
260 제로 트러스트

Part 14. 인공지능과 머신러닝

도구로 쓰는 단계에서 원리를 아는 단계로. (CS2023: AI)

번호 주제
261 인공지능의 역사와 분류
262 탐색 — 상태 공간과 휴리스틱
263 지도 학습과 비지도 학습
264 선형 회귀
265 로지스틱 회귀
266 결정 트리와 랜덤 포레스트
267 과적합과 정규화
268 모델 평가 지표
269 신경망 기초 — 퍼셉트론과 역전파
270 합성곱 신경망
271 순환 신경망
272 어텐션과 트랜스포머
273 임베딩
274 대규모 언어 모델의 학습 과정
275 프롬프트 엔지니어링
276 RAG
277 AI 에이전트와 도구 사용
278 강화학습 기초
279 MLOps
280 AI 안전과 평가

Part 15. 그래픽스·HCI·사회와 윤리

기술이 사람과 만나는 경계. (CS2023: GIT·HCI·SEP)

번호 주제
281 컴퓨터 그래픽스 기초 — 래스터와 벡터
282 색 공간
283 3D 변환 행렬
284 렌더링 파이프라인
285 이미지 처리 기초
286 사용자 중심 설계
287 사용성 평가
288 인터페이스 설계 원칙
289 정보 시각화
290 게임 엔진의 구조
291 소프트웨어 라이선스와 오픈소스
292 개인정보 보호와 법
293 AI 윤리
294 알고리즘 편향
295 접근성과 포용
296 기술 문서 작성
297 개발자 커뮤니케이션
298 소프트웨어 장애의 사회적 영향 사례
299 지속 가능한 컴퓨팅
300 개발자로 성장하기

한 편은 어떻게 쓰나

300편이 책이 되려면 모양이 같아야 한다. 각 글은 이 틀을 따른다.

절 내용
한 줄 요약 이 주제를 한 문장으로
왜 필요한가 이걸 모르면 실제로 무엇이 막히는지
핵심 개념 그림·표·짧은 코드로
직접 해 보기 손으로 돌려 볼 수 있는 예제
현업에서는 실제 시스템(가능하면 우리 클러스터)에서 이 개념이 나타나는 곳
확인 문제 3~5개
더 읽을거리 교과서·표준 문서·공식 문서 같은 1차 자료

사실과 수치는 1차·공식 출처를 링크한다. 확인하지 못한 수치는 쓰지 않는다.

진행

  • 글은 번호 순서가 아니라 파트를 돌아가며 올린다. 한 분야만 연달아 나오면 읽는 사람이 지친다.
  • 올라간 글은 이 지도에서 해당 번호에 링크를 단다. 이 글이 곧 시리즈 목차이고, 나중에 책의 목차가 된다.
  • 주제 목록은 쓰면서 바뀔 수 있다. 합치거나 나누면 이 글에 기록한다.

References