IT 로드맵의 모든 구역이 같이 쓰는 비유다. 컴퓨터 한 대를 땅 한 필지 위의 도시와 도서관으로 그렸다. 코드는 책이고, 실행은 작업대가 그 책을 읽는 일이다. 숫자는 내 노트북(Ryzen 7 7735HS)에서 잰 값이다.

그림 아래 이전 · 다음 버튼으로 한 칸씩 넘긴다. 그림을 한 번 누른 뒤에는 키보드 ← → 로도 넘어간다. 버튼 사이 카드가 지금 보는 칸의 설명이다.

1 / 12 · 필지 한 장

필지 한 장 컴퓨터 한 대

땅은 세 겹이다. 지상 벌판은 메모리, 지하 1층은 장비층(CPU · 펌웨어 · 장비), 지하 2층은 서고(디스크)다. 프로그램은 전부 지상 벌판 위에 선다.


칸마다 그림과 실제를 한 장씩 맞춘다

그림에서 본 칸을 다시 찾을 때 보는 곳이다. 금색 줄이 붙은 카드는 기본표다. 다음 대화가 출발하는 칸이라 합의할 때만 바꾼다.

하드웨어는 코드 이야기의 무대로 쓰는 만큼만 칸이 있다. 셀 · 컨트롤러 · 메인보드 · 파워 같은 하드웨어 자체는 비유하지 않고 하드웨어 & OS의 부품 페이지에서 있는 그대로 본다.

땅 — 지상 벌판 · 지하 1층 장비층 · 지하 2층 서고

땅 한 칸 (구덩이 8개) = 1바이트
땅 한 칸 (구덩이 8개)기본표

= 1바이트

번지(주소)가 붙는 가장 작은 칸이다. 칸 안에 작은 구덩이가 8개 있고, 흙이 차 있으면 1, 비어 있으면 0이다(비트). 비트는 땅 위에 놓인 물건이 아니라 땅 자체의 상태다.

용어 · byte
필지 묶음 (4,096칸) = 페이지 (4KB)
필지 묶음 (4,096칸)기본표

= 페이지 (4KB)

도시는 땅을 한 칸씩 내주지 않고 이 묶음으로 내준다. 지하와 땅 사이를 오갈 때도 이 묶음 단위다.

용어 · page
지상의 벌판 = 메모리 (RAM)
지상의 벌판기본표

= 메모리 (RAM)

이 PC · 62.8 GB

번지가 붙은 칸만으로 된 땅이다. 도시 · 도서관 · 책 · 양식이 전부 이 위에 있다. 메모리가 아닌 것은 이 위에 두지 않는다. 켜기 전에는 허허벌판이고, 전기가 나가면 위에 선 것이 통째로 사라진다.

용어 · memory
흙 무늬로 지은 도서관 = 메모리 속 비트의 무늬
흙 무늬로 지은 도서관기본표

= 메모리 속 비트의 무늬

도시 · 도서관 · 책 · 양식은 땅 위에 따로 올라선 물건이 아니라 구덩이가 채워진 무늬다. 그림의 건물 모양은 그 무늬를 알아보기 쉽게 세워 그린 것이다. 전기가 나가 흙 무늬가 사라지면 도서관도 함께 사라진다.

지하 1층 장비층 = 메모리가 아닌 하드웨어
지하 1층 장비층기본표

= 메모리가 아닌 하드웨어

지상 벌판 바로 밑이다. 중앙 작업장(CPU) · 비석(펌웨어) · 운반 장비 · 그림 작업장이 여기 있다. 번지 붙은 칸이 아니라서 지상에 두지 않는다. 지상과는 땅 밑 운반로로 이어진다.

지하 2층 서고 = 디스크 (SSD)
지하 2층 서고기본표

= 디스크 (SSD)

이 PC · NVMe SSD 932 GB

가장 깊은 층이다. 프로그램 꾸러미와 데이터 원본이 잠든 곳이다. 느리지만 전기가 나가도 남는다. 작업대는 서고를 바로 읽지 못한다 — 운반 장비가 지상으로 올려야 읽는다.

용어 · disk
장비층 귀퉁이 비석 = 펌웨어 (UEFI)
장비층 귀퉁이 비석기본표

= 펌웨어 (UEFI)

메인보드의 플래시 칩이다. 메모리가 아니라 장비층에 있다. 켜면 작업대가 맨 먼저 이 비석을 읽고, 거기 적힌 대로 서고에서 도시 건설 감독(부트로더)을 꺼낸다. 순서는 비석 → 감독 → 도시 → 첫 도서관 → 다른 도서관들이다.

땅 한 필지 = 컴퓨터 한 대
땅 한 필지

= 컴퓨터 한 대

지상 벌판(메모리) · 지하 1층 장비층 · 지하 2층 서고가 한 필지에 겹쳐 있다. 서버 한 대도 필지 하나다.

중앙 작업장 — 책을 읽는 CPU와 복사 조각을 두는 캐시

중앙 작업장의 작업대 8개 = CPU 물리 코어 8개
중앙 작업장의 작업대 8개기본표

= CPU 물리 코어 8개

이 PC · Ryzen 7 7735HS

지하 1층 장비층에 있어서 도시가 깔리기 전부터 있다. 메모리 칸을 차지하지 않는다. 책(기계어)을 읽고 그대로 하는 일은 전부 여기서만 일어난다. 내 프로그램의 책이든 도시 지침서든 같다.

용어 · cpu
작업대마다 읽는 자리 2개 (모두 16) = CPU 논리 코어 16개
작업대마다 읽는 자리 2개 (모두 16)기본표

= CPU 논리 코어 16개

책갈피 하나가 읽히려면 이 자리 하나에 펴져야 한다. 그래서 한 번에 16개까지만 읽힌다. 한 작업대의 계산 장비를 두 자리가 나눠 써서, 한쪽이 복사 조각을 기다리는 틈에 다른 쪽이 읽는다(하이퍼스레딩).

작업대의 손바닥 메모 = 레지스터
작업대의 손바닥 메모기본표

