Skip to main content
Summary

컴퓨터는 사람의 행동을 그대로 이해하지 못한다

사람은 키를 누르고, 마우스를 움직이고, 화면을 보고, 소리를 듣는다. 하지만 컴퓨터 안쪽에서는 손가락, 빛, 공기의 떨림이 그대로 돌아다니지 않는다. 컴퓨터가 다룰 수 있는 것은 결국 0과 1의 신호다.

그래서 컴퓨터에는 번역가가 필요하다. 사람의 행동을 전기 신호와 숫자 코드로 바꾸어 주는 장치가 입력 장치이고, 컴퓨터 안의 숫자를 빛이나 소리로 바꾸어 주는 장치가 출력 장치다.

키보드는 "이 키가 눌렸다"를 숫자로 바꾼다. 화면은 "이 픽셀은 빨강 120, 초록 80, 파랑 200" 같은 숫자를 빛으로 바꾼다. 스피커는 소리의 모양을 나타내는 숫자들을 공기의 떨림으로 바꾼다.

이 장에서는 컴퓨터가 사람과 대화하는 문을 살펴본다.

입력과 출력의 번역가들AI 생성 이미지

키보드: 눌린 자리를 숫자로 바꾸는 표

키보드는 겉으로 보면 글자가 적힌 단추들의 모음이다. 하지만 안쪽을 단순하게 생각하면, 작은 스위치들이 줄과 칸으로 놓인 표와 비슷하다.

예를 들어 키보드 안에 여러 개의 가로줄과 세로줄이 있다고 하자. 어떤 키를 누르면 그 키가 있는 가로줄과 세로줄이 순간적으로 연결된다. 키보드 안의 작은 회로는 계속 이렇게 묻는다.

"1번 가로줄에 눌린 키가 있나?"

"2번 가로줄은?"

"이번에는 어떤 세로줄과 연결되었지?"

이처럼 줄과 칸을 차례로 확인하는 일을 스캔이라고 한다. 마트 계산원이 물건을 하나씩 찍어 확인하듯, 키보드 회로도 키의 상태를 빠르게 훑어본다.

중요한 점은 키보드가 처음부터 글자 A를 보내는 것이 아니라는 점이다. 키보드는 보통 "이 위치의 키가 눌렸다"는 숫자 코드를 보낸다. 이런 코드를 흔히 스캔 코드라고 부른다. 스캔 코드는 키의 위치를 알려 주는 번호표에 가깝다.

그다음 운영체제와 프로그램이 이 번호를 해석한다.

  1. 사용자가 어떤 키를 누른다.

  2. 키보드 안의 스위치가 연결된다.

  3. 키보드 컨트롤러가 눌린 위치를 찾는다.

  4. 그 위치를 나타내는 코드를 컴퓨터에 보낸다.

  5. 컴퓨터는 현재 키보드 배열과 Shift 키 상태를 보고 글자나 명령으로 해석한다.

예를 들어 같은 키라도 그냥 누르면 a가 되고, Shift와 함께 누르면 A가 된다. 한글 입력 상태에서는 같은 키가 한글 자모로 해석될 수도 있다. 키보드가 모든 언어를 혼자 아는 것이 아니다. 키보드는 "어느 키가 눌렸는지"를 알려 주고, 컴퓨터의 소프트웨어가 그 의미를 정한다.

키를 누를 때 금속 접점이 아주 짧은 시간 동안 여러 번 튕기듯 붙었다 떨어지는 일도 있다. 이것을 바운스라고 한다. 사람 눈에는 한 번 누른 것처럼 보이지만 회로에는 여러 번 눌린 것처럼 보일 수 있다. 그래서 키보드 컨트롤러는 잠깐 기다리거나 신호를 정리해서, 한 번 누른 키가 여러 번 입력되지 않도록 한다. 이것을 디바운스라고 한다.

키보드는 단순한 단추판이 아니다. 사람의 손가락 움직임을 컴퓨터가 읽을 수 있는 번호표로 바꾸는 입력 번역가다.

