Programmers

[86일차]하드웨어부터 데이터까지: 컴퓨터 구조, OS, 그리고 데이터베이스

PARKpatchnotes 2026. 1. 22. 18:43

지난 글에서 정보의 표현과 논리 회로라는 가장 기초적인 단위를 다루었다면, 이번에는 그 위에서 돌아가는 거대한 시스템을 조망해본다. 컴퓨터 하드웨어의 설계 원칙(컴퓨터 구조), 하드웨어를 효율적으로 관리하는 소프트웨어(운영체제), 그리고 현대 서비스의 핵심인 데이터 관리(데이터베이스)까지, 개발자가 반드시 알아야 할 시스템의 뼈대를 정리한다.


1. 컴퓨터 구조의 설계와 구현

컴퓨터는 마법 상자가 아니다. 철저하게 계산된 공학적 설계물이다.

1.1 하드웨어의 핵심: CPU와 ISA

컴퓨터의 두뇌인 **CPU(중앙처리장치)**는 크게 세 부분으로 나뉜다. 연산 순서를 제어하는 제어장치(Control Unit), 실제 계산을 담당하는 ALU(산술논리연산장치), 그리고 연산 데이터를 잠시 저장하는 초고속 메모리인 **레지스터(Register)**다.

소프트웨어가 하드웨어와 소통하기 위해서는 약속이 필요한데, 이를 **ISA(명령어 집합 구조)**라고 한다. (예: x86, ARM). 반면, 이 ISA를 실제 물리적으로 어떻게 구현했는지를 **마이크로아키텍처(Microarchitecture)**라고 하며, Intel과 AMD가 같은 x86 명령어를 쓰면서도 성능이 다른 이유가 바로 이 설계가 다르기 때문이다.

  • CISC: 복잡하고 다양한 명령어를 지원 (코드 길이 감소, 하드웨어 복잡).
  • RISC: 단순하고 핵심적인 명령어만 지원 (하드웨어 단순, 파이프라이닝 유리).

현대 CPU는 효율을 극대화하기 위해 명령어 파이프라인(Instruction Pipeline) 기법을 사용한다. 마치 공장 조립 라인처럼, 하나의 명령어가 끝나기 전에 다음 명령어를 미리 가져와 실행하여 처리량(Throughput)을 높인다.

1.2 기억장치의 계층 구조 (Memory Hierarchy)

"빠른 것은 비싸고, 싼 것은 느리다." 이 경제적 법칙을 극복하기 위해 컴퓨터는 계층 구조를 택했다. CPU에 가까울수록 빠르지만 용량이 작고, 멀수록 느리지만 용량이 크다.

  1. 레지스터: CPU 내부. 가장 빠름.
  2. 캐시 메모리 (L1, L2, L3): CPU와 주기억장치 사이의 속도 차 완충.
  3. 주기억장치 (RAM): 실행 중인 프로그램이 상주.
  4. 보조기억장치 (HDD, SSD): 전원이 꺼져도 데이터 저장.


2. 프로그램의 번역과 실행

우리가 작성한 고수준 언어(C, Java, Python)는 컴퓨터가 이해할 수 없다. 번역 과정이 필수적이다.

2.1 언어의 레벨과 번역기

  • 컴파일러: 소스 코드 전체를 한 번에 기계어(목적 코드)로 번역한다. 실행 속도가 빠르다. (C, C++)
  • 인터프리터: 코드를 한 줄씩 해석하며 실행한다. 수정이 용이하나 실행 속도는 느리다. (Python, JS)
  • 하이브리드: 중간 코드(Bytecode)로 컴파일 후, 가상 머신(VM) 위에서 실행한다. (Java)

2.2 빌드 과정: 링커와 로더

소스 코드가 목적 파일(Object File)로 변환되었다고 끝이 아니다. 여러 목적 파일과 라이브러리를 하나로 합치는 **링커(Linker)**의 작업을 거쳐야 비로소 실행 파일(.exe)이 된다. 이후 프로그램을 실행하면 **로더(Loader)**가 이를 메모리에 적재하여 CPU가 처리할 수 있게 만든다.


3. 운영체제(OS): 시스템의 지휘자

운영체제는 컴퓨터 하드웨어 자원을 효율적으로 관리하고, 사용자에게 편리한 인터페이스를 제공하는 시스템 소프트웨어다.

3.1 커널(Kernel)과 시스템 콜

OS의 핵심 심장부를 커널이라 한다. 메모리에 상주하며 프로세스, 메모리, 입출력 등 핵심 자원을 관리한다. 응용 프로그램은 하드웨어를 직접 제어할 수 없다. 따라서 커널에게 "파일을 읽어줘", "화면에 띄워줘"라고 부탁해야 하는데, 이 인터페이스를 **시스템 콜(System Call)**이라고 한다.

3.2 프로세스 관리와 스케줄링