= 레지스터

지금 계산 중인 값 몇 개가 적힌 메모다. 맨 윗줄이 책갈피가 가리키는 줄의 번지(프로그램 카운터)다. 비상 연락판이 지상 어디에 있는지도 여기 적혀 있다. 작업대 것이라, 차례가 끝나면 작업대가 도시 지침서를 읽으며 그 책갈피 몫으로 관청 서류함에 옮겨 적고 자리를 넘긴다(컨텍스트 스위치).

용어 · register
쪽을 복사한 조각 (64바이트) = 캐시 라인
쪽을 복사한 조각 (64바이트)

= 캐시 라인

작업대는 책장까지 가지 않는다. 장비가 그 쪽에서 64바이트, 문장 몇 줄짜리 조각을 복사해 와서 읽는다. 다음 줄은 대개 같은 조각 안에 있다. 다음에 읽을 것 같은 조각은 미리 가져다 둔다(프리페치).

작업대 바로 옆 서랍 = L1 캐시
작업대 바로 옆 서랍기본표

= L1 캐시

이 PC · 64KB / 코어 (명령 32 + 데이터 32)

복사 조각을 가장 가까이 두는 곳이다. 읽을 문장 조각과 고칠 서류 조각을 따로 쌓아 두어서 두 칸으로 나뉜다.

작업대 옆 선반 = L2 캐시
작업대 옆 선반기본표

= L2 캐시

이 PC · 512KB / 코어

서랍보다 크고 조금 멀다. 이것도 복사 조각만 놓인다.

작업대 8개가 함께 쓰는 공용 선반 = L3 캐시
작업대 8개가 함께 쓰는 공용 선반기본표

= L3 캐시

이 PC · 16MB

원본은 늘 도서관 책장에 있고, 복사 조각은 장비가 알아서 채우고 비운다. 서랍 → 선반 → 공용 선반 → 책장 순으로 멀고 느리다. 서랍에서 고친 서류 조각은 서랍에서 밀려날 때 원본에 다시 적힌다.

용어 · cache-miss
땅 밑 운반로 = 메모리 버스
땅 밑 운반로

= 메모리 버스

지하 1층 작업장에서 바로 위 지상 벌판으로 올라가는 길이다. 책장의 쪽을 복사한 조각이 이 길로 작업대에 내려온다. 책 자체는 오지 않는다. 바로 위라 가깝고, 그래서 메모리는 디스크보다 훨씬 빠르다.

작업대마다 붙은 알람 시계 = 타이머
작업대마다 붙은 알람 시계

= 타이머

정해진 간격마다 울린다. 무엇을 읽고 있든 상관없다. 울리면 작업대가 스스로 읽던 것을 멈추고, 비상 연락판이 가리키는 도시 지침서의 쪽을 편다.

용어 · time-slice

땅에 박힌 다른 장비 — 짐을 나른다

운반 장비 = DMA
운반 장비

= DMA

장비층에 있다. 지하 서고나 도로에서 온 짐을 작업장을 거치지 않고 지상 땅 칸으로 바로 옮긴다. 다 옮기면 알람(인터럽트)으로 도시에 알린다. 그동안 짐을 기다리는 책갈피는 자리를 비워 둔다.

필지 경계의 관문 장비 = 랜 카드
필지 경계의 관문 장비

= 랜 카드

장비층의 필지 경계에 있다. 다른 필지로 가는 도로로 드나드는 짐을 받고 내보낸다.

그림 전용 작업장 = GPU
그림 전용 작업장

= GPU

이 PC · Radeon 내장 그래픽

장비층에서 중앙 작업장 옆에 붙은, 작은 작업대가 아주 많이 모인 그림 그리기용 두 번째 작업장이다.

도시 — 운영체제

도시 — 관청 · 기반시설(도로 · 관로) = 운영체제 커널
도시 — 관청 · 기반시설(도로 · 관로)기본표

= 운영체제 커널

이 PC · Windows 11 Pro

운영체제도 프로그램이라 지상 벌판(메모리) 위에 선다. 맨 먼저 깔리고 땅을 직접 만지는 권한이 있어 도서관이 아니라 도시다. 도시는 스스로 움직이지 않는다 — 「도시가 ~한다」는 「작업대가 도시 지침서의 그 장을 읽으며 ~한다」의 줄임말이다. 그래서 줄을 서지 않고, 알람과 「도시 지침서를 펴라」는 문장으로 펴진다.

용어 · kernel
도시 지침서 = 커널 코드
도시 지침서

= 커널 코드

도시가 할 일을 적어 둔 책이다. 관청에 꽂혀 있다. 알람이 울리거나 「도시 지침서를 펴라」는 문장을 만나면 작업대가 이 책의 정해진 쪽을 펴서 읽는다. 배정 장 · 쉼 장 · 시스템 콜 처리 장이 전부 이 안에 있다.

용어 · kernel
「도시 지침서를 펴라」는 문장 = 시스템 콜
「도시 지침서를 펴라」는 문장기본표

= 시스템 콜

도서관이 도시에 일을 부탁하는 유일한 자리다. 파일 만들기, 땅 더 받기, 새 도서관 세우기가 전부 이 문장을 지난다. 이 문장을 만나면 같은 작업대가 같은 책갈피로 이어서 도시 지침서를 읽고 다시 돌아온다.

용어 · system-call
작업대의 모드 스위치 = 커널 모드 / 사용자 모드
작업대의 모드 스위치

= 커널 모드 / 사용자 모드

도시 지침서를 읽는 동안만 「도시 모드」가 되고, 그때만 땅과 장비를 직접 만질 수 있다. 스위치는 작업대가 직접 지켜서 도서관 책이 마음대로 못 돌린다.

용어 · user-space
비상 연락판 = 인터럽트 표 (IDT)
비상 연락판

= 인터럽트 표 (IDT)

「알람이 울리면 도시 지침서 몇 쪽을 펴라」가 적힌 판이다. 판은 관청(지상)에 걸려 있고, 작업대 손바닥에는 판이 어디 있는지만 적혀 있다. 켤 때 도서관이 하나도 서기 전에 맨 먼저 적어 두고, 그 뒤로 도서관 책은 못 고친다.