마우스: 움직임을 변화량으로 보내는 장치

마우스도 재미있는 번역가다. 마우스는 "화살표를 오른쪽 위로 옮겨라"라는 문장을 보내지 않는다. 대신 아주 짧은 시간 동안 얼마나 움직였는지를 숫자로 보낸다.

광학 마우스를 생각해 보자. 마우스 아래에는 작은 빛과 센서가 있다. 센서는 책상 표면의 무늬를 아주 빠르게 관찰한다. 작은 카메라가 책상 사진을 연속해서 찍는다고 상상하면 된다. 앞 사진과 뒤 사진을 비교하면 무늬가 어느 방향으로 얼마나 밀렸는지 알 수 있다.

마우스 컨트롤러는 그 차이를 계산해 컴퓨터에 보낸다.

  • x 방향으로 +5만큼 움직임

  • y 방향으로 -2만큼 움직임

  • 왼쪽 버튼 눌림

  • 휠이 한 칸 움직임

컴퓨터는 이 숫자들을 받아 화면 속 포인터 위치를 바꾼다. 마우스의 움직임은 실제로는 책상 위에서 일어나지만, 컴퓨터 안에서는 x와 y의 변화량이라는 숫자가 된다.

버튼은 키보드와 비슷한 스위치다. 눌리면 1, 떨어지면 0으로 해석할 수 있다. 휠도 돌아간 방향과 칸 수를 신호로 바꾼다. 이렇게 마우스는 손의 움직임과 클릭을 숫자 묶음으로 번역한다.

화면: 숫자를 빛의 모자이크로 바꾸기

출력 장치의 대표는 화면이다. 화면은 컴퓨터 안의 숫자를 사람이 볼 수 있는 빛으로 바꾸어 준다.

4장에서 우리는 그림이 픽셀이라는 작은 색 점들의 모음이라고 배웠다. 화면도 마찬가지다. 화면을 아주 가까이서 보면 수많은 픽셀이 줄지어 있다. 각 픽셀은 보통 빨강, 초록, 파랑 빛의 세기를 조절해 색을 만든다. 이것을 RGB 방식이라고 한다.

컴퓨터 안에는 화면에 무엇을 보여 줄지 담아 두는 메모리 공간이 있다. 이를 단순하게 화면용 메모리라고 생각하자. 여기에 각 픽셀의 색 숫자가 저장된다.

예를 들어 한 픽셀이 다음과 같은 값을 가진다고 하자.

  • 빨강: 255

  • 초록: 0

  • 파랑: 0

그러면 그 픽셀은 강한 빨강으로 보인다. 세 값이 모두 0이면 검은색에 가깝고, 모두 크면 흰색에 가까워진다.

화면 컨트롤러는 이 숫자들을 계속 읽는다. 그리고 "첫 번째 줄의 첫 번째 픽셀은 이 색, 그다음 픽셀은 이 색……"처럼 화면 패널에 신호를 보낸다. 화면은 이 신호에 맞춰 픽셀마다 빛의 세기를 바꾼다.

이 과정은 한 번만 일어나지 않는다. 화면은 1초에 여러 번 같은 일을 반복한다. 이것을 새로고침이라고 한다. 화면이 계속 켜져 있는 것처럼 보이는 이유는, 화면 컨트롤러가 매우 빠르게 픽셀 정보를 다시 보내고 있기 때문이다.

글자도 결국 픽셀이다. 컴퓨터가 A라는 글자를 보여 줄 때, 화면에 진짜 잉크 글자를 찍는 것이 아니다. 글꼴 정보에 따라 "어느 픽셀을 밝게 하고 어느 픽셀을 어둡게 할지"를 정한다. 글자는 작은 점들의 그림으로 바뀌고, 그 그림은 다시 RGB 숫자들의 모음이 된다.

즉 화면은 숫자 창고를 계속 읽어 빛의 모자이크로 바꾸는 출력 번역가다.

스피커: 숫자를 공기의 떨림으로 바꾸기

