“컴퓨터과학은 *세상이 어떻게 작동하는지 설명하고 예측한다”* — 이 한 문장이 컴퓨터과학을 물리학·화학·생물학과 같은 자연과학 의 자리 에 놓는다. 우리가 만든 인공물(컴퓨터) 이지만, 그 인공물에서 *피해 갈 수 없는 법칙 들이 발견되었고, 그 법칙들을 연구하는 것이 컴퓨터과학이다. 자연과학이 *발견된 우주 를 다룬다면 컴퓨터과학은 발명된 우주 안에서 발견된 우주 를 다룬다.

이 글은 컴퓨터과학을 7 분야로각자 다른 질문에 답하는 별개의 과학으로 — 풀어 본다. (1) 계산이론 “무엇이 컴퓨터로 풀 수 있고 풀 수 없나”, (2) 네트워크 “정보를 어떻게 전달할 것인가”, (3) 소프트웨어공학 “정보 처리를 어떻게 *조직 할 것인가”, (4) 알고리즘 *“정보를 어떻게 *처리 할 것인가”, (5) 운영체제 *“하드웨어를 어떻게 추상화하고 자원을 관리할 것인가”, (6) 자료구조 “정보를 어떻게 표현할 것인가”, (7) 프로그래밍언어 “인간의 의도를 컴퓨터가 실행할 수 있는 형태로 어떻게 번역할 것인가”.

7 분야는 독립적으로 발달했지만 결국 서로를 설명하지 않으면 작동하지 않는다. 그 상호 의존 까지가 본 글의 마지막 절.


TL;DR

컴퓨터과학 = 7 개의 별개 질문에 답하는 학문 집합.

분야 답하는 질문 핵심 발견 한국에서 마주친 적 있는 모습
계산이론 무엇이 불가능 한가 정지 문제, P vs NP “AI 가 보안 코드를 완벽하게 검사할 수는 없습니다”
네트워크 전달 의 한계 CAP, Two Generals 카카오톡 데이터센터 화재 (2022-10) 의 본질
소프트웨어공학 조직화 의 비용 Brooks’ Law, Conway 의 법칙 “이번 분기엔 조직 개편 이 있으니 서비스도 쪼개야 한다”
알고리즘 처리 의 효율 NP-hard, 분할 정복 쿠팡 새벽배송 의 배송 경로 최적화 (TSP 의 친척)
운영체제 공유 의 공정성 스케줄링, 가상 메모리 “쿠버네티스 노드 가 한쪽 pod 에 CPU 다 빼앗김
자료구조 표현 의 trade-off 트리·해시·그래프 의 비용 균형 NAVER 자동완성 의 trie, 인스타그램 피드 의 시간 인덱스 + 해시 결합
프로그래밍언어 번역 의 표현력 타입 시스템, 정합성 보장 “Kotlin 으로 마이그레이션 후 NPE 가 사라졌다

모든 7 분야의 공통 깊은 진실: 공짜 점심은 없다. 한 가지를 얻으면 한 가지를 잃는다. trade-off 의 *체계화 가 컴퓨터과학의 본질. 이 관점으로 보면 *7 분야는 각자 다른 차원의 trade-off 를 발견·증명·관리하는 학문이다.

실무 함의: 어느 한 분야만 깊게 안다고 시스템이 작동하지 않는다. production 사고는 늘 7 분야의 *경계 에서 터진다. 데이터베이스가 죽었을 때 — *알고리즘 (인덱스 선택) / 자료구조 (B-tree fragment) / 운영체제 (page fault) / 네트워크 (replica sync) / 소프트웨어공학 (transaction boundary) 중 무엇이 원인인지 구분할 수 있어야 한다. 그래서 얕게 7 + 깊게 1 이 정공.


0. 들어가며 — 컴퓨터과학이 “과학” 인 이유

물리학자는 세상에 *있는 법칙* 을 발견한다. \(F = ma\). \(E = mc^2\). 이미 있는 우주관찰해서 공식으로 압축.

컴퓨터과학자는 우리가 *만든 우주에서 피해 갈 수 없는 법칙* 을 발견한다. 모든 정렬 알고리즘은 비교 기반에선 \(\Omega(n \log n)\) 보다 빠를 수 없다. 분산 시스템은 *일관성·가용성·분할 허용성 셋 다 동시에 못 가진다 (CAP). 어떤 프로그램이 *정지하는지일반적으로 결정 할 수 있는 알고리즘은 존재하지 않는다 (정지 문제). 우리가 만들었지만 *우리가 *바꿀 수 없는 한계* — 이게 컴퓨터과학의 발견이다.

“수학자는 가능성을 다룬다. 자연과학자는 현실을 다룬다. 컴퓨터과학자는 *우리가 만든 현실의 가능성과 한계 를 다룬다*.”

이 정의가 컴퓨터과학을 과학 이라 부를 수 있는 이유. “세상이 어떻게 작동하는지 설명하고 예측한다”세상우리가 만든 디지털 세상일 뿐, 과학의 본질은 같다.


1. 계산이론 — 컴퓨터의 한계를 연구

“It is not yet decided whether life will be terminated by mechanical or by intellectual extinction, but if I had to bet, I would bet on the latter.” — Edsger Dijkstra

1-1. 답하는 질문

“무엇을 컴퓨터로 풀 수 있고, 무엇을 풀 수 없는가? 풀 수 있다면 얼마나 *비싸게 풀어야 하는가?”*

계산이론은 컴퓨터를 만들기도 전에 시작됐다. Alan Turing 의 1936 년 논문 “On Computable Numbers”컴퓨터가 발명되기 9 년 전 — 이 계산 자체의 정의 를 만들었다. 튜링 기계 라는 수학적 추상“무엇이 계산 가능한가”기준 모델이 되었다.

1-2. 두 가지 거대 발견

(A) 정지 문제 (Halting Problem) — 풀 수 없는 문제가 존재한다.

“임의의 프로그램 P 와 입력 X 가 주어졌을 때, P(X) 가 *언젠가 멈출지 영원히 돌지를 항상 정확히 답하는 알고리즘은 존재하지 않는다. *수학적으로 증명 되었다. 이건 “아직 못 찾았다” 가 아니라 “있을 수 없다”.

함의: 모든 정적 분석 도구 — type checker, 보안 분석, 자동 verifier — 근본적으로 불완전. 어떤 비결정적 영역이 남는다. 완벽한 자동화는 *불가능. 인간의 판단이 체계적으로 필요한 자리 가 있다.

(B) P vs NP — 효율적으로 풀 수 있는 문제와 그렇지 않은 문제의 경계.

  • P: 결정적 다항 시간 에 풀리는 문제 (입력 크기의 다항식만큼 시간)
  • NP: 해답이 주어지면 다항 시간 안에 *검증 할 수 있는 문제