용어 · interrupt
도시 지침서의 배정 장 = 스케줄러
도시 지침서의 배정 장

= 스케줄러

사람이 아니라 지침서의 한 장이다. 작업대가 알람에 펴서 읽으며 어느 책갈피를 자리에 펼지 정한다. 기준은 넷이다 — 준비된 책갈피만 줄을 선다, 우선순위가 높은 것이 먼저다, 한도 시간이 차면 비킨다, 되도록 같은 작업대에 다시 편다(서랍에 복사 조각이 남아 있을 수 있어서).

용어 · cfs-eevdf
필지 묶음의 꼬리표 = 페이지 권한 (읽기 · 쓰기 · 실행)
필지 묶음의 꼬리표

= 페이지 권한 (읽기 · 쓰기 · 실행)

책(코드)도 양식(객체)도 같은 흙 무늬라, 흙만 봐서는 구별되지 않는다. 갈리는 곳은 작업대가 어떻게 읽느냐와, 도시가 필지 묶음마다 붙인 꼬리표 — 「읽기만」 · 「고쳐도 됨」 · 「문장으로 읽어도 됨」이다. 「문장으로 읽어도 됨」이 없는 땅을 문장으로 읽으려 하면 알람이 울린다.

관청 서류함 속 책갈피 줄 = 준비 큐
관청 서류함 속 책갈피 줄

= 준비 큐

자리가 나기를 기다리는 책갈피들의 줄이다. 짐이나 신호를 기다리는 책갈피는 이 줄에 없다. 짐이 도착했다는 알람이 울리면 그때 줄에 선다.

용어 · runqueue
도시 전용 책갈피 = 커널 스레드
도시 전용 책갈피

= 커널 스레드

이 PC · System 프로세스 449개

어느 도서관에도 속하지 않고 도시 지침서에만 꽂히는 책갈피다. 저수조의 짐을 틈틈이 지하로 내리기, 다음에 내줄 땅의 흙을 미리 비워 두기처럼 뒤에서 늘 하는 일을 맡는다. 차례는 다른 책갈피처럼 줄을 서서 받는다.

도시 지침서의 쉼 장 = Idle
도시 지침서의 쉼 장

= Idle

펼 책갈피가 하나도 없을 때 배정 장이 이 장을 펴게 한다. 「아무것도 하지 말고 작업대 전원을 낮춰라」가 적혀 있다. 작업 관리자의 「유휴」가 이 시간이다.

중간 저수조 = 페이지 캐시
중간 저수조

= 페이지 캐시

지상의 도시 땅 위에 있다 — 페이지 캐시는 커널이 가진 메모리다. 서고로 내릴 짐을 잠시 모아 둔다. 「써 줘」는 여기까지만 담고 바로 「받았음」을 돌려준다. 지금 바로 서고까지 내리라는 부탁이 fsync다.

용어 · page-cache
다른 필지로 가는 도시 도로 = 네트워크
다른 필지로 가는 도시 도로

= 네트워크

같은 필지 안의 도서관끼리는 도시 안 길(루프백)로 오간다.

용어 · socket

도서관 — 프로세스와 책갈피

지하 서고의 도서관 꾸러미 = 프로그램 (실행 파일)
지하 서고의 도서관 꾸러미기본표

= 프로그램 (실행 파일)

책 상자와 배치표가 한 묶음이다. 배치표에는 「어느 책을 땅 어디에 꽂아라」가 적혀 있다. 꾸러미 하나로 도서관을 여러 채 세울 수 있다.

용어 · jar
지상에 세운 도서관 = 프로세스
지상에 세운 도서관기본표

= 프로세스

이 PC · 537채

책이 도서관을 세우는 게 아니다. 도시가 꾸러미의 배치표를 읽고 지상에 도서관을 세운다. 모든 도서관은 다른 도서관의 부탁으로 선다(부모 프로세스). 남의 도서관 책장과 창고는 못 연다. 도서관이 닫히면 도시는 대장에서 그 땅을 「비었다」로 적을 뿐이고, 흙 무늬는 남는다 — 다른 도서관에 내주기 전에 흙을 비운다(0으로 지운다).

용어 · process
책갈피 = 스레드
책갈피기본표

= 스레드

이 PC · 9,254개

「어느 책 몇 쪽 몇째 줄까지 읽었나」다. 책을 들고 다니지도, 작업대에 일을 보내지도 않는다. 자리에 펴져 있는 동안은 작업대 손바닥에, 기다리는 동안은 관청 서류함에 있다. 다른 시각에 재 보니 읽히는 중 17, 줄 서는 중 0, 기다리는 중 9,434였다.

용어 · thread
책갈피마다 딸린 읽기 노트 = 스택
책갈피마다 딸린 읽기 노트기본표

= 스택

「어느 장에서 넘어왔나(돌아갈 자리)」와 메서드 안의 지역 변수를 적는다. 도서관 땅 칸에 책갈피마다 따로 있다. 도시 지침서를 읽는 동안은 도시 쪽 노트(커널 스택)를 쓴다.

용어 · stack
책갈피마다 딸린 보관함 = ThreadLocal
책갈피마다 딸린 보관함기본표

= ThreadLocal

자바가 책갈피마다 따로 주는 보관 칸이다. Spring은 「지금 이 요청의 트랜잭션」 같은 것을 여기 넣어 둔다. 책갈피마다 따로라서, 일을 다른 책갈피에 넘기면 보관함 속 물건이 따라가지 않는다.

책대로 채운 양식 한 장 = 객체 (필드는 양식의 칸)
책대로 채운 양식 한 장

= 객체 (필드는 양식의 칸)

책(클래스)은 「주문은 이렇게 생겼다」는 설명이다. 주문 한 건은 그 책대로 채운 양식 한 장이고, 양식의 칸이 필드다. 양식은 책장이 아니라 창고에 쌓인다.