소리는 공기의 떨림이다. 손뼉을 치면 주변 공기가 밀리고 당겨지며 파동이 생긴다. 그 떨림이 귀에 도착하면 우리는 소리를 듣는다.

그런데 컴퓨터 안의 음악 파일은 공기의 떨림이 아니다. 음악 파일은 소리의 모양을 아주 짧은 순간마다 측정한 숫자들의 줄이다. 이 숫자 하나하나를 샘플이라고 부른다.

예를 들어 컴퓨터가 "지금 순간의 소리 세기는 10, 다음 순간은 15, 다음은 12……"처럼 숫자를 가지고 있다고 하자. 이 숫자들이 시간 순서대로 이어지면 소리의 모양을 나타낼 수 있다.

스피커로 소리를 내려면 이 숫자들이 다시 실제 떨림이 되어야 한다. 과정은 대략 이렇다.

  1. 컴퓨터가 소리 데이터를 읽는다.

  2. 오디오 장치가 숫자 샘플을 전기 신호의 높낮이로 바꾼다.

  3. 전기 신호가 스피커 안의 코일을 밀고 당긴다.

  4. 코일에 붙은 얇은 판이 앞뒤로 움직인다.

  5. 판의 움직임이 공기를 떨게 한다.

  6. 그 떨림이 귀에 도착해 소리로 느껴진다.

숫자를 부드러운 전기 신호로 바꾸는 장치를 디지털-아날로그 변환기, 줄여서 DAC라고 한다. 디지털은 계단처럼 끊어진 숫자 값이고, 아날로그는 물결처럼 이어지는 값이라고 생각하면 된다. DAC는 숫자 계단을 전기 물결로 바꾸는 다리 역할을 한다.

스피커는 전기 신호를 공기의 움직임으로 바꾼다. 그래서 같은 컴퓨터의 0과 1도, 화면으로 가면 빛이 되고 스피커로 가면 소리가 된다.

컨트롤러: 장치 옆의 작은 통역사

키보드, 마우스, 화면, 스피커는 모두 CPU와 직접 하나하나 대화하지 않는다. 장치마다 그 장치를 관리하는 작은 회로가 있다. 이것을 컨트롤러라고 한다.

컨트롤러는 장치 옆의 통역사이자 현장 관리자다.

키보드 컨트롤러는 키가 눌렸는지 스캔하고 코드를 만든다. 마우스 컨트롤러는 센서 정보를 읽고 움직임을 계산한다. 화면 컨트롤러는 화면용 메모리의 픽셀 값을 읽어 화면 패널에 맞는 신호로 바꾼다. 오디오 컨트롤러는 소리 데이터를 알맞은 속도로 내보낸다.

CPU가 모든 일을 직접 한다면 너무 바쁠 것이다. 키보드의 모든 줄과 칸을 계속 검사하고, 마우스 표면을 계속 비교하고, 화면의 모든 픽셀을 쉬지 않고 보내고, 스피커 파형까지 직접 만들기는 어렵다. 그래서 컨트롤러가 반복적이고 장치에 가까운 일을 맡는다.

컨트롤러는 CPU와 대화하기 위해 작은 저장 칸들을 제공하기도 한다. CPU는 그 칸에 명령을 쓰거나 상태를 읽는다. 예를 들어 "새 키 입력이 있니?", "소리 데이터를 더 받을 준비가 되었니?", "이 픽셀 정보를 화면에 보내라" 같은 대화가 신호와 숫자로 오간다.

지난 장에서 본 버스는 이런 대화가 지나가는 길이다. CPU, 메모리, 입출력 컨트롤러는 버스를 통해 주소, 데이터, 제어 신호를 주고받는다.

드라이버: 운영체제 안의 사용 설명서

컨트롤러가 하드웨어 쪽 통역사라면, 드라이버는 소프트웨어 쪽 통역사다. 드라이버는 운영체제 안에서 특정 장치를 어떻게 다뤄야 하는지 알려 주는 프로그램이다.

