Chapter 14

클릭 한 번의 여행

지금까지 컴퓨터의 부품과 계층을 하나씩 따로 살펴봤다. 이 장에서는 모두를 한 무대에 올린다. 메신저 앱에서 친구에게 “안녕”이라고 쓰고 전송 버튼을 누르는, 하루에도 수십 번 하는 동작 하나를 슬로 모션으로 따라가 보자. 놀랍게도 이 책의 거의 모든 장이 그 0.1초 안에 등장한다.

네 가지 여행: 한 단계씩

아래 무대는 왼쪽부터 내 기기(앱, 운영체제, 하드웨어), 가운데 인터넷과 서버, 오른쪽의 상대편으로 이루어져 있다. 메시지 보내기, 웹 검색, 게임 한 장면, 사진 찍기 중 하나를 고르고 “다음”을 누를 때마다 데이터가 움직이고 아래 타임라인에 시간이 쌓인다.

SIMULATOR

클릭 한 번이 지나가는 길

시나리오
진행 0
아래 막대는 각 단계가 걸린 시간이다(로그 눈금: 한 칸에 10배). CPU와 운영체제 안의 일은 마이크로초 단위지만, 화면 갱신을 기다리거나 네트워크를 건너는 일은 밀리초 단위다.

만약 이 구간이 느리다면? 병목 찾기

컴퓨터가 “느리다”고 느껴질 때, 범인은 대개 한 곳이다. 아래에서 상황을 하나 골라 위 시뮬레이터의 시나리오에 적용해 보자. 어느 단계가 길어지는지, 전체 시간이 얼마나 늘어나는지, 그리고 그 상황이 어떤 시나리오에는 치명적이고 어떤 시나리오에는 상관없는지 비교해 보자.

EXPERIMENT

병목 실험실

상황
정상일 때 전체—
이 상황의 전체—
가장 오래 걸린 단계—
수치는 대표적인 크기를 단순화한 모델이다. 위 시뮬레이터의 시나리오를 바꾸면 이 실험도 같은 시나리오로 바뀐다. 해볼 것: “SSD 대신 HDD”는 사진 찍기에는 치명적이지만 메시지 보내기에는 거의 영향이 없다. “서버가 지구 반대편”은 그 반대다. 병목이 어디인지 알아야 돈을 어디에 써야 빨라지는지 알 수 있다.

여행에서 발견한 것들

이 여행에서 몇 가지 큰 원리가 반복해서 나타났다. 컴퓨터를 이해하는 핵심 아이디어들이다.

  1. 모든 것은 숫자다. 글자 “안녕”은 UTF-8 바이트가 되고, 화면의 픽셀은 RGB 숫자가 되고, 명령어도 숫자였다(2·4장).
  2. 계층과 추상화. 메신저 앱은 SSD의 블록도, Wi-Fi 전파도 모른다. 아래 계층이 쉬운 창구(파일, 소켓, 시스템 콜)를 제공하기 때문이다(8·10장).
  3. 가까운 곳에 두기. 레지스터, 캐시, 메모리, SSD, 그리고 서버의 CDN까지. 느린 곳을 덜 가게 만드는 것이 성능의 핵심이었다(6·11장).
  4. 동시에, 그리고 겹쳐서. 파이프라인, 멀티코어, GPU의 수천 유닛, TCP 윈도우 모두 “기다리는 동안 다른 일 하기”다(5·10·12장).
  5. 관리자는 필요하다. 인터럽트, 스케줄링, 가상 메모리, 보호. 수십 개의 앱이 싸우지 않고 하나의 하드웨어를 나눠 쓰게 하는 것이 운영체제다(8·9장).
  6. 물리 법칙은 피할 수 없다. 전력과 열은 클럭을, 빛의 속도는 네트워크 지연을 묶어 둔다(5·10장).

한눈에 보는 이 책

장한 문장 요약주방 비유
01 컴퓨터프로그램에 따라 데이터를 처리하는 기계.주방 전체
02 비트모든 정보는 0과 1의 패턴과 해석의 약속이다.재료의 표준 규격
03 논리스위치를 엮어 계산(덧셈기)과 기억(래치)을 만든다.칼과 냄비
04 CPU명령을 가져오고, 해석하고, 실행하기를 반복한다.요리사
05 성능겹쳐 하고(파이프라인), 짐작하고(예측), 나눠 한다(멀티코어).요리사의 요령
06 메모리가까울수록 빠르고 작다. 캐시는 지역성에 기댄다.손·선반·조리대
07 저장꺼져도 남는 창고. 파일 시스템이 정리한다.창고와 냉장고
08 OS자원을 나누고, 쉬운 창구를 주고, 서로를 보호한다.주방장
09 가상 메모리프로그램마다 자기만의 주소 공간이라는 착시를 준다.호텔 객실 번호
10 네트워크패킷으로 쪼개 계층별 봉투에 넣어 라우터가 한 걸음씩 나른다.엽서 배달
11 웹DNS → 연결 → 암호화 → 요청 → 렌더링.배달 주문
12 GPU독립적인 같은 일을 수천 유닛이 동시에.보조 요리사 군단
13 프로그램소스 코드 → 기계어, 스택과 힙 위에서 실행된다.레시피 번역
다음 걸음

더 깊이 공부하고 싶다면 대학 컴퓨터공학과의 “컴퓨터 구조”, “운영체제”, “컴퓨터 네트워크”, “컴파일러” 과목이 이 책의 각 부분을 한 학기씩 다룬다. 직접 만들어 보고 싶다면 NAND 게이트에서 시작해 컴퓨터와 운영체제까지 쌓아 올리는 공개 강좌 Nand2Tetris를 추천한다. 이어지는 “더 깊이” 파트(15~21장)에서는 입출력, 보안, 인공지능, 스마트폰, 알고리즘, 클라우드, 그리고 컴퓨터의 역사를 다루고, 22장 “나만의 컴퓨터 만들기”에서 배운 것을 모아 직접 조립해 본 뒤, 마지막 장의 용어집과 종합 퀴즈로 전체를 점검할 수 있다.

핵심 정리

  1. 메시지 하나를 보내는 데 입력 장치, 인터럽트, 운영체제, CPU, 메모리, 저장장치, 네트워크, 서버, GPU, 화면이 모두 참여한다.
  2. 각 계층은 아래 계층의 세부 사항을 모른 채 정해진 창구로만 협력한다.
  3. 컴퓨터 안의 일은 나노초~마이크로초, 네트워크 너머의 일은 밀리초 단위다. 체감 속도는 가장 느린 구간이 정한다.

확인 퀴즈

키보드에서 글자를 누른 사실을 CPU가 알게 되는 방법은?

인터럽트(8장) 덕분에 CPU는 계속 물어보지 않아도 사건을 즉시 알 수 있다.

메신저 앱이 메시지를 네트워크로 보낼 때 직접 Wi-Fi 칩을 조작하지 않는 이유는?

보호와 추상화(8장). 앱은 “이 데이터를 저 서버로 보내 줘”라고만 요청한다.

메시지 전송 과정에서 보통 가장 오래 걸리는 구간은?

컴퓨터 안의 일은 µs 단위, 네트워크 왕복은 수십 ms다. 1장의 시간 변환기로 치면 몇 년 차이다.