세상의 거대한 미스터리: \(P = NP\) 인가, \(P \neq NP\) 인가? 2026 년 현재도 *미해결. 100 만 달러 Clay 상금이 걸려 있다. 대부분의 학자는 \(P \neq NP\)추측하지만 증명 못 했다.

왜 중요한가: NP-complete 문제 (3SAT, TSP, knapsack, graph coloring 등) — 만약 하나라도 다항 시간에 풀리면 모든 NP-complete 문제가 풀린다. 그러면 암호화, 최적화, AI 학습모든 토대순식간에 무의미 해진다.

우리가 *공개키 암호 를 안전하다고 믿는 이유는 \(P \neq NP\) 가 (아마) 사실이라서. *수학적으로 증명되지 않은 가정 위에 인류의 디지털 신뢰가 쌓여 있다.

1-3. 대각선 논법 — 정지 문제 증명의 드라마

Turing 의 증명 방식이 미적이다. 반증을 가정“정지 문제를 해결하는 알고리즘 H 가 존재한다”. 이 H 를 이용해 역설적인 프로그램 D 를 만든다 — “H 가 D(D) 가 멈춘다고 답하면 D 는 영원히 돌고, 멈추지 않는다고 답하면 D 는 즉시 멈춘다”. D(D) 자체를 부른 순간 “멈춘다 → 안 멈춘다 → 멈춘다 → …” 의 무한 모순. 따라서 H 는 존재할 수 없다. Cantor 의 *대각선 논법 (1891) 을 프로그램에 적용 한 우아함. *수학 의 한 도구가 *반세기 후 컴퓨터과학 의 핵심 정리를 낳았다*.

1-4. 실무에서 만나는 모습

“이 문제는 NP-hard 입니다”“포기하라” 가 아니라 “근사 해법(approximation) 또는 휴리스틱으로 가라” 의 신호. 외판원 문제(TSP)는 완전 정답 을 구하면 안 되지만 95% 정확한 답을 1초 안에 구할 수 있다. 실무 알고리즘 설계의 본질은 “이 문제가 P 인가 NP 인가”먼저 판단 하는 것.

또한 분산 시스템의 *FLP impossibility result완전 비동기 시스템에서 *fault-tolerant consensus불가능 하다는 1985 년 정리. 이 *불가능성 위에서 Paxos / Raft 같은 우회 가 만들어졌다. 불가능을 알아야 가능한 우회가 보인다.

📖 입문 한 권: Michael Sipser, Introduction to the Theory of Computation (한국어 번역 있음). 튜링 기계 → 정지 문제 → 복잡도 클래스 의 정공 교과서.

⚠️ 흔한 오해: “양자 컴퓨터 가 NP-hard 를 다항 시간에 풀 것이다”. 사실 — 양자 컴퓨터 (양자튜링기계) 도 *결정 가능 한 문제 의 범위 는 같다. 더 빠르게 풀 수 있는 특수한 NP 문제 가 있지만 (Shor 의 인수분해), NP-complete 문제 의 *일반적 다항 시간 해법 은 양자 도 풀지 못한다는 게 *현재의 추측**. *기계가 바뀌어도 *복잡도 클래스 의 본질 은 그대로*.


2. 네트워크 — 정보를 어떻게 전달할 것인가

“The network is the computer.” — John Gage (Sun Microsystems, 1984)

2-1. 답하는 질문

“두 지점 사이에 *정보신뢰성 있게 / 효율적으로 / 보안 있게 전달하는 방법은 무엇인가?”*

네트워크는 물리논리 가 만나는 분야. 전자기파, 광섬유, 위성 같은 물리 매체 위에 프로토콜 이라는 논리 약속이 쌓인다.

2-2. 거대 발견 3가지

(A) 패킷 스위칭Paul Baran 의 1960 년대 발명. 정보를 작은 조각(패킷) 으로 쪼개 각자 다른 길로 보낸 후 *수신측에서 재조립. 회선 교환(전화) 처럼 전용 통로 가 필요 없다. 부분 장애에 강함 — 한 라우터 죽어도 다른 경로로 우회. 인터넷의 기본 원리.

(B) 계층 모델 (OSI 7 layer / TCP/IP 4 layer)물리 → 데이터링크 → 네트워크 → 전송 → 세션 → 표현 → 응용. 각 계층은 바로 위·아래만 알면 됨. 한 layer 의 변경 (예: 광섬유 → 무선) 이 전체 다시 안 만들어도 됨. 추상화 가 네트워크의 진화 가능성 을 만들었다.

(C) Two Generals Problem완벽한 합의는 비동기 채널에서 불가능. 두 장군이 각자 다른 언덕 에서 동시 공격 을 약속해야 하는데 메시지가 도달했는지 확인 하려면 또 다른 메시지가 필요하고, 그 메시지가 도달했는지 확인하려면… 무한 회귀. 지금 우리가 사용하는 모든 TCP / TLS handshake 가 이 문제의 현실적 우회 (확률적 신뢰).

2-3. 카카오 SK C&C 화재 (2022-10-15) — 한 단일 데이터센터 의 함정

2022 년 10 월 판교 SK C&C 데이터센터 화재로 카카오 의 거의 모든 서비스수십 시간 정지. 표면은 물리적 화재 이지만 컴퓨터과학적 진짜 원인지리적 다중화 (geographic redundancy) 부재. CAP 정리 가 분단 (Partition) 은 불가피 라 말하는데, 그 분단 이 *데이터센터 전체 단위 로 일어날 수 있다* 는 가능성을 충분히 설계에 반영하지 않았다. 이후 모든 한국 기업의 이중 IDC / 멀티 클라우드 전환 의 출발점이 됐다. “분산 시스템 의 가장 비싼 수업료를 한 사회가 함께 냈다”.

2-4. CAP 정리 — 분산 시스템의 3 자 trade-off

Eric Brewer 의 2000 년 추측, 2002 년 정리. 분산 시스템에서:

  • C (Consistency): 모든 노드가 같은 시점에 같은 값을 본다
  • A (Availability): 모든 요청에 언젠가는 응답
  • P (Partition tolerance): 네트워크 단절 이 있어도 시스템이 동작

이 셋 동시에 만족 불가능. P 는 현실 (네트워크는 끊긴다) 이라 선택지 X. 남은 선택은 C vs A:

  • CP 시스템: 일관성 우선, 단절 시 응답 거부 (etcd, ZooKeeper)
  • AP 시스템: 가용성 우선, 단절 시 오래된 데이터 응답 (DynamoDB, Cassandra)