컴퓨터에 새 프린터나 그래픽 장치를 연결했을 때 드라이버가 필요하다는 말을 들어 본 적이 있을 것이다. 이유는 간단하다. 장치마다 명령을 받는 방식, 상태를 알려 주는 방식, 데이터 형식이 다를 수 있기 때문이다.

운영체제는 모든 장치의 세부 사정을 처음부터 다 알 수 없다. 그래서 드라이버가 중간에서 말한다.

"이 장치에 글자를 보내려면 이런 형식으로 보내야 해."

"이 장치는 지금 준비가 되었어."

"이 오류 코드는 종이가 없다는 뜻이야."

프로그램 입장에서는 복잡한 장치 사정을 다 알 필요가 없다. 그림을 그리는 프로그램은 "화면에 이 점을 표시해 줘"라고 요청하고, 음악 프로그램은 "이 소리를 재생해 줘"라고 요청한다. 운영체제와 드라이버가 그 요청을 장치가 이해할 수 있는 명령으로 바꾼다.

드라이버가 없다면 장치는 연결되어 있어도 제대로 말이 통하지 않을 수 있다. 마치 외국에서 기계를 샀는데 사용 설명서를 읽을 수 없는 상황과 비슷하다.

한 글자가 화면에 나타나기까지

이제 키보드에서 글자 하나를 눌렀을 때 어떤 일이 일어나는지 이어서 보자.

  1. 사용자가 A 키를 누른다.

  2. 키보드 안의 스위치가 연결된다.

  3. 키보드 컨트롤러가 눌린 위치를 찾아 스캔 코드를 만든다.

  4. 그 코드가 USB나 무선 통신을 통해 컴퓨터로 들어온다.

  5. 운영체제의 드라이버가 코드를 해석한다.

  6. 현재 입력 상태에 따라 a, A, 또는 다른 문자로 바뀐다.

  7. 프로그램은 그 문자를 문서 내용에 추가한다.

  8. 화면에 보여 줄 글자 모양이 픽셀 정보로 바뀐다.

  9. 화면 컨트롤러가 픽셀 색 숫자를 읽어 화면에 보낸다.

  10. 화면의 픽셀들이 빛을 내고, 사용자는 글자를 본다.

우리가 보기에는 "키를 눌렀더니 글자가 나왔다"이다. 하지만 그 사이에는 많은 번역이 숨어 있다. 손가락의 움직임은 스위치 신호가 되고, 스위치 신호는 코드가 되고, 코드는 문자가 되고, 문자는 픽셀 숫자가 되고, 픽셀 숫자는 빛이 된다.

컴퓨터는 사람의 세계를 그대로 이해하지 않는다. 대신 수많은 번역가들이 현실 세계와 0과 1의 세계 사이를 바쁘게 오간다.

컴퓨터가 세상과 만나는 문

CPU, 메모리, 버스만 있어도 계산은 할 수 있다. 하지만 그것만으로는 사람이 쓰는 컴퓨터가 되기 어렵다. 입력 장치가 없으면 바깥에서 정보를 넣을 수 없고, 출력 장치가 없으면 계산 결과를 확인할 수 없다.

입력 장치는 현실의 변화를 0과 1의 신호로 바꾼다. 출력 장치는 0과 1의 신호를 빛, 소리, 움직임 같은 현실의 변화로 바꾼다. 컨트롤러는 장치 가까이에서 신호를 정리하고, 드라이버는 운영체제 안에서 장치를 다루는 방법을 알려 준다.

이제 컴퓨터는 단순히 혼자 계산하는 상자가 아니다. 키보드로 말을 듣고, 마우스로 손짓을 읽고, 화면으로 보여 주고, 스피커로 소리를 낸다.

다음에 컴퓨터 화면에 글자가 나타나거나 음악이 흘러나올 때, 그 뒤에 있는 작은 번역가들을 떠올려 보자. 컴퓨터와 사람이 대화할 수 있는 이유는, 전기 신호와 현실 세계 사이를 바꾸어 주는 장치들이 있기 때문이다.

책 목록

처음부터 이해하는 컴퓨터 만들기

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기