2.1 컴퓨터가 하는 일의 큰 그림
먼저 숲을 보자. 세부적인 내용을 살펴보기 전에 전체 모습을 파악하면, 앞으로 배울 내용이 어디에 자리하고 어떻게 연결되는지 이해하기가 쉬워진다. 앞 장에서 말한 첫 번째 단계, 컴퓨터 동작의 큰 그림을 그려보는 데서 시작한다.
앞 장에서 살펴본 칩은 컴퓨터라는 큰 시스템의 일부로서 그 안에서 특정한 역할을 수행한다. 따라서 코드로 시킨 일을 칩들이 어떻게 수행하는지 이해하려면, 컴퓨터 전체가 어떻게 동작하는지, 어떤 부품들이 어떤 역할을 맡고 어떻게 협력하는지를 먼저 파악할 필요가 있다. 그래서 구체적인 동작을 이야기하기에 앞서, 다소 추상적일 수 있지만 컴퓨터의 전체적인 구조와 동작부터 살펴보려 한다.
앞 장에서 보았듯 컴퓨터의 기본 동작은 입력, 연산, 기억, 출력 네 가지다. 여기서 연산은 숫자를 더하거나 빼는 계산뿐 아니라 두 값을 비교하는 일도 포함한다. 기억은 그 일에 쓸 정보와 결과를 담아두는 일이다. 정보란 숫자나 글자, 사진처럼 컴퓨터가 다루는 내용을 뜻하며, 이를 데이터라고 부른다.
이 넷 가운데 컴퓨터가 실제로 일을 해내는 자리는 연산과 기억이다. 컴퓨터가 하는 일을 크게 보면, 기억 공간에 있는 데이터를 읽고 연산하여 필요한 결과를 다시 기억하는 일이기 때문이다. 연산을 하려면 그 데이터를 기억하고 있어야 하고, 연산한 결과도 이후에 쓸 수 있도록 다시 기억해야 한다. 둘은 이렇게 맞물려 돌아간다. 입력은 기억 공간에 데이터를 넣어주고, 출력은 기억 공간에 있는 결과를 꺼내 보여준다. 없어서는 안 될 일이지만 바깥과 맞닿은 창구에 가깝다. 앞 장에서 말했듯 이 책이 따라가는 것도 연산과 기억이다.
그런데, 컴퓨터는 꽤나 수동적이다. 우리가 원하는 일을 하기 위해서는 컴퓨터에게 어떤 데이터를 가져와 무엇을 계산하고, 그 결과를 어떻게 사용할지도 정해주어야 한다. 앞 장에서 이런 일을 정해놓은 것이 프로그램이라고 했다. 컴퓨터가 받는 쪽에서 보면, 무슨 일을 어떤 순서로 할지와 그 일에 쓸 재료가 무엇인지를 함께 적어 건네는 일종의 지시서인 셈이다. 프로그램은 코드로 작성되는데, 컴퓨터는 이 프로그램이라는 지시서의 방법과 순서에 따라 기억 공간에 있는 데이터를 읽고 연산하고 출력한다. 같은 일을 반복하기도 하고 조건에 따라 다음에 할 일이 달라지기도 하지만, 그 반복과 갈림길까지도 지시서에 적혀 있는 것이다.
이렇게 보면 컴퓨터의 기본 동작은 꽤 단순하다. 기억 공간에 있는 데이터를, 지시서에 따라, 연산하여 다시 기억하는 것이다. 이것이 컴퓨터 동작의 핵심이고, 이 동작을 칩들이 수행하게 된다. 이 기본 동작이 앞으로 우리가 살펴볼 복잡한 컴퓨터 동작의 출발점이니, 잘 기억해두기를 바란다.

하지만 우리가 실제로 사용하는 컴퓨터의 모습은 이 설명보다 훨씬 복잡하고 화려하다. 여러 개의 윈도우 창을 띄워놓고 여러 가지 일을 한 번에 할 수 있고, 게임 화면은 거의 실제와 구분하기 어려울 정도로 사실적으로 표현된다. 인터넷에 연결되어 다른 컴퓨터와 정보를 주고받기도 한다.
정말 이 모든 것이 앞서 설명한 단순한 기본 동작(입력, 연산, 기억, 출력 4가지 기능)을 하는 컴퓨터로 가능할까? 단순히 숫자를 계산하고 결과를 기억하는 일이 어떻게 생생한 게임 화면과 인터넷 통신으로 이어지는지 쉽게 상상되지 않을 수도 있다. 이 책에서는 그 사이를 하나씩 연결하며, 단순한 기본 동작이 어떻게 복잡한 일을 이루어내는지 이해해볼 것이다.
아직 명확히 와닿지 않아도 괜찮다. 같은 원리를 다음 절에서 조금 더 구체적으로 다시 만나게 된다.