용어 · object
도서관 창고 — 양식철 = 힙
도서관 창고 — 양식철

= 힙

채운 양식(객체)을 쌓아 두는 곳이다. 한 도서관의 책갈피들이 같이 쓴다. 아무도 안 보는 양식은 청소 책(GC)을 읽는 책갈피가 치운다.

용어 · heap
꽂기 책 = 클래스 로더
꽂기 책

= 클래스 로더

JVM 도서관에 있는 책이다. 「아직 꽂히지 않은 책을 펴야 하면, 서고의 .jar 상자에서 가져와 꽂아라」가 적혀 있다. 처음부터 다 꽂지 않고, 처음 펴야 할 때 작업대가 이 책을 읽으며 그 책을 꽂는다.

용어 · class-loader
통역책 = 인터프리터
통역책

= 인터프리터

작업대는 기계어로 쓴 책만 읽는다. 자바 책은 바이트코드로 쓰여 있어서, 처음에는 작업대가 JVM의 통역책(기계어로 쓰인 책)을 읽으며 자바 책을 한 줄씩 풀어 간다.

용어 · interpreter
기계어 번역본 = JIT 기계어
기계어 번역본

= JIT 기계어

자주 읽는 장은 JVM의 번역 책(JIT)을 읽는 책갈피가 통째로 기계어로 번역해 둔다. 그다음부터 작업대는 통역책 없이 번역본을 바로 읽는다. 지상에서 만든 거라 지하에는 남지 않는다.

용어 · jit
즉석으로 써서 꽂은 책 = 실행 중 만든 클래스
즉석으로 써서 꽂은 책

= 실행 중 만든 클래스

Spring이 앱을 켜면서 새로 써서 책장에 꽂는 책이다. 아래의 대리 책(프록시)이 이렇게 생긴다. 지하에는 없다.

용어 · runtime-generated-class

도서관 안 배치 — 층 · 책장 · 책 · 장 · 문장

도서관의 층 = .jar · 모듈
도서관의 층

= .jar · 모듈

내 .jar가 한 층, JDK 기본 책이 또 한 층이다. 쓰는 라이브러리마다 층이 하나씩 는다.

용어 · jar
책장 = 도메인 패키지
책장

= 도메인 패키지

order/ · member/처럼 업무 하나의 책을 모은 책장이다.

책장 칸 = 계층 패키지
책장 칸

= 계층 패키지

책장 하나를 api/ · application/ · domain/ · infra/ 칸으로 나눴다. 어느 칸의 책이 어느 칸의 책을 펴도 되는지가 규칙이다.

책 한 권 = 클래스
책 한 권

= 클래스

Order 한 권이다. 「주문은 이렇게 생겼고, 이런 일을 할 수 있다」가 적혀 있다.

용어 · object
장(章) = 메서드
장(章)

= 메서드

cancel() 한 장이다. 장 하나는 한 가지 일만 적는다. 다른 장을 부르면 「저 책 몇 장을 펴라」가 적혀 있어서, 책갈피가 그 장으로 넘어갔다가 돌아온다.

문장 한 줄 = 코드 한 줄
문장 한 줄

= 코드 한 줄

status = CANCELED; 한 줄이다. 작업대가 책갈피를 따라 읽는 가장 작은 단위다(실제로는 기계어 명령 몇 개로 풀린다).

책 몇 권의 엮음 = 클래스 몇 개의 협력 (디자인 패턴)
책 몇 권의 엮음

= 클래스 몇 개의 협력 (디자인 패턴)

책 몇 권이 서로 「저 책 몇 장을 펴라」로 엮인 모양이다. 자주 나오는 엮음에 이름을 붙인 것이 디자인 패턴이다.

목차만 있는 책 = 인터페이스
목차만 있는 책

= 인터페이스

장 이름만 있고 본문이 빈 책이다. 다른 책이 그 목차대로 본문을 채운다(구현). 펴는 쪽은 목차만 보고, 누가 본문을 채웠는지 모른다.

용어 · interface
같은 표지를 씌운 대리 책 = 프록시 (@Transactional)
같은 표지를 씌운 대리 책

= 프록시 (@Transactional)

표지는 원래 책과 똑같다. 펴면 「트랜잭션을 연다 → 원래 책 cancel 장을 편다 → 확정한다」가 적혀 있다. 그래서 원래 책은 그대로 두고 앞뒤에 일을 끼운다.

용어 · proxy

버린 비유는 다시 꺼내지 않는다

버린 이유는 전부 「그 그림으로는 무엇이 안 그려졌나」다.

하드웨어 속 비유 아홉 칸 (쓸려 가는 흙 · 판과 탁자 · 판 32장 · 칩 넷 한 벌 · 벌판은 번지 지도 · 굳힌 흙 · 벽 스위치 · 벌판 관리 장비 · 서고 관리 장비) 2026-10-10

DRAM 셀 · 뱅크 · 행 버퍼 · 랭크 · 주소 매핑 · NAND · SRAM · 메모리 컨트롤러 · SSD 컨트롤러

그림 하나하나는 맞았다. 그런데 부품마다 땅에 자리를 주다가 메인보드 · 파워까지 오자 「땅이 메인보드가 되나?」가 나왔고, 세계관이 비유가 아니라 컴퓨터 배치도가 되어 갔다. 그래서 하드웨어는 비유하지 않고 하드웨어 & OS 의 부품 페이지에서 있는 그대로 보기로 했다. 세계관은 코드 이야기의 무대(벌판 · 장비층 · 작업대 · 서고 · 운반로 · 알람)까지만 그린다.

벌판 가장자리의 탁자 2026-10-10

행 버퍼

탁자는 번지가 없는 장비라 지상에 두면 「지상에는 번지 붙은 칸만」이 깨졌다. 판 바로 밑 장비층 천장으로 내렸다 — 흙이 아래로 떨어지는 그림이 「읽으면 흙이 빠진다」와도 맞는다.

판 배치대로 다시 그린 벌판 2026-10-10

물리 주소와 DRAM 자리

