Programmers

[85일차]컴퓨터의 언어부터 설계까지: 정보의 표현과 구조적 이해

PARKpatchnotes 2026. 1. 21. 14:32

개발자로서의 성장은 코드를 '작성'하는 것에서 멈추지 않고, 코드가 '동작'하는 원리를 이해하는 데서 시작된다. 단순히 라이브러리나 프레임워크를 사용하는 것을 넘어, 컴퓨터가 데이터를 어떻게 이해하고 처리하는지, 그리고 그 하드웨어적인 설계가 소프트웨어에 어떤 영향을 미치는지 파악하는 것은 매우 중요하다.

이 글에서는 CS 지식의 가장 밑바닥이라 할 수 있는 정보의 표현컴퓨터의 설계 원리에 대해 깊이 있게 다뤄보고자 한다.


1. 기초를 공부해야 하는 이유

왜 우리는 당장 실무에 쓰이지 않을 것 같은 0과 1, 그리고 하드웨어 구조를 배워야 할까?

첫째, 소통의 비용을 줄이기 위함이다. 엔지니어 간의 대화에서 '오버플로우(Overflow)', 'MSB', '부동소수점 오차' 같은 용어는 현상을 설명하는 가장 정확하고 효율적인 언어다.

둘째, 원리에 대한 이해는 문제 해결의 열쇠가 된다. 원인 모를 버그가 발생했을 때, 컴퓨터 내부 동작 방식을 아는 사람은 문제의 본질을 꿰뚫어 볼 수 있다.

셋째, 사고방식의 확장이다. 컴퓨터의 제약 사항과 논리 구조를 이해하면, 단순히 기능을 구현하는 것을 넘어 '효율적'이고 '최적화'된 설계를 할 수 있는 바탕이 마련된다.

결국 기초 지식은 나의 생각을 논리적으로 표현하고, 시스템을 장악하기 위한 필수 무기이다.


2. 디지털 정보의 표현 (Data Representation)

컴퓨터는 전기가 흐르거나(On), 흐르지 않는(Off) 물리적 현상을 논리적인 정보로 변환하여 세상을 이해한다.

2.1 디지털(Digital)과 비트(Bit)

**디지털(Digital)**이란 연속적인 값(아날로그)을 불연속적인 값으로 표현하는 방식이다. 컴퓨터는 전압의 고저를 통해 **0(False)**과 **1(True)**이라는 두 가지 상태만을 인식한다. 이 정보의 최소 단위를 **비트(Bit, Binary Digit)**라고 한다.

하나의 비트는 너무 작기 때문에 컴퓨터는 비트들을 묶어서 데이터를 처리한다.

  • Nibble (니블): 4bit를 묶은 단위이다. 16진수(Hexadecimal) 한 자리를 표현하기에 적합하다.
  • Byte (바이트): 8bit를 묶은 단위이다. 현대 컴퓨터 시스템에서 데이터를 처리하는 가장 기본적인 단위가 된다. (예: 00111000)

2.2 비트의 위치: MSB와 LSB

비트가 나열되어 있을 때, 각 위치가 가지는 가중치는 다르다.

  • MSB (Most Significant Bit): 최상위 비트. 가장 왼쪽의 비트로, 숫자의 크기에 가장 큰 영향을 미치거나 부호(Sign)를 결정하는 중요한 역할을 한다.
  • LSB (Least Significant Bit): 최하위 비트. 가장 오른쪽의 비트로, 짝수/홀수를 결정하거나 값의 미세한 변화를 담당한다.

2.3 문자의 표현: ASCII와 Unicode

숫자뿐만 아니라 문자도 2진수로 약속되어 저장된다.

  • ASCII Code (아스키 코드): 7bit를 사용하여 영문 대소문자, 숫자, 특수기호를 표현한다. 128개의 문자만 표현 가능하여 한글이나 다른 언어를 담기엔 역부족이었다.
  • Unicode (유니코드): 전 세계의 모든 문자를 일관되게 표현하기 위해 만들어진 국제 표준이다. UTF-8, UTF-16 등의 인코딩 방식을 통해 가변적인 길이(1~4바이트)로 문자를 저장하며, 현대 웹과 OS의 표준이 되었다.

3. 이진수로 표현한 정수와 실수

컴퓨터가 가장 잘하는 것은 '계산'이다. 하지만 0과 1만으로 음수와 소수점이 있는 실수를 표현하는 것은 생각보다 복잡한 설계를 요구한다.

3.1 음수의 표현과 뺄셈의 원리

