NAND에서 컴퓨터까지: 컴퓨터 시스템의 기본 요소

XO Ruby Portland 2025 - Let's Build A Computer by Ryan Davis

작성자
jeff
발행일
2026년 01월 03일

핵심 요약

  • 1 가장 기본적인 NAND 게이트부터 시작하여 불리언 논리, 연산 장치(ALU), 메모리 시스템을 거쳐 완전한 컴퓨터를 구축하는 과정을 단계별로 설명합니다.
  • 2 복잡한 컴퓨터 시스템이 단순한 논리 게이트들을 계층적으로 쌓아 올리는 '하향식 설계(bottom-up design)' 원리를 통해 어떻게 구현되는지 상세히 다룹니다.
  • 3 CPU, RAM, ROM, I/O 장치 등 컴퓨터의 핵심 구성 요소들이 논리 회로와 메모리 요소를 기반으로 어떻게 상호 연결되어 작동하는지 아키텍처 관점에서 제시합니다.

도입

이 강연은 저명한 서적인 "Elements of Computing Systems" (일명 Nand to Tetris)의 내용을 기반으로, 가장 원초적인 논리 게이트인 NAND부터 시작하여 기능하는 컴퓨터 시스템을 구축하는 여정을 다룹니다. 연사는 우주에서 조난당한 조리사 보조라는 가상의 시나리오를 통해, 전원 공급 장치, NAND 게이트, 그리고 한 권의 책만으로 생존을 위한 컴퓨터를 만들어야 하는 상황을 제시합니다. 본 강연의 목표는 대부분의 사람에게 '마법의 상자'처럼 느껴지는 현대 컴퓨터의 내부 작동 원리를 바닥부터 이해시키고, 그 복잡성이 단순한 구성 요소들로부터 어떻게 진화했는지를 탐구하는 것입니다.

컴퓨터 하드웨어의 계층적 구축 원리