흙의 실제 자리는 정확했지만 도서관 부지 하나가 칩 16개 · 판 32장에 잘게 흩어져 위층 그림(도시 · 도서관 · 책)이 하나도 안 그려졌다. 위층은 아무도 판 자리를 보지 않아서, 벌판 그림은 번지 지도로 두고 판은 그 밑의 실제 자리로 따로 그렸다.

땅 한 칸의 스위치 8개 2026-10-10

비트

벌판 바닥에 칸마다 스위치가 박힌 그림이 됐다. 비트를 땅 위의 물건으로 그려서 「땅 위에 선 도서관」과 어긋났다. 비트는 땅 자체의 상태라 「흙이 차 있는 구덩이」로 바꿨다. 스위치는 땅이 아닌 장비(작업대 서랍 = SRAM)에만 남긴다.

새는 물통 2026-10-10

DRAM 셀

「전하가 샌다」는 그림은 정확했지만 땅이 물이 되어 「도서관이 물 위에 떠 있나?」가 됐다.

처진 스위치 · 계단등 스위치 · 충전지 2026-10-10

DRAM 셀

처진 스위치는 무엇이 처지는지 그려지지 않았다. 계단등 스위치와 충전지는 뜻은 맞지만 여전히 땅 위에 물건을 박는 그림이었다. 「땅을 채운다」에서 흙 구덩이가 나왔다.

지상 벌판에 파인 중앙 작업장 2026-10-10

CPU 의 자리

지상 벌판은 번지가 붙은 칸 전체, 곧 메모리다. 거기 작업장을 파 두면 「CPU가 메모리 칸을 차지한다」로 읽혔다. CPU는 메모리 번지를 하나도 쓰지 않는다. 지하 1층 장비층으로 내렸다 — 서고와 같은 층에 두면 「CPU가 디스크를 바로 읽는다」로 읽혀서 층을 나눴다.

땅 귀퉁이 비석 (지상) 2026-10-10

펌웨어

펌웨어는 메인보드의 플래시 칩에 있다. 지상(메모리)에 두면 메모리에 있는 것으로 읽혀 장비층으로 내렸다.

지하에 그린 중간 저수조 2026-10-10

페이지 캐시

페이지 캐시는 커널이 가진 메모리다. 지하에 그리면 디스크 쪽으로 읽혀 지상의 도시 땅 위로 올렸다.

사서 · 배정 담당 · 청소 담당 · 빈자리 지킴이 2026-10-10

클래스 로더 · 스케줄러 · GC · Idle

사람처럼 스스로 일하는 칸이라 「읽고 일하는 건 작업대뿐」과 부딪혔다. 실제로는 전부 작업대가 읽는 코드라 꽂기 책 · 배정 장 · 청소 책 · 쉼 장으로 바꿨다.

도시의 전력망 2026-10-10

운영체제가 가진 기반시설

전력은 하드웨어다. 소프트웨어인 도시가 가질 수 없어서 뺐다.

전류 한 줄기 2026-10-10

스레드

흐름은 그려졌지만 그림이 「건물에서 출발한 빛이 작업대로 간다」로 읽혀, 스레드가 소스를 들고 가는지 일을 보내는지가 헷갈렸다. 실제로는 작업대가 책갈피를 보고 스스로 읽어 온다. 그래서 책갈피로 바꿨다.

지하의 회로도 · 지상의 건물 2026-10-10

프로그램 · 프로세스

실행을 「읽기」로 바꾸면서 책 · 도서관으로 넘어갔다. 「책이 도서관을 만드나?」에서 한 번 더 고쳐, 도시가 꾸러미의 배치표대로 도서관을 세운다로 정했다.

건물 회로와 도시 회로를 잇는 접점 2026-10-10

시스템 콜

전류를 버리면서 같이 넘어갔다. 지금은 「도시 지침서를 펴라」는 문장이다 — 읽던 책에서 도시 책으로 넘어가는 모습이 그대로 그려진다.

단지 · 건물 · 세대 · 방 · 가전 · 버튼 · 부품 2026-10-10

코드 단위 (시스템 · 앱 · 패키지 · 클래스 · 메서드 · 변수)

클래스가 무슨 일을 하는지는 잘 보였지만 「누가 그 코드를 실행하나」를 그릴 자리가 없었다. 도서관 · 층 · 책장 · 책장 칸 · 책 · 장 · 문장으로 바꿔 「작업대가 책갈피를 따라 읽는다」와 한 그림에 담았다.

타이머 스위치 2026-10-10

프록시

가전 비유를 버리면서 같은 표지를 씌운 대리 책으로 바꿨다. 알람 시계(타이머)와 이름이 겹치던 문제도 함께 없어졌다.

로봇 2026-10-10

스레드

걸어 다니는 그림이라, 같은 스레드가 커널 코드를 실행하는 모습이 「로봇이 창구 안으로 걸어 들어간다」로 어색하게 읽혔다.

수도꼭지 · 민원 창구 2026-10-10

시스템 콜

수도꼭지는 물을 받는 그림이라 「부탁한다」로 읽히지 않았다. 민원 창구는 로봇이 걸어 들어가는 그림을 전제했다.

사람 · 직원 2026-10-09

스레드

사람에게는 손이 있어서 일하는 힘을 내는 CPU의 자리가 사라졌다. 읽는 쪽도 사람으로 두지 않고 「작업대가 읽는다」로 쓴다 — 사람이 다시 스레드로 읽힐 수 있어서다.

전원 16구 2026-10-09

CPU 논리 코어 16개

버린 게 아니라 넓혔다. 실제 CPU는 물리 코어 8개에 자리가 둘씩이고 캐시가 코어마다 붙어 있어서, 콘센트만으로는 캐시와 레지스터가 놓일 자리가 없었다.

엘리베이터로 지하에 내린다 2026-10-08

디스크에 저장

엘리베이터가 건물 소속으로 읽혀, 운반을 맡는 도시(운영체제)의 자리와 어긋났다.

콘센트 2026-10-08

시스템 콜