컴퓨터 하드웨어에는 '뺄셈기'가 별도로 존재하지 않는 경우가 많다. 대신 음수를 표현하는 방식을 교묘히 이용하여 뺄셈을 덧셈으로 처리한다. ($A - B$를 $A + (-B)$로 계산)

  1. 부호와 절대치(Sign and Magnitude): 최상위 비트(MSB)를 부호 비트로 쓴다 (0은 양수, 1은 음수). 하지만 +0과 -0이 존재하는 모순이 생기고 연산이 복잡하다.
  2. 1의 보수 (1's Complement): 모든 비트를 반전시킨다(0->1, 1->0). 여전히 +0과 -0 문제는 존재한다.
  3. 2의 보수 (2's Complement): 1의 보수에 1을 더한다. 현대 컴퓨터가 사용하는 표준 방식이다. +0과 -0의 중복을 없애고, 뺄셈을 완벽하게 덧셈 회로로 수행할 수 있게 해준다.

3.2 실수의 표현: 고정소수점과 부동소수점

실수(Real Number)는 정수 사이에 무한한 숫자가 존재하기에 표현이 더욱 까다롭다.

  • 고정 소수점 (Fixed Point): 소수점의 위치를 고정해두고 정수부와 소수부를 나눈다. 구현은 단순하지만 표현할 수 있는 수의 범위가 매우 좁다.
  • 부동 소수점 (Floating Point): 소수점의 위치가 둥둥 떠다닌다(Float)는 의미다. 수를 $1.xxxx \times 2^n$ 형태(가수와 지수)로 저장한다. (IEEE 754 표준).
    • 장점: 매우 큰 수나 매우 작은 수를 표현할 수 있다.
    • 단점: 정확한 값이 아닌 근사값을 저장하므로, 미세한 정밀도 오차가 발생할 수 있다. 금융 계산 등에서 주의가 필요하다.

4. 컴퓨터 연산 하드웨어 (논리회로)

소프트웨어의 논리 연산은 하드웨어 레벨에서 '게이트(Gate)'라는 물리적 회로를 통해 수행된다.

4.1 기본 논리 게이트

명제 논리를 전기 신호로 구현한 것이다.

  • 기본 게이트: AND(둘 다 참일 때 참), OR(하나라도 참이면 참), NOT(반전).
  • 범용 게이트: NAND, NOR. 이 두 가지 게이트만 있으면 위의 모든 기본 게이트를 만들어낼 수 있어 칩 설계 시 매우 중요하다.
  • 배타적 논리합 (XOR): 두 입력이 다를 때만 1을 출력한다. 이 특성은 이진수 덧셈에서 자리 올림(Carry)을 제외한 합을 구하는 데 핵심적인 역할을 한다.

4.2 가산기 (Adder): 계산하는 회로

컴퓨터의 덧셈은 XOR와 AND 게이트의 조합으로 이루어진다.

  • 반가산기 (HA, Half Adder): 두 비트를 더해 합(Sum)과 자리올림(Carry)을 출력한다. 이전 자리에서 올라온 올림수를 처리하지 못한다.
  • 전가산기 (FA, Full Adder): 하위 비트에서 올라온 자리올림수(Carry In)까지 포함하여 3개의 비트를 더할 수 있다.
  • 리플 캐리 가산기 (Ripple Carry Adder): 전가산기를 여러 개 연결하여 다비트(Multi-bit) 덧셈을 수행한다. 단, 하위 비트의 캐리가 상위로 전달될 때까지 기다려야 하므로 지연 시간(Delay)이 발생한다.
  • 가감산기 (Adder-Subtractor): XOR 게이트를 활용해 하나의 회로로 덧셈과 뺄셈을 모두 수행하도록 만든 회로다. (2의 보수 개념 활용)

4.3 ALU (Arithmetic Logic Unit)

CPU의 핵심 부품인 ALU(산술논리연산장치)는 위의 가산기와 논리 게이트들을 모아놓은 집합체다. 제어 신호에 따라 덧셈, 뺄셈, AND, OR 등의 연산을 수행한다.

4.4 조합 논리와 순차 논리

  • 조합 논리 (Combinational Logic): 현재의 입력만이 출력을 결정한다. (예: 가산기, ALU). 기억 능력이 없다.
  • 순차 논리 (Sequential Logic): 현재의 입력뿐만 아니라 **'이전 상태(과거의 입력)'**가 출력에 영향을 미친다. 이를 위해 값을 저장하는 **메모리(플립플롭, 레지스터)**가 필요하다. 컴퓨터가 '기억'을 가지고 프로그램을 수행할 수 있는 기반이 된다.

5. 튜링 기계와 폰 노이만 구조

컴퓨터의 설계 철학은 수학적 모델에서 시작하여 실용적 구조로 발전했다.

5.1 튜링 기계 (Turing Machine)

앨런 튜링이 제안한 개념적인 계산 모델이다. 무한한 테이프에 기호를 쓰고 지우는 단순한 작업만으로도 세상의 모든 계산 가능한 문제를 해결할 수 있음을 증명했다. 이는 현대 컴퓨터 소프트웨어의 이론적 기원이 된다.

5.2 폰 노이만 구조 (Von Neumann Architecture)

초기 컴퓨터(에니악 등)는 프로그램을 바꿀 때마다 전선을 재배치해야 했다. 폰 노이만은 **"프로그램(명령어)도 데이터처럼 메모리에 저장해두고 꺼내 쓰자"**는 혁신적인 제안을 했다. 이를 **프로그램 내장 방식(Stored-program concept)**이라고 한다.

  • 구조: CPU(제어장치+ALU), 메모리, 입출력 장치, 버스(Bus)로 구성된다.
  • 특징: 현재 우리가 사용하는 거의 모든 컴퓨터(PC, 스마트폰)는 폰 노이만 구조를 따른다.
  • 폰 노이만 병목현상: CPU의 속도는 비약적으로 빨라졌지만, 메모리의 속도가 이를 따라가지 못해 전체 시스템 성능이 저하되는 현상이 발생하기도 한다. 이를 해결하기 위해 캐시(Cache) 메모리 등이 도입되었다.

6. 마치며

우리가 작성한 코드는 결국 컴파일되어 0과 1의 조합으로 변하고, 메모리에 적재되어(폰 노이만), ALU(조합 논리)와 레지스터(순차 논리)를 오가며 처리된다.

이러한 하드웨어와 데이터 표현의 기초 원리를 이해하는 것은 건물을 지을 때 단단한 지반을 다지는 것과 같다. 이 지식을 바탕으로 앞으로 이어질 컴퓨터 구조, 운영체제, 데이터베이스 등의 심화 학습에서 "왜 이렇게 설계되었는가?"에 대한 답을 스스로 찾을 수 있게 될 것이다.