본 강연의 핵심은 ‘단순함에서 복잡성 구축(complexity from simplicity)’이라는 원칙 아래, 컴퓨터 시스템이 상향식(top-down)이 아닌 하향식(bottom-up)으로, 가장 기본적인 구성 요소부터 차례로 쌓아 올려 만들어진다는 점을 강조합니다.

  • 1단계: 불리언 논리 (Boolean Logic)
    • NAND 게이트: 모든 논리 회로를 만들 수 있는 ‘만능 게이트’로서 컴퓨터 구축의 시작점이 됩니다.
    • 기본 게이트 구현: NAND 게이트만을 사용하여 NOT, AND, OR, XOR과 같은 모든 기본 논리 게이트를 구현하는 과정을 시연합니다. 특히 드 모르간의 법칙(De Morgan’s Law)을 활용한 OR 게이트의 최적화가 소개됩니다.
    • 데이터 흐름 제어: MUX(Multiplexer)와 DEMUX(Demultiplexer)는 각각 ‘if 문’과 유사하게 여러 입력 중 하나를 선택하거나 하나의 입력을 여러 출력 중 하나로 분배하는 기능을 담당하며, 이들 또한 NAND 게이트로 구성됩니다.
    • 확장 논리: 8-way OR 게이트나 4-way MUX와 같이 더 넓은 비트 폭을 처리하는 논리는 이진 트리 구조나 작은 MUX들을 조합하여 효율적으로 구축됩니다. 16비트 논리는 단순히 16개의 동일한 회로를 병렬로 배치하는 방식으로 확장됩니다.
  • 2단계: 불리언 연산 (Boolean Arithmetic)
    • 가산기 (Adders): 초등학교에서 숫자를 더하는 방식과 유사하게, 2진수 덧셈을 수행하는 하프 가산기(Half Adder)와 풀 가산기(Full Adder)를 소개합니다.
    • 고속 가산기: 여러 풀 가산기를 직렬로 연결한 16비트 가산기는 지연(delay) 문제가 발생합니다. 이를 해결하기 위해 캐리를 병렬로 계산하는 캐리 예측 가산기(Carry Look Ahead Adder, CLA)가 도입되어 가산기의 깊이를 선형(linear)에서 로그(logarithmic)로 줄여 속도를 향상시킵니다.
    • ALU (Arithmetic Logic Unit): 컴퓨터의 핵심 연산 장치로, 두 개의 16비트 입력에 대해 다양한 연산(AND, ADD 등)을 수행하고 결과를 출력합니다. ALU는 모든 가능한 연산을 병렬로 계산한 후, 제어 플래그에 따라 원하는 결과만 선택하는 MUX 구조를 가집니다. 이는 프로그래밍 언어에서는 보기 힘든 하드웨어만의 독특한 특징입니다.
  • 3단계: 메모리 (Memory)
    • 순차 논리 (Sequential Logic): 입력과 출력 외에 ‘기억’ 기능을 가지며 클록 신호에 동기화됩니다.
    • DFF (Data Flip-Flop): 가장 기본적인 메모리 요소로, 이전 입력 값을 출력으로 유지합니다. DFF 또한 NAND 게이트만으로 구현 가능함을 보여줍니다.
    • 비트 및 레지스터: DFF와 MUX를 조합하여 데이터를 저장하고 로드할 수 있는 1비트 메모리(Bit)를 만들고, 이를 확장하여 16비트와 같은 더 넓은 값을 저장하는 레지스터(Register)를 구축합니다.
    • RAM (Random Access Memory): 여러 레지스터를 주소(address)로 접근할 수 있도록 구성한 메모리 뱅크입니다. DEMUX로 입력 데이터를 올바른 레지스터로 라우팅하고, MUX로 원하는 레지스터의 값을 출력합니다.
    • 카운터 (Counter): 프로그램의 다음 명령어 주소를 기억하고 제공하는 장치로, 레지스터와 증가기를 결합하여 만듭니다.
  • 4단계: 컴퓨터 아키텍처 (Computer Architecture)
    • CPU (Central Processing Unit): ALU와 제어 논리를 포함하는 컴퓨터의 핵심입니다. 메모리에서 명령어와 데이터를 가져와 처리하고, 결과를 메모리에 저장하며 다음 명령어 주소를 결정합니다.
    • ROM (Read-Only Memory): 프로그램 코드를 저장하며, 컴퓨터는 0번지부터 실행을 시작합니다.
    • 메모리 맵 I/O: 키보드와 화면은 메모리 주소에 매핑되어, 일반적인 메모리 접근 방식을 통해 입출력을 처리합니다.
    • 최종 컴퓨터: CPU, ROM, 메모리(RAM, 화면, 키보드 포함) 세 가지 주요 구성 요소를 연결하면 완전한 컴퓨터가 완성됩니다. 모든 구성 요소를 구축한 후에는 컴퓨터를 조립하는 과정은 놀랍도록 간단합니다.

결론

이 강연은 NAND 게이트라는 가장 기본적인 빌딩 블록에서 시작하여 CPU, 메모리, I/O 장치를 포함하는 완전한 컴퓨터 시스템을 바닥부터 구축하는 놀라운 여정을 성공적으로 보여주었습니다. 각 계층이 아래 계층의 단순한 구성 요소 위에 복잡성을 더해가는 '하향식 설계(bottom-up design)' 원리가 컴퓨터 공학의 근간임을 명확히 합니다. 특히, ALU와 메모리 구성 요소들이 어떻게 병렬 연산과 피드백 루프를 통해 작동하는지 시각적으로 설명함으로써 하드웨어의 작동 방식을 직관적으로 이해할 수 있도록 돕습니다. 비록 Ruby 언어가 개념 설명의 도구로 사용되었지만, 본질적으로는 모든 프로그래밍 언어의 기반이 되는 컴퓨터 아키텍처의 심오한 원리를 다루고 있습니다. 이는 현대의 복잡한 컴퓨터 시스템이 어떻게 단순한 논리에서 진화했는지를 통찰하게 하는 귀중한 경험을 제공하며, 아폴로 유도 컴퓨터(AGC)와 같은 실제 사례를 통해 그 중요성을 다시 한번 강조합니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!