헥사고날 아키텍처의 「포트 = 콘센트」와 겹쳤다. 그 헥사고날 비유도 지금은 목차만 있는 책(인터페이스)으로 바뀌었다.

크기의 사다리 2026-10-08

크기의 단위

로드맵 백엔드 페이지에서 크기 순으로 늘어놓은 칸을 부르는 이름이었다. 밟고 올라가는 길로 읽혀 그 뜻이 흐려졌다.


java Hello가 화면에 글자를 찍기까지는 Study 4단계에서 따라간다

java Hello를 치고 화면에 「Hello, JDK」가 찍히기까지를 Study · JDK 4단계에서 22스텝으로 따라간다. 재생기 위에 이 세계관 그림이 붙어 있어서, 스텝을 넘기면 도서관이 서고 · 책이 꽂히고 · 책갈피가 넘어가는 모습이 함께 움직인다. 같은 흐름을 이 페이지에 따로 적지 않는 이유는 둘이 어긋나지 않게 하려는 것이다 — 스텝의 원본은 Study 데이터(_data/study/jdk/start.json) 하나다.


이 세계관을 정하기까지

펼쳐서 어떤 순서로 정했는지 보기

시작은 「운영체제는 무엇인가」였다. 앱이 건물이라면 운영체제는 그 건물을 올리는 인프라다. 도시의 지반이고, 하수도이고, 도로망이다. 그렇다면 컴퓨터 한 대는 땅 한 필지다. 앱끼리 주고받는 통신은 도로로 다닌다.

저장이 어디로 가는지에서 땅이 두 층이 됐다. DB가 기록을 저장한다면 그 기록은 결국 어디에 닿나? 처음에는 건물 엘리베이터를 타고 지하에 내리는 그림을 냈다. 그런데 엘리베이터는 건물 소속으로 읽혔다. 저장을 맡는 건 운영체제인데, 그 자리와 어긋났다. 그래서 땅 자체를 지상(메모리)과 지하 저장고(디스크)로 나눴다.

운영체제도 프로그램인데 왜 땅이 아닌지를 정했다. 땅은 하드웨어다. 운영체제는 프로그램이니 땅이 될 수 없고, 다른 건물과 달리 땅을 직접 만지는 권한이 있다. 그래서 관청과 기반시설, 곧 도시가 됐다.

스레드는 직원으로 나왔다가 로봇이 됐다. 직원에게는 손이 있다. 그러면 「일하는 힘은 CPU가 낸다」가 그림에서 사라진다. 그래서 건물 안 로봇에게 도시가 잠깐씩 전원을 넣어 준다고 바꿨다.

내 노트북을 재서 숫자를 박았다. 켜기 전에는 RAM 크기만 한 벌판만 있나? 그 질문에서 실제 사양을 봤다. 메모리 62.8 GB, SSD 932 GB, 논리 코어 16개였다. 건물(프로세스)은 537채, 스레드는 9,254개였다. 컴퓨터는 비트 단위로 움직이니 땅 한 칸이 있을 것이라는 말에서 「땅 한 칸 = 1바이트, 필지 묶음 = 4KB 페이지」가 나왔다.

「로봇의 기억칩은 메모리에 있는 것 아닌가」에서 CPU 안쪽까지 들어갔다. 그때는 스택을 「로봇의 기억칩」이라 불렀다(지금의 기록지). 맞았다. 스택은 땅에 있다. 그러면 CPU의 L1 · L2와 스레드의 메모리는 무엇이 다른가? 이 질문에서 전원 16구가 작업대 8개로 넓어졌다. 레지스터는 손바닥 메모, 캐시는 서랍 · 선반 · 공용 선반이 됐다.

「하드웨어는 전부 땅」을 원칙으로 세웠다. CPU도 캐시도 하드웨어라 땅에 있어야 한다는 지적에서 나왔다. 그래서 작업장이 필지 한가운데 땅에 박혔다. 모든 작업이 거기서만 일어나느냐는 물음에는 「명령 수행은 그렇고, 짐 나르기는 다른 장비가 한다」로 답했다.

9천 대의 순서를 누가 정하나에서 고리가 보였다. 재 보니 흐르는 줄기는 17개, 줄 서는 줄기는 0개, 기다리는 줄기는 9,434개였다(합이 앞의 9,254개와 다른 건 잰 시각이 달라서다. 그 사이 프로그램이 늘었다). 그런데 배정 담당도 자리를 써야 한다면 누가 그를 앉히나? 이 고리를 알람 시계 · 비상 연락판 · 차단기라는 하드웨어가 끊었다. 운영체제가 건물이 아니라 도시여야 하는 이유가 여기서 한 번 더 확인됐다. 도시는 줄을 서지 않고 불려 나온다. 도시에도 자기 줄기(커널 스레드)가 있다는 것도 재 봤다. 449개였다.

「같은 로봇이 도시 일을 한다」가 끝내 그려지지 않았다. java Hello를 순서대로 따라가 봐도 터미널 로봇이 왜 이미 있는지, 「수도꼭지를 당긴다」가 무슨 뜻인지가 막혔다. 앞의 것은 누가 누구를 세웠는지 실제로 따라가서 풀었다. 터미널 앱 → 셸 → 이 대화를 돌리는 Claude Code 순으로 건물이 건물을 세웠다. 뒤의 것은 수도꼭지를 민원 창구로 바꾸는 안을 냈는데, 그래도 「로봇이 창구로 걸어 들어간다」가 남았다.

로봇이 아니라 전기가 돌아다닌다고 보자는 말에서 방향이 꺾였다. 스레드를 전류 한 줄기로 바꾸니 메서드 호출, 시스템 콜, 컨텍스트 스위치가 전부 「전류가 어디로 흐르나」 하나로 그려졌다. 바꾸기 전에 세계관이 무너지는지 칸마다 대 봤다. 그때 기본표 열일곱 칸 중 열세 칸은 그대로였다. 세 칸(회로도 · 전류 한 줄기 · 접점)은 바뀌었고, 한 칸(로봇의 기억칩)은 기록지로 이름만 바꿨다. 지금 페이지는 기록지와 보관함을 카드 두 장으로 나눠서 기본표 카드가 열여덟 장이다. 전기가 「실행」을 뜻하게 되면서 이름이 겹친 곳이 둘 생겼다. 땅 밑 전선은 운반로로, 보관소 직원 · 점검 로봇은 회로로 바꿨다.