이 trade-off 는 피할 수 없다. “우리 DB 는 CAP 셋 다 만족합니다”수학적으로 불가능 한 주장.

2-5. 실무

  • gRPC 의 retry 정책 — Two Generals 의 현실판. exactly-once 는 거의 불가능, at-least-once + idempotent 가 정공
  • DNS 의 캐시 TTL — CAP 의 AP 선택. 일관성보다 빠른 응답
  • 마이크로서비스의 circuit breaker부분 장애 격리. 한 서비스 다운이 전체 다운으로 번지지 않게

📖 입문 한 권: Martin Kleppmann, Designing Data-Intensive Applications. 분산 시스템 의 실무 백서. 그리고 Computer Networks (Tanenbaum) 가 물리층 부터 응용층 의 정공.

⚠️ 흔한 오해: “HTTP/2 / HTTP/3 가 모든 걸 빠르게 한다”. 사실 — RTT (왕복 시간) 자체광속의 한계. 서울-뉴욕 약 200ms어떤 프로토콜도 이 미만 못 만든다. 프로토콜 개선 = 한 번 의 RTT 안에 더 많이 욱여넣기. 서울 사용자 가 뉴욕 서버 와 통신 한다면 *CDN / edge / 한국 IDC 외에는 답이 없다*.


3. 소프트웨어공학 — 정보를 *처리 한다*

“Adding manpower to a late software project makes it later.” — Fred Brooks (1975)

3-1. 답하는 질문

“여러 사람이 *함께 만드는 복잡한 시스템유지보수 가능한 형태조직 하는 방법은 무엇인가?”*

알고리즘이 한 문제 를 푼다면, 소프트웨어공학은 그 알고리즘 100 개를 어떻게 함께 작동하게 만들고 *5 년 후의 *다른 개발자가 고칠 수 있는 형태로 유지 할까* 를 다룬다. 기술적 문제 보다 사회적·조직적 문제 의 비중이 크다.

3-2. 거대 발견 4 가지

(A) Brooks’ LawFred Brooks 의 1975 년 “The Mythical Man-Month”: “늦은 프로젝트에 사람을 더 투입하면 *더 늦어진다. *추가된 사람을 가르치고 조율하는 비용 > 추가된 사람의 생산성. 인력 ≠ 생산성 이라는 반직관적 진실. 50 년이 지나도 근본적으로 옳다.

(B) Conway’s LawMelvin Conway 의 1967 년: “시스템의 구조는 그것을 만든 조직의 *의사소통 구조 를 반영한다”. *모놀리스 회사는 모놀리스를 만들고, 팀이 N 개로 분리된 회사는 마이크로서비스 N 개를 만든다. 기술 결정 = 조직 결정.

(C) 추상화모든 좋은 소프트웨어의 핵심. 복잡한 것을 *단순한 인터페이스 뒤에 숨김. 함수·클래스·모듈·서비스 가 모두 추상화의 단위. 추상화 잘못하면 누구도 손댈 수 없는 시스템 이 된다. 추상화 잘하면 부분만 바꿔도 전체가 *그대로 작동.

(D) 기술 부채 (Technical Debt)Ward Cunningham 의 1992 년 메타포. 지금 빨리 가려고 *나중에 갚을 약속 으로 코드를 출시. *부채는 *이자가 붙는다 — 시간이 갈수록 수정 비용 증가. 모든 시스템은 기술 부채를 진다. 다만 의식적으로 관리하느냐 무의식적으로 누적하느냐 의 차이.

3-3. 패러다임 진화

  • 구조적 프로그래밍 (1970s) — goto 금지, 순차/분기/반복
  • 객체지향 프로그래밍 (1980s) — 데이터 + 행위 캡슐화
  • 함수형 프로그래밍 (재발견 2010s) — 불변성 + 순수 함수
  • 헥사고날 / 클린 아키텍처 (2010s) — 비즈니스 로직 ↔ 인프라 분리
  • MSA (2015~) — 서비스 단위 독립 배포

각 패러다임은 이전 패러다임의 한계 에 대응해 등장. “OOP 가 절대 정답” 이라 외쳤던 시기 → 상속 폭발 / 의존 지옥 → 함수형 재발견 → 조합 가능성. 역사적 진자.

3-4. OS/360 의 비극 — Brooks 가 책을 쓰게 된 이유

Fred Brooks“The Mythical Man-Month” 를 쓴 건 IBM 에서 OS/360 프로젝트 관리 후. 수백 명이 투입됐는데 늦어질수록 사람을 더 투입Brooks’ Law 의 실시간 발견. 이 책은 “50 년이 지나도 *반드시 다시 읽어야 하는 유일한 컴퓨터 책”* 으로 평가받는다. 기술이 아니라 *인간 협업의 법칙 을 다루기 때문. 우리가 *마이크로서비스 / 모노레포 / DevOps 를 외쳐도 Brooks 가 1975 년에 본 풍경2026 년에도 같은 모양으로 반복 된다.

3-5. 실무

  • 코드 리뷰Brooks’ Law 의 현실판. 새 사람이 기존 코드를 이해하는 비용 측정 도구
  • 모노레포 vs 폴리레포Conway’s Law 의 정면 충돌. 조직 구조 그대로 가는 게 정공
  • ArchUnit / Architecture Tests추상화 경계가 시간에 따라 *침식 되는 걸 컴파일러 수준으로 강제

📖 입문 한 권: Fred Brooks, The Mythical Man-Month. 50 년이 지나도 반드시 읽어야 할 책. 한국어 번역 맨먼스 미신 있음.

⚠️ 흔한 오해: “좋은 코드 = 깔끔한 코드”. 사실 — 좋은 코드 = *6 개월 후의 다른 사람 이 *고칠 수 있는 코드**. 지금 깔끔해 보여도 *추상화 가 너무 깊으면 신입이 못 따라간다. “가독성 = 평균 독자 수준” — *너무 똑똑한 코드 는 *부채. 단순 함 이 정공.


4. 알고리즘 — 정보를 어떻게 *처리 할 것인가*

“Premature optimization is the root of all evil.” — Donald Knuth (1974)

4-1. 답하는 질문

“같은 문제를 *더 빠르게 / 더 적은 메모리로 / 더 정확하게 푸는 방법은 무엇인가? 그 한계는 어디인가?”*

소프트웨어공학이 전체 시스템의 조직 을 다룬다면, 알고리즘은 한 함수 안의 *처리 순서 를 다룬다. Donald Knuth“The Art of Computer Programming” (1968~) 이 알고리즘을 학문으로 체계화. 이 책 시리즈가 50 년이 지나도 완간되지 않은 것알고리즘이라는 우주의 깊이 를 상징한다.

4-2. 복잡도 표기 — Big-O

알고리즘 효율의 공통 언어. 입력 크기 n 에 따른 처리 시간의 증가율:

O(…) 의미 예시
\(O(1)\) 상수 해시 테이블 lookup
\(O(\log n)\) 로그 이진 검색
\(O(n)\) 선형 배열 순회
\(O(n \log n)\) 선형 로그 정렬 (비교 기반 하한)
\(O(n^2)\) 제곱 단순 정렬, 행렬 곱
\(O(2^n)\) 지수 부분집합 생성
\(O(n!)\) 팩토리얼 순열 생성

\(n = 10^6\) (백만) 일 때:

  • \(O(n \log n) \approx 2 \times 10^7\) — 0.02 초
  • \(O(n^2) \approx 10^{12}\) — 17 분
  • \(O(2^n)\) — 우주의 나이 곱하기 우주의 나이

같은 문제알고리즘 선택 하나로 현실적으로 풀리느냐 안 풀리느냐 가 결정된다.

4-3. 알고리즘 설계의 5 가지 큰 패러다임

(A) 분할 정복 (Divide and Conquer) — 큰 문제를 반으로 나눠 풀고 합침. 병합 정렬, 빠른 정렬, FFT.

(B) 동적 계획법 (DP)겹치는 부분 문제를 메모이제이션. 피보나치, 배낭, 편집 거리, 최단 경로.

(C) 탐욕 (Greedy)지금 순간 최선 을 반복. 최소 신장 트리(Kruskal/Prim), Huffman 코딩.

(D) 백트래킹모든 선택지 시도 하며 막히면 되돌아감. N-Queen, 스도쿠.

(E) 분기 한정 (Branch and Bound)유망하지 않은 분기 가지치기. 최적화 문제.

“어떤 패러다임을 적용할까” 가 알고리즘 설계 의 제 1 결정. 이 다섯이 대부분의 문제를 분류 한다.

4-4. 정렬의 하한 — 우리가 더 빠르게 만들 수 없는 자리

비교 기반 정렬은 \(\Omega(n \log n)\) 이 *증명된 하한**. 더 빠르게 만들 수 없다. *결정 트리 모델로 수학적으로 증명. 비교 기반이 아닌 radix sort 같은 알고리즘은 \(O(n)\) 가능 — 단 비교 가능한 키 가 한정된 범위 라는 전제 가 필요.

“공짜 점심은 없다” 의 알고리즘 버전: *전제 없이 일반적인 더 빠른 정렬은 *수학적으로 불가능**.

4-5. 쿠팡 새벽 배송 — TSP 의 친척 이 매일 밤 돌아간다

외판원 문제 (TSP)NP-hard 의 대표. 완벽한 답 은 100 도시만 돼도 우주의 나이가 걸린다. 그런데 쿠팡·마켓컬리·SSG 의 새벽 배송 라우팅 은 매일 수백·수천 도시 (배송지) 의 *최적 경로몇 시간 안에 풀어야 한다. 답이 *완벽하지 않아도 OK — 5% 만 절약해도 연간 수십억 원**. *근사 알고리즘 (Christofides, Lin-Kernighan, 메타휴리스틱 simulated annealing) + 실시간 교통 데이터 의 조합이 NP-hard 와 *현실의 타협. 컴퓨터과학의 가장 비싸지만 실용적 인 적용 사례.

4-6. 실무

  • DB 인덱스 = B-tree 의 자료구조 + log n 탐색 알고리즘. 없으면 \(O(n)\) 풀스캔, 있으면 \(O(\log n)\). 100 만 row 의 차이가 *수십만 배**
  • 그래프 최단 경로 — Dijkstra (양수 가중치) vs Bellman-Ford (음수) vs A* (휴리스틱). 문제의 모양에 따라 다른 알고리즘
  • ML 의 gradient descent지역 최적해 에 빠질 수 있는 탐욕적 알고리즘. 그 한계를 알고 다른 시드로 여러 번 돌리는 휴리스틱이 정공

📖 입문 한 권: CLRS (Introduction to Algorithms, Cormen·Leiserson·Rivest·Stein). 전 세계 학부 표준 교과서. 한국어 번역 있음. 너무 두꺼우면 Algorithm Design Manual (Skiena) 도 정공.

⚠️ 흔한 오해: “Big-O 만 보면 알고리즘 선택 끝”. 사실 — Big-O 는 *입력 크기 가 무한대 일 때 의 점근 분석. n=100 정도에선 *상수 인자, 캐시 지역성, 분기 예측 이 더 중요. quicksort 의 \(O(n^2)\) 최악 < merge sort 의 \(O(n \log n)\) 보다 quicksort 가 더 빠른 게 보통. 현실 의 상수이론 의 차수 를 이긴다.


5. 운영체제 — 하드웨어를 추상화하고 자원을 관리

“Simplicity is prerequisite for reliability.” — Edsger Dijkstra

5-1. 답하는 질문

“여러 프로그램이 *같은 하드웨어를 공유 하면서 서로 방해하지 않고 / 공정하게 / 효율적으로 작동 할 수 있게 하는 방법은 무엇인가?”*

운영체제는 하드웨어와 사용자 프로그램 사이의 통역사. CPU·메모리·디스크·네트워크 카드 같은 희소 자원수십 개의 동시 프로세스 에게 공정하게 분배. 없으면 *모든 프로그램이 직접 하드웨어를 만져야 함 — 충돌과 비효율의 지옥*.

5-2. 핵심 추상화 4 가지

(A) 프로세스 (Process)하나의 CPU 가 *여러 프로그램을 동시 실행 하는 것처럼 보이게. 실제로는 *수 ms 단위로 빠르게 전환 (context switch). 사용자에겐 각 프로그램이 자기 전용 CPU 를 가진 환상.

(B) 가상 메모리 (Virtual Memory)각 프로세스가 *자기 전용 4GB / 256TB 의 주소 공간 을 가진 것처럼 보이게. 실제로는 *실 RAM 은 더 작고 일부는 디스크에 있을 수도. 페이지 테이블가상 주소 → 물리 주소 변환. 프로세스 간 메모리 격리 의 기반.

(C) 파일 시스템 (File System)디스크의 *섹터·트랙 같은 물리 구조를 숨기고 파일·디렉토리 라는 논리 만 보임. ext4, XFS, ZFS, NTFS 등 *수십 종. 각자 내결함성 / 성능 / 압축 등 다른 trade-off.

(D) 시스템 콜 (System Call)사용자 프로그램과 커널의 경계. read, write, fork, mmap. 이 몇 십 개의 인터페이스수억 개의 응용 프로그램과 수십 개의 OS 의 만남 을 가능케 함.

5-3. 스케줄링 — 공정성 vs 효율성 의 정치학

CPU 가 1 개이고 프로세스 100 개일 때 누구에게 얼마나 시간을 줄 것인가:

  • FCFS (먼저 온 순) — 단순. 짧은 작업이 긴 작업 뒤에서 굶음
  • Round Robin — 시간 균등 분할. 공정하지만 컨텍스트 스위치 비용
  • Multilevel Feedback Queue우선순위 동적 조정. Linux CFS 의 조상
  • Linux CFS (Completely Fair Scheduler)“가장 적게 받은 프로세스” 우선. RB-tree 기반

공정의 정의 가 정치학과 닮았다. 짧은 작업 우선 이 공정인가, 대기 시간 평균 최소화 가 공정인가, 우선순위 높은 사용자 우선 이 공정인가. 정답이 없다 — trade-off.

5-4. 동시성 — 교착 / 경쟁 상태

여러 프로세스가 공유 자원에 접근 하면 발생하는 고전 문제:

  • Race Condition — 실행 순서에 따라 결과 달라짐
  • Deadlock — 서로의 자원을 기다리며 영원히 멈춤
  • Starvation — 우선순위 낮은 작업이 영원히 실행 안 됨

Edsger Dijkstra 의 1965 년 Semaphore 가 첫 해결책. 이후 Monitor, Mutex, Lock-free, Software Transactional Memory 까지 60 년의 진화. Go 의 goroutine + channel, Rust 의 ownership system최근 진화의 정점.

5-5. *Dijkstra 의 *식사하는 철학자들** — 동시성 의 우화

Dijkstra1965 년 강의 에서 만든 가르침. 5 명의 철학자가 원탁 에 둘러앉아 *밥과 생각만 번갈아 한다. 각자 옆 사람 과 포크 1 개를 공유. 밥 먹으려면 왼쪽 + 오른쪽 포크 둘 다 필요. 모두가 동시에 왼쪽 포크 를 들면모두가 오른쪽 포크 를 기다리며 영원히 굶는다 (deadlock). 해결책 의 다양성 (포크 들기 순서 고정, 한 번에 N-1 명만 시도, 중재자 도입…) 이 동시성 의 모든 해법 의 *원형**. 60 년이 지나 *Go 의 channel, Rust 의 Send/Sync trait 까지 — 이 우화 의 변형.

5-6. 실무

  • Kubernetes 의 노드 = 가상 OS. Pod 가 *프로세스의 추상화. cgroup + namespace 가 *기존 Linux 의 격리 메커니즘 위에 *컨테이너 라는 새 추상화를 얹음
  • DB connection pool프로세스 / 스레드 의 트레이드오프 의 응용. 연결 비용 ↔ 메모리 비용
  • NUMA / CPU affinity 튜닝cache line / locality 를 의식한 스케줄링. 고성능 시스템 의 필수

📖 입문 한 권: Operating Systems: Three Easy Pieces (Remzi & Andrea Arpaci-Dusseau). 무료 PDF. 가상화 / 동시성 / 영속성 세 부분 구성이 우아함. 영문 원서지만 가독성 좋음.

⚠️ 흔한 오해: “멀티스레드 = 무조건 빠름”. 사실 — 동시성 ≠ 병렬성. CPU 가 1 코어 면 스레드 N 개 = 단순 시분할 + 컨텍스트 스위치 비용. I/O 바운드 작업 만 빠르다. CPU 바운드 작업코어 수 = 한계. 스레드 더 만들면 *오히려 느려짐. Amdahl 의 법칙직렬 부분 의 비율병렬화 의 한계.


6. 자료구조 — 정보를 어떻게 *표현 할 것인가*

“Bad programmers worry about the code. Good programmers worry about data structures and their relationships.” — Linus Torvalds

6-1. 답하는 질문

“같은 데이터 를 *다르게 저장 하면 처리 비용 이 어떻게 달라지는가? 조회·삽입·삭제·정렬 에서 어느 작업을 빠르게 / 어느 작업을 느리게 하는 게 우리 문제에 맞는 trade-off 인가?”*

알고리즘이 처리 *순서, 자료구조는 처리 *대상의 형태**. 같은 알고리즘 도 *자료구조 가 다르면 성능 이 *100 배 차이*.

6-2. 핵심 자료구조 7 종

자료구조 조회 삽입 삭제 강점
배열 (Array) \(O(1)\) \(O(n)\) \(O(n)\) 고정 크기 + 캐시 친화
연결 리스트 \(O(n)\) \(O(1)\) \(O(1)\) 동적 크기 + 임의 삽입/삭제
스택 / 큐 \(O(n)\) \(O(1)\) \(O(1)\) 순서 의미 부여
해시 테이블 \(O(1)\) 평균 \(O(1)\) \(O(1)\) 키 기반 즉시 lookup
트리 (BST, AVL, RB) \(O(\log n)\) \(O(\log n)\) \(O(\log n)\) 정렬된 키 + 범위 검색
힙 (Heap) \(O(1)\) (최소/최대) \(O(\log n)\) \(O(\log n)\) 우선순위
그래프 (Graph) 가변 가변 가변 관계 표현

공짜 점심은 없다: 해시 테이블이 모든 작업 \(O(1)\) — 하지만 순서 가 없음. 범위 검색 (“나이 20~30”) 불가능. 트리는 순서가 있는 대신 \(O(\log n)\). 조회 한 가지를 빠르게 만들면 다른 무언가가 느려진다.

6-3. 트리 — 세상의 위계 구조 를 닮은 추상

자연계의 모든 위계 는 트리. 분류학 (계-문-강-목-과-속-종), 파일 시스템 디렉토리, 조직도, HTML DOM, 컴파일러 의 AST. 데이터의 자연스러운 모양 이 트리인 경우가 압도적.

특수 트리들:

  • B-tree / B+-treeDB 인덱스 의 사실상 표준. 디스크 I/O 최소화 위해 노드 당 다수 키
  • Trie — 문자열 prefix 검색. 자동완성 / 사전
  • Segment Tree구간 합 / 구간 최댓값 \(O(\log n)\)
  • Merkle Tree변경 감지. Git, Bitcoin, IPFS

6-4. 해시 — 충돌 의 우주

해시 테이블의 핵심: 해시 함수 가 *입력 → 작은 정수 (인덱스) 매핑. *서로 다른 입력이 같은 인덱스 로 가는 게 충돌. 충돌 처리 방식:

  • Open Addressing — 충돌 시 다음 빈 칸 으로
  • Chaining — 같은 인덱스에 연결 리스트 저장
  • Cuckoo Hashing두 개의 해시 함수 사용, 충돌 시 기존 entry 추방

Load Factor (저장된 entry / 전체 슬롯) 가 0.7 넘어가면 성능 급락. 동적 리해싱 (resize) 이 필요.

해시 함수 의 품질 이 결정적: SHA-256 같은 암호학적 해시프로그래밍 언어 의 hashCode() 같은 비암호학적 해시목적이 완전히 다름. 잘못 쓰면 해시 충돌 공격 으로 전체 서비스 마비.

6-5. 그래프 — 관계 의 표현

점 (정점) + 선 (엣지). 모든 네트워크 적 사고가 그래프로 환원: 친구 관계, 도로망, 의존성 (DAG), 회로, 신경망.

표현 방식:

  • 인접 행렬 — \(O(V^2)\) 공간. 밀집 그래프 에 좋음
  • 인접 리스트 — \(O(V + E)\) 공간. 희소 그래프 에 좋음

알고리즘 풀:

  • DFS / BFS — 모든 정점 방문
  • Dijkstra / Bellman-Ford / A* — 최단 경로
  • Kruskal / Prim — 최소 신장 트리
  • PageRank그래프 위 *확률적 위치 — 구글의 출발점

6-6. NAVER 자동완성 — Trie 가 매일 수억 번 돌아간다

“파” 입력 → “파리바게뜨, 파스타, 파주 시청…“. NAVER / 다음 / Google 의 자동완성은 Trie (트라이) 자료구조 의 응용. 문자 트리 에서 prefix 매칭 이 O(입력 길이). 검색어가 수억 개 라도 입력 한 글자에 O(1)~O(k). 해시 테이블 로는 prefix 검색 불가능. 자료구조 선택 한 번수억 명의 검색 경험 을 결정한다.

6-7. 실무

  • Redis 의 ZSET해시 + 스킵 리스트 조합. 키 기반 \(O(1)\) lookup + 정렬된 범위 \(O(\log n)\). *해시 트리의 *합성**
  • Neo4j 같은 그래프 DB관계 가 *1 등 시민. 친구의 친구 같은 쿼리가 조인 폭발 없이 자연스러움
  • DB 인덱스 선택어떤 컬럼 / 어느 자료구조 (B-tree, hash, GIN, GIST) 가 *우리 쿼리 패턴 에 맞나. 인덱스 잘못 잡으면 *오히려 느려짐

📖 입문 한 권: Algorithms (Sedgewick & Wayne, Princeton). 코드 와 *시각화 가 매우 잘 짜인 입문. Coursera 무료 강의도 있음. CLRS 가 어렵게 느껴지면 이 책부터.

⚠️ 흔한 오해: “해시 가 무조건 트리보다 빠르다”. 사실 — 해시 는 *키 정확 일치 만 \(O(1)\). *범위 쿼리 (“나이 20~30”), 정렬된 순회, prefix 검색해시로 불가능 또는 \(O(n)\). DB 인덱스 가 *주로 B-tree 인 이유 — *현실 의 쿼리 는 *범위/정렬 이 많다**.


7. 프로그래밍언어 — 인간 의 의도를 컴퓨터가 실행할 수 있는 형태로 번역

“A language that doesn’t affect the way you think about programming is not worth knowing.” — Alan Perlis

7-1. 답하는 질문

“인간 이 생각하는 *비형식적·맥락 의존적 의도 를, 컴퓨터 가 정확히 / 명료하게 / 안전하게 실행할 수 있는 형식적 문장 으로 어떻게 표현 할 것인가? 그 표현 의 한계와 가능성 은 무엇인가?”*

프로그래밍언어는 언어학 + 수학 + 컴퓨터과학 의 교차점. 자연어와 다르게 모든 문장 의 의미가 *명확 해야 함. 모호성 0.

7-2. 언어 의 4 가지 큰 패러다임

(A) 명령형 (Imperative)컴퓨터에게 *순서대로 시킨다. C, Pascal, Go. 기계의 모델 (메모리·레지스터) 에 가까움.

(B) 객체지향 (OO)데이터 + 행위 의 캡슐화. Java, C++, C#, Smalltalk. 복잡한 상태 의 *조직화.

(C) 함수형 (Functional)불변 + 순수 함수 의 합성. Haskell, Lisp, ML, Erlang. 수학적 우주. 부수 효과 가 *명시적.

(D) 선언형 (Declarative)“무엇” 만 적고 *어떻게 는 시스템에 맡김. SQL, Prolog, HTML/CSS. *문제 의 *모델 만 표현.

어떤 언어 가 정답? 없다. 문제의 성격 에 맞는 언어 가 다르다. DB 쿼리는 SQL (선언형), 운영체제는 C (명령형), 컴파일러는 ML (함수형), GUI 는 OO 가 *역사적으로 잘 맞음.

7-3. 타입 시스템 — 실행 전에 *실수 를 잡는 시스템*

Static typing (Java, Rust, Haskell) vs Dynamic typing (Python, JS, Ruby) 의 대립:

  • Static컴파일 시 타입 체크. 실행 전 많은 버그 발견. 느린 prototyping
  • Dynamic런타임 타입 체크. 빠른 prototyping. 프로덕션 사고 위험

최근 트렌드Gradual typing (TypeScript, Python 의 type hint). 둘의 trade-off 를 *프로젝트 부분 별로 다르게 선택*.

타입 시스템의 깊은 진실: 타입 = 증명. Curry-Howard correspondence프로그램의 타입 = 정리, 프로그램 = 그 정리의 증명. 수학과 컴퓨터과학의 *놀라운 동형 사상. Haskell, Coq, Idris 같은 언어 가 이 원리 위에 정확성을 *수학적으로 증명할 수 있는 코드 를 만든다*.

7-4. 컴파일 vs 인터프리트

  • 컴파일 언어: 소스 → 기계어 변환 후 실행 (C, Rust, Go). 빠른 실행 / 느린 개발 사이클
  • 인터프리트 언어: 소스를 한 줄씩 해석 후 실행 (Python, Ruby, Bash). 느린 실행 / 빠른 개발
  • JIT (Just-In-Time): 런타임에 자주 쓰이는 부분만 컴파일 (Java JVM, V8 JS). 두 세계의 절충

하드웨어 가까울수록 컴파일, 사용자 가까울수록 인터프리트경험칙.

7-5. 메모리 관리 — *언어의 *영혼**

누가 메모리 해제 책임지는가:

  • 수동 (C, C++) — 개발자가 직접 malloc / free. 최고 성능, 최대 위험 (use-after-free, leak)
  • 가비지 컬렉터 (Java, Go, Python)런타임이 안 쓰는 메모리 자동 회수. 안전 + GC pause
  • 소유권 시스템 (Rust)컴파일러 가 *수명 을 추적, 해제 시점을 자동 결정. GC 없이 안전. Rust 의 결정적 기여

이 셋의 차이가 현대 언어 선택 의 가장 큰 분기점.

Rust 의 소유권 이 어떻게 컴파일 타임에 사용 후 해제 (use-after-free) 를 막는지 한 줄로 보면:

let s1 = String::from("hello");
let s2 = s1;             // s1 의 소유권이 s2 로 이동
println!("{}", s1);      // 컴파일 에러! s1 은 더 이상 유효하지 않음

C 라면 *런타임에 사고, Java 라면 GC 가 알아서, Rust 는 컴파일러 가 *못 컴파일 시킴. *세 패러다임 의 *철학적 차이 가 한 예제 에 응축*.

7-6. Tony Hoare 의 10 억 달러 실수 — null 이 짊어진 비용

Tony Hoare 가 2009 년 한 학회 에서 공개 사과. “1965 년 ALGOL W 에 *null 참조 를 도입한 것 — 나의 10 억 달러짜리 실수. 이후 *수십 년 동안 NullPointerException 으로 일어난 모든 사고 의 *지구 총 비용**. *Kotlin 의 nullable 타입 (String?), Rust 의 Option<T>, Swift 의 옵셔널Hoare 의 사과 를 *언어 차원에서 보상한 결과. 한국에서 Java → Kotlin 전환 이후 NPE 가 사라졌다 는 보고가 흔한 이유. 언어 의 한 결정 이 *수십 년 의 비용 을 만든다*.

7-7. 실무

  • Spring Boot 의 DI 컨테이너언어의 모자란 표현력 (메타프로그래밍)프레임워크 가 보완
  • Kotlin null safety — 위의 Hoare 의 10 억 달러 실수 가 일상에서 사라지는 모습
  • DSL (도메인 특화 언어)특정 문제 에만 *최적화 된 작은 언어 만들기. SQL, Regex, Terraform HCL

📖 입문 한 권: Crafting Interpreters (Robert Nystrom, 무료 온라인). 직접 인터프리터 / 컴파일러 를 만들면서 언어 의 본질을 익힘. 또는 Structure and Interpretation of Computer Programs (SICP) — 좀 더 추상적이지만 프로그래밍 의 깊이.

⚠️ 흔한 오해: “동적 타입 = 자유, 정적 타입 = 답답”. 사실 — 동적 타입 의 *자유런타임 의 *비용** 으로 갚는다. 1 만 줄 넘는 프로젝트 에서 동적 언어 (Python, JS)정적 언어 (TS, Kotlin) 보다 유지보수 비용 이 *2~3 배. MyPy, TypeScript 같은 점진적 타입 의 등장 은 *이 비용 의 *지각된 결과**.


8. 7 분야의 상호 의존 — 어느 하나만 보면 불완전

각 분야 가 독립 해 보이지만, production 사고반드시 두 분야의 경계 에서 터진다. 몇 가지 예:

사고 양상 표면 진짜 원인 보아야 할 분야
DB 쿼리 느림 “SQL 느려요” B-tree depth 증가 + page fault 자료구조 + 운영체제
마이크로서비스 장애 전파 “전체 다운” retry storm + thundering herd 네트워크 + 알고리즘 + SE
메모리 누수 “OOM 죽음” 캐시의 reference 가 GC 못 회수 프로그래밍언어 + 자료구조
동시성 race “가끔 데이터 깨짐” TCP 비순서 + happens-before 미정의 네트워크 + 운영체제 + 언어
ML 학습 발산 “loss = NaN” float overflow + 알고리즘 의 numerical instability 알고리즘 + 자료구조 + 언어
K8s 배포 실패 “pod CrashLoop” volumeClaimTemplates immutable 운영체제 (file system) + SE 컨벤션

“한 분야의 전문가” 가 다른 분야 를 모르면 *진짜 원인 까지 도달 못 한다. *깊은 전문성 + 7 분야 의 *공통 어휘** 가 *시니어 의 정의.


9. 공통 깊은 진실 — 7 분야 가 결국 답하는 같은 질문

이 글의 결론에 다다른다. 7 분야 의 표면이 달라 보여도 *밑바닥의 같은 진실 을 다른 각도에서 본다*:

9-1. trade-off 의 체계화

공짜 점심은 없다. 모든 분야의 모든 발견무엇을 얻고 무엇을 잃는지수학적·실용적 정리.

🩺 실제 사고: 2017 년 AWS S3 장애 — us-east-1 의 *한 컨트롤 시스템 의 작업 도중 전체 region 영향. CAP 의 P (분단 허용성) 를 *내부 시스템에도 적용하지 않은 결과. *Amazon 도 *완전한 격리 를 만들지 못한다. 우리가 잊지 말아야 할 가르침.

분야 핵심 trade-off 정리 이름
계산이론 시간 ↔ 공간 / 정확도 ↔ 다항 시간 P vs NP, 정지 문제, Rice 정리
네트워크 일관성 ↔ 가용성 ↔ 분단 허용 CAP 정리, FLP 정리
소프트웨어공학 추상화 ↔ 디버깅 / 속도 ↔ 유지보수 Brooks’ Law, Conway’s Law
알고리즘 시간 ↔ 공간 / 정확도 ↔ 단순함 정렬 \(\Omega(n \log n)\) 하한, NP-hardness
운영체제 격리 ↔ 효율 / 공정성 ↔ 응답성 Amdahl’s Law, 우선순위 역전
자료구조 조회 ↔ 수정 / 메모리 ↔ 속도 Cache-Oblivious 한계
프로그래밍언어 표현력 ↔ 안전성 / 추상 ↔ 성능 Curry-Howard 동형, Rice 정리

“trade-off 가 있다는 사실 자체” 를 *수학적으로 증명 하는 게 컴퓨터과학의 핵심 작업. *“이걸 *동시에 만족할 수 없다” 의 증명 (CAP, FLP, P vs NP, Halting) 이 분야의 정점.

9-2. 추상화의 층층 쌓기

   사용자 화면 (오늘 우리가 산다)
        ↑
   React / Vue / Spring Boot          ← 응용 프레임워크
        ↑
   TypeScript / Java / Python         ← 프로그래밍 언어
        ↑
   HTTP / GraphQL / SQL                ← 표준 프로토콜
        ↑
   TCP / UDP / TLS                     ← 전송 계층
        ↑
   IP 패킷                              ← 네트워크 계층
        ↑
   POSIX / system call                  ← 운영체제 인터페이스
        ↑
   커널 (가상 메모리 / 스케줄러)      ← 운영체제
        ↑
   어셈블리 / 명령어 집합 (ISA)        ← CPU 명세
        ↑
   마이크로아키텍처 (캐시 / 파이프라인) ← CPU 내부
        ↑
   논리 게이트 (AND / OR / NOT)        ← 디지털 회로
        ↑
   트랜지스터                            ← 반도체
        ↑
   양자역학 (전자의 흐름)               ← 물리 세계 (출발점)

우리는 추상화의 100 층 빌딩 *맨 꼭대기 에 살고 있다. 아래층을 *모르고도 살 수 있게 *건축 한 게 컴퓨터과학의 진짜 업적. 추상화가 깨지는 자리 — leaky abstraction (Joel Spolsky) — 가 production 사고의 자리.

🩺 실제 사고: 2024 년 CrowdStrike 의 전세계 Windows 블루스크린 사태 — 커널 모드 드라이버 의 한 잘못된 업데이트Microsoft 의 모든 추상화 위에서 동시 무너짐. 수백만 PC 가 동시에 정지. *Joel Spolsky 의 *모든 추상화 는 *결국 새어 나간다** 의 거대한 사례.

9-3. *형식과 의미 의 *영원한 거리**

인간 의 *의도 는 자연어, 컴퓨터의 실행 은 형식. 둘 사이 *번역의 손실영원히 0 이 되지 않는다. 프로그래밍언어, 명세, 테스트, 코드 리뷰, AI assistant 까지 — 모두 이 거리를 좁히는 도구. 완전 폐색은 불가능 (정지 문제 가 이를 증명).

🩺 실제 사고: 1996 년 Ariane 5 로켓 폭발. 원인은 *32 비트 부동 소수점 → 16 비트 정수 변환 의 *오버플로**. Ada 코드 한 줄 — 형식적으로 옳지만 *명세 (의미) 와 다른 환경에서 재사용. 5 억 달러 + 위성 손실. 한 정수 변환 의 *의미 누락우주 발사 의 실패 가 됐다*.

9-4. 우리는 *자연 처럼 *발견된 세계* 를 다루지만 그 세계는 *우리가 만들었다**

역설 이 컴퓨터과학의 가장 아름다운 모순. 튜링이 1936 년에 발견한 정지 문제 의 불가해성2026 년의 GPT 도, 100 년 후의 양자 컴퓨터 도 깨지 못한다. 우리가 만들었지만 우리가 *벗어날 수 없다. 이게 컴퓨터과학이 진짜 *과학 인 이유*.

💡 깊은 함의: AI 가 모든 코드를 자동 생성 할 수 있게 돼도 — 정지 문제 의 한계 때문에 모든 코드의 정확성을 *완전히 자동 검증 할 수는 없다. *인간 의 판단이 *체계적으로 필요한 자리 가 영원히 남는다*. *컴퓨터과학 의 발견 이 *우리 직업 의 *마지막 안전망** 인 셈.


10. 학습 로드맵얕게 7 + 깊게 1 의 실천

너무 큰 영역을 한 번에 정복 하려 들면 좌절한다. 순서가 있다:

10-1. 권장 학습 순서 (3 년 이상)

시기 집중 책 한 권
1 단계 알고리즘 + 자료구조 (둘은 같이 학습) Sedgewick Algorithms 또는 CLRS
2 단계 운영체제 (OS 의 추상화 가 모든 다른 분야 의 기초) OS: Three Easy Pieces
3 단계 네트워크 (HTTP / TCP / DNS — 우리가 매일 마주치는 것) Tanenbaum Computer Networks
4 단계 소프트웨어공학 (조직 의 패턴책 보다 *경험 으로) Brooks Mythical Man-Month + 실무
5 단계 프로그래밍언어 패러다임 (다른 패러다임 3 개 이상 익히기) Crafting Interpreters + SICP
6 단계 계산이론 (가장 추상적, 가장 마지막) Sipser
7 단계 깊이 1 선택 (평생 한 분야깊게) (개인 선택)

10-2. *각 분야 의 *최소 어휘 만이라도** — 한 줄 정리

  • NP-hard 가 들리면 “근사 / 휴리스틱 으로 가야 한다” 즉시 떠올림
  • CAP 가 들리면 “P 는 불가피, C 와 A 중 선택” 즉시 떠올림
  • Brooks’ Law 가 들리면 “늦은 프로젝트에 사람을 더 넣지 마” 즉시 떠올림
  • Big-O 가 들리면 “입력 크기에 따른 시간 증가율” 즉시 떠올림
  • page fault 가 들리면 “가상 메모리 의 디스크 폴백” 즉시 떠올림
  • B-tree 가 들리면 “디스크 친화적 정렬된 검색” 즉시 떠올림
  • type system 이 들리면 “실행 전 버그 잡기” 즉시 떠올림

공통 어휘 만이라도 7 분야 다 가지면production 사고 의 *진짜 원인 까지 도달 할 수 있는 시니어 의 자격.


마무리 — “세상의 법칙을 발견하는 자” 라는 정체성

“세상이 어떻게 작동하는지 *설명하고 예측하는 것”* — 이 정의가 컴퓨터과학 의 7 분야 를 *통합 한다. 각자 다른 질문 에 답하지만 결국 우리가 만든 디지털 우주 의 *불변하는 법칙 을 발견. *trade-off 의 체계화, 추상화의 쌓기, 형식과 의미의 거리 — 셋이 모든 분야의 깊은 공통 진실.

이 7 분야 의 어느 하나에 인생을 걸어도 한 평생 부족하다. 다만 다른 6 분야와 공통의 어휘 를 가지지 못한 전문성production 의 진짜 문제 앞에 무력해진다. 깊게 1 + 얕게 7 — 이게 시니어 의 본질.

우리가 코딩 한다 할 때 — 알고리즘 (4) 을 자료구조 (6) 위에 짜서, 프로그래밍언어 (7) 로 표현하고, 운영체제 (5) 위에서 실행되며, 네트워크 (2) 로 통신하고, 소프트웨어공학 (3) 의 조직으로 협업하며, 계산이론 (1) 의 한계 안에서 살아간다. 한 줄 코드를 짤 때마다 7 분야 가 동시에 등장한다. 이걸 의식하면 시니어, 의식하지 못하면 영원한 주니어.

“컴퓨터과학자는 *발견된 우주 안에서 또 다른 우주를 발견 한다”* — 자연과학자가 우주의 법칙을 발견하듯 우리는 우리가 만든 우주의 법칙 을 발견한다. 이 발견 의 7 가지 다른 각도가 바로 이 글의 7 절. 그 어느 하나도 과학 의 자리 에서 빠질 수 없다.

“세상이 어떻게 작동하는지 설명하고 예측하는 것” — 이 한 문장이 우리 직업 의 자부심 의 근거. 코드 한 줄 의 뒤에 *100 년의 발견 이 있다. 그 발견을 *알고 짜는 것컴퓨터과학자 의 정체성이다.