프로그램이 저장장치에 있는 코드 덩어리라면, 프로세스는 메모리에 적재되어 실행 중인 프로그램이다.

  • 생명주기: 생성(Start) → 준비(Ready) → 실행(Running) → 대기(Waiting) → 종료(Terminated)
  • 스레드(Thread): 프로세스 내에서 실행되는 흐름의 단위. 프로세스 자원을 공유하므로 생성 및 전환 비용이 저렴하다.

CPU는 한 번에 하나의 일만 할 수 있다. 따라서 여러 프로세스를 번갈아 가며 실행하여 동시에 실행되는 것처럼 보이게 하는 스케줄링이 중요하다.

  • 선점형(Preemptive): OS가 강제로 CPU를 뺏어올 수 있음 (현대 OS).
  • 비선점형(Non-preemptive): 프로세스가 끝날 때까지 기다려줌.

4. 메모리와 입출력 관리 (가상화의 마법)

OS는 한정된 물리 자원을 추상화하여 무한한 것처럼 보이게 한다.

4.1 가상 메모리 (Virtual Memory)

실제 RAM 용량보다 더 큰 프로그램을 실행할 수 있게 해주는 기술이다. **MMU(Memory Management Unit)**가 가상 주소를 물리 주소로 실시간 변환한다.

  • 페이징(Paging): 메모리를 고정 크기(Page)로 잘라서 관리. 외부 단편화 해결.
  • 세그먼테이션(Segmentation): 논리적 단위(함수, 배열 등)로 잘라서 관리.
  • Page Fault: 필요한 데이터가 RAM에 없을 때 발생하며, 이때 보조기억장치에서 데이터를 가져온다.

이 시스템이 효율적인 이유는 참조의 지역성(Locality) 때문이다. 프로그램은 한 번 참조한 데이터 근처(공간적)나, 최근에 참조한 데이터(시간적)를 다시 쓸 확률이 매우 높다. 이를 이용해 TLB나 캐시의 적중률을 높인다.


5. 데이터베이스: 데이터의 구조화

데이터가 자산인 시대, 데이터를 어떻게 저장하고 무결성을 유지하느냐는 핵심 이슈다.

5.1 관계형 데이터베이스 (RDBMS)

데이터를 2차원 표(Table) 형태로 관리한다. 엄격한 스키마와 관계를 통해 데이터의 중복을 최소화하고 일관성을 유지한다.

  • 구성: 튜플(Tuple, 행), 속성(Attribute, 열), 식별자(PK).
  • 트랜잭션(Transaction): 작업의 완전성을 보장하는 단위. ACID 특성(원자성, 일관성, 고립성, 지속성)을 반드시 만족해야 한다.
  • SQL: 데이터베이스와 대화하는 언어. (DML: 조회/수정, DDL: 구조 정의, DCL: 권한 제어, TCL: 트랜잭션 제어)

5.2 ORM (Object-Relational Mapping)

개발자가 SQL을 직접 짜지 않고, 객체지향 언어(Java, Python 등)의 객체(Class)를 통해 DB를 다루는 기술이다. 생산성은 높여주지만, 복잡한 쿼리에서는 성능 최적화가 필요하다. (예: JPA, Django ORM)


6. 차세대 데이터 관리: 벡터 DB와 NoSQL

정형화된 데이터를 넘어 비정형 데이터와 AI 시대를 위한 DB가 부상하고 있다.

6.1 벡터 데이터베이스 (Vector DB)

텍스트, 이미지 등 비정형 데이터를 벡터 임베딩(Vector Embedding), 즉 숫자의 배열로 변환하여 저장한다.

  • 핵심: 단순히 키워드가 같은 것을 찾는 게 아니라, **의미적 유사도(Similarity)**가 가까운 것을 찾는다.
  • 기술: 방대한 벡터 공간에서 빠르게 이웃을 찾기 위해 LSH, ANNOY 등의 근사 탐색 알고리즘을 사용한다.
  • 활용: AI 추천 시스템, 챗봇의 지식 검색(RAG), 이미지 검색 등.

6.2 NoSQL

RDBMS의 경직된 스키마를 벗어나, 유연성과 확장성(Scale-out)에 초점을 맞춘 DB다. 대용량 분산 처리에 적합하며, Document(MongoDB), Key-Value(Redis) 등 다양한 형태가 존재한다.


마치며

컴퓨터 구조가 튼튼한 건물을 짓기 위한 자재와 공법이라면, 운영체제는 그 건물을 관리하는 시스템이고, 데이터베이스는 건물 안에 채워지는 귀중한 자산들을 체계적으로 정리하는 금고와 같다. 이 기초적인 흐름을 이해하는 것은 단순히 지식을 쌓는 것을 넘어, 시스템 전체를 관통하는 통찰력을 기르는 첫걸음이다.