전류는 「누가 주체인가」를 거꾸로 그렸다. 그림에 자바 건물에서 작업대로 빛줄기가 흘러가게 그렸더니, 「스레드가 소스를 들고 CPU로 가나, 아니면 CPU에 일을 보내나」가 다시 헷갈렸다. 실제로는 둘 다 아니다. 작업대는 켜진 순간부터 늘 무언가를 읽고 있고, 바뀌는 건 「지금 누구의 쪽을 읽느냐」뿐이다. 순서는 늘 작업대 → (알람) 도시 지침서 → (배정) 프로그램의 코드다. 건물이 먼저 움직이는 순간은 없다.

그래서 실행을 「읽기」로 바꿨다. 「도서관의 책을 작업대가 읽는다」는 말에서 출발했다. 코드는 책, 스레드는 책갈피(어느 책 몇 쪽 몇째 줄)가 됐다. 처음에 「작업대에 있는 사람이 읽는다」로 냈지만, 사람을 두면 다시 「사람 = 스레드」로 읽힐 수 있어서 읽는 쪽은 작업대 자체로 뒀다.

「책이 도서관을 만드나?」에서 한 번 더 고쳤다. 프로그램을 책으로만 두면 책이 도서관을 세우는 것처럼 읽힌다. 실제로는 실행 파일에 「메모리 어디에 무엇을 놓아라」는 머리말이 있고, 그걸 읽고 프로세스를 만드는 건 운영체제다. 그래서 프로그램은 책 상자 + 배치표가 든 꾸러미, 프로세스는 도시가 그 배치표대로 세운 도서관이 됐다. 자바는 한 겹 더 있다. 도시가 세우는 건 JVM 도서관이고, 내 .jar는 사서(클래스 로더)가 필요할 때 한 권씩 꽂는 책 상자다.

코드 단위도 도서관 안으로 옮겼다. 백엔드 페이지에 이미 「단지 · 건물 · 세대 · 방 · 가전 · 버튼 · 부품」 비유가 있었다. 도서관으로 가면 같은 클래스가 한 곳에서는 가전, 다른 곳에서는 책이 된다. 둘을 놓고 봤다. 가전 비유는 클래스가 무슨 일을 하는지는 잘 보였지만, 「누가 그 코드를 실행하나」를 그릴 자리가 없었다. 그래서 도서관 · 층(jar) · 책장(도메인 패키지) · 책장 칸(계층 패키지) · 책(클래스) · 장(메서드) · 문장(코드 한 줄)으로 통일했다. 프록시는 같은 표지를 씌운 대리 책, 인터페이스는 목차만 있는 책이 됐다. 대가로 백엔드 페이지의 건물 그림을 도서관으로 다시 그렸다.

그다음 「책을 작업대에 갖다 주나」를 정했다. 책은 도서관을 떠나지 않는다. 작업대 장비가 책갈피가 가리키는 쪽을 64바이트씩 복사해 와서(캐시 라인) 서랍 · 선반 · 공용 선반에 두고 읽는다. 책갈피(프로그램 카운터)는 자리에 펴져 있는 동안만 작업대 손바닥에 있고, 기다리는 동안은 관청 서류함에 있다.

마지막으로 모순을 걸렀다. 「CPU가 지상 벌판(메모리) 위에 있는 건 말이 안 된다」는 지적에서 시작했다. 지상 벌판은 번지가 붙은 칸 전체라, 거기 작업장을 파 두면 CPU가 메모리 칸을 차지하는 것으로 읽힌다. 처음 제안은 SSD처럼 지하에 두는 것이었다. 그런데 지하는 「전기가 나가도 남는 곳」이라는 뜻을 들고 있고, CPU가 서고와 같은 층이면 「CPU가 디스크를 바로 읽는다」로도 읽힌다. 그래서 지하를 두 층으로 나눴다 — 지상 바로 밑 지하 1층이 장비층(CPU · 펌웨어 · 운반 장비), 가장 깊은 지하 2층이 서고(SSD)다. 거리도 실제와 같아진다. 메모리 바로 밑에 CPU가 있고, 디스크가 가장 멀다.

같은 기준 두 개로 나머지를 걸렀다 — 지상에는 메모리에 있는 것만, 읽고 일하는 건 작업대뿐. 비석(펌웨어 플래시 칩)은 장비층으로 내렸고, 지하에 그렸던 저수조(페이지 캐시)는 도시 땅 위로 올렸다. 사람처럼 일하던 사서 · 배정 담당 · 청소 담당 · 빈자리 지킴이는 전부 작업대가 읽는 책 · 장으로 바꿨다. 「도시가 ~한다」는 「작업대가 도시 지침서의 그 장을 읽으며 ~한다」의 줄임말로 정했다. 하드웨어인 전력망은 도시에서 뺐다.

RAM을 파고들다 「땅 한 칸의 속」을 다시 정했다. 부품마다 깊이 공부하기로 하고 RAM 1장(칸 하나의 실체)부터 들어갔다. 비트 하나는 축전기 하나와 트랜지스터 하나(DRAM 셀)이고, 축전기의 전하가 새서 32 ms 안에 모든 줄을 다시 채운다(리프레시). 이걸 처음에 「새는 물통」으로 그렸더니 「도서관이 물 위에 떠 있나?」가 됐다. 「처진 스위치」 · 「충전지」 · 「계단등 스위치」를 거쳤지만, 그러다 「땅 한 칸마다 스위치가 박혀 있는 것부터 웃기다」는 지적이 나왔다 — 기본표의 「스위치 8개」가 비트를 땅 위의 물건으로 그리고 있었다. 실마리는 「땅을 채운다」는 말이었다. 비트는 땅 위의 물건이 아니라 땅 자체의 상태, 곧 구덩이에 흙이 차 있나다. 벌판은 쓸려 가는 흙(DRAM), 서고는 굳힌 흙(NAND)이고, 작업대 서랍만은 땅이 아니라 장비라 벽 스위치(SRAM)로 남겼다. 여기서 두 가지가 따라 나왔다. 땅 위의 모든 것은 흙 무늬다 — 그래서 도서관이 「사라진다」는 도시가 대장에서 지우는 일이고, 흙은 다음에 내주기 전에 비운다. 그리고 책인지 양식인지는 흙에 적혀 있지 않고, 작업대가 읽는 방식과 도시가 붙인 꼬리표가 정한다. 이 과정에서 「더 깊이 들어가도 위층 그림의 재료로 설명한다」를 규칙으로 세웠다.

RAM 2장에서는 구덩이가 어떻게 모여 있는지를 내 노트북 막대로 따라갔다. 막대는 32 GB 두 장이고, 칩 구성은 「2Rx8 · 16Gb 칩 16개」였다. 그 칩의 데이터시트를 보니 칩 하나에 판(뱅크)이 32장, 판 하나에 줄이 65,536개, 줄 하나가 1 KB였다. 곱하면 정확히 32 GB가 나온다. 첫 쟁점은 읽는 법이었다. 구덩이는 판 위에 바둑판으로 놓여 있어서 한 칸만 집어 읽지 못한다. 줄 하나를 통째로 탁자(행 버퍼)에 떨어뜨렸다가 같은 무늬로 다시 채우고, 탁자에서 골라 보낸다. 1장에서 말한 「읽으면 흙이 빠진다」와 리프레시가 둘 다 이 탁자로 풀렸다. 탁자를 어디 둘지가 갈림길이었다. 벌판 가장자리(지상)에 두는 안은 탁자에 번지가 없어서 「지상에는 번지 붙은 칸만」을 깼다. 그래서 판 바로 밑 장비층 천장에 달았다. 판이 32장인 이유는 「줄 열기가 느려서 여러 판에 겹쳐 시켜 기다림을 숨긴다」로 정했다. 판 4장이 출구를 같이 쓰는 구획(뱅크 그룹)도 그렸다. 마지막 쟁점에서 처음으로 그림과 부딪혔다. 64바이트 조각 하나는 칩 넷이 16바이트씩 나눠 내고, 이웃한 번지 넷은 서로 다른 칩에 있다. 그러니 번지 순서대로 이어진 벌판 그림은 흙의 실제 자리가 아니다. 벌판을 판 배치대로 다시 그리는 안도 놓고 봤다. 그러면 도서관 부지 하나가 칩 16개와 판 32장에 잘게 흩어져 위층 그림이 하나도 안 그려진다. 위층에서 판 자리를 보는 쪽도 없다. 그래서 벌판 그림은 번지 순서로 펼친 지도로 두고, 지도와 판을 잇는 건 벌판 관리 장비뿐이라고 정했다. 여기서 「너무 어려워졌다」는 말이 나왔다. 그림 없이 판 · 탁자 · 구획 · 칩 한 벌 · 지도를 글로만 쌓았기 때문이라고 봤다. 그래서 숨은 구덩이(칩 안의 오류 검사 비트) 쟁점은 뒤로 미루고 2장을 셋으로 닫은 뒤 그림부터 만들었다.

그다음 하드웨어를 비유하지 않기로 했다. RAM 2장까지 오니 이 페이지에 하드웨어 칸만 29장이었다. 그래서 먼저 부품마다 페이지를 따로 두고 칸을 옮겼다(하드웨어 & OS). 그런데 부품 목록에 메인보드와 파워가 들어오자 「그럼 땅이 메인보드가 되나?」가 나왔다. 부품마다 땅에 자리를 주다 보면 결국 비유가 아니라 컴퓨터 배치도를 그리게 된다. 메인보드는 「층 사이 길이 깔린 바탕」, 파워는 「세계를 켜 두는 전기」로 이미 있는 그림의 재료에 두는 안도 냈다. 하지만 하드웨어는 비유할 필요 없이 있는 그대로 자주 와서 보는 게 맞다고 정했다. 그래서 세계관은 코드 이야기의 무대(벌판 · 장비층 · 작업대 · 서고 · 운반로 · 알람)까지만 그린다. 하드웨어 속을 비유한 아홉 칸(쓸려 가는 흙 · 판과 탁자 · 칩 넷 한 벌 · 번지 지도 · 굳힌 흙 · 벽 스위치 · 관리 장비 둘)은 버린 비유로 옮겼다. 하드웨어 자체는 부품 페이지에서 실제 이름과 이 PC에서 잰 값으로 본다.


정리

  • 비트는 구덩이에 흙이 차 있나다. 땅 위의 모든 것은 그 흙 무늬다
  • 하드웨어는 비유하지 않는다. 세계관은 코드 이야기의 무대(벌판 · 장비층 · 작업대 · 서고)까지만 그리고, 하드웨어 자체는 부품 페이지에서 있는 그대로 본다
  • 땅은 세 겹이다. 지상 벌판은 메모리, 지하 1층 장비층은 메모리가 아닌 하드웨어(CPU · 펌웨어 · 장비), 지하 2층 서고는 디스크다. 지상에는 메모리에 있는 것만 둔다
  • 운영체제는 도서관이 아니라 도시다. 스스로 움직이지 않는다 — 「도시가 한다」는 「작업대가 도시 지침서를 읽으며 한다」의 줄임말이다
  • 프로그램은 꾸러미, 프로세스는 도시가 그 배치표대로 세운 도서관이다. 코드는 책장의 책 · 장 · 문장이다
  • 스레드는 책갈피다. 책을 들고 다니지도, 작업대에 일을 보내지도 않는다
  • 읽는 것은 늘 작업대다. 책은 도서관에 있고, 작업대가 그 쪽을 복사해 와서 읽는다
최상단으로 이동했습니다!
확대 이미지

조회수: - · -

업데이트: