🖥️ 컴퓨터 구조 — 개발자가 알아야 할 핵심 지식
💡 왜 개발자가 컴퓨터 구조를 알아야 할까요? Java 코드 한 줄이 실행되기까지, 그 뒤에서는 수많은 하드웨어 부품들이 협력합니다. 내부 동작을 이해하면 더 빠르고, 더 안정적인 코드를 작성할 수 있습니다.
1. 컴퓨터가 이해하는 정보
컴퓨터는 Java, Python 같은 프로그래밍 언어를 직접 이해하지 못합니다. 우리가 작성한 소스 코드는 내부적으로 컴퓨터가 이해할 수 있는 형태로 변환되어 실행됩니다.
컴퓨터가 이해하는 정보는 단 두 가지입니다.
| 종류 | 설명 | 예시 |
|---|---|---|
| 데이터 | 정적인 정보. 있는 그대로의 값 | 숫자 1, 2, 문자열 "hello", 파일 cat.jpg |
| 명령어 | 데이터를 활용하는 정보. 수행할 동작 + 대상 | 더하라 1과 2를, 출력하라 "hello world"를 |
더하라. 1과 2를 ← 명령어(동작) + 데이터(대상)
출력하라. "hello world"를 ← 명령어(동작) + 데이터(대상)
🔑 핵심 관계: 데이터는 명령어에 종속적입니다. 명령어의 재료이자 명령의 대상이죠. 컴퓨터는 0과 1만으로 이 모든 것을 표현합니다.
Java 관점에서 보면?
int a = 1; // 데이터: 정수 1
int b = 2; // 데이터: 정수 2
int c = a + b; // 명령어: 더하라 a와 b를 → CPU의 ALU가 실제로 연산
2. 컴퓨터의 핵심 부품
노트북이든, 서버든, 스마트폰이든 — 컴퓨터를 이루는 핵심 부품은 크게 다르지 않습니다.
| 부품 | 역할 | 특징 |
|---|---|---|
| CPU | 명령어 읽기·해석·실행 | 컴퓨터의 두뇌 |
| 메모리 (RAM) | 실행 중인 프로그램 저장 | 휘발성 (전원 OFF → 삭제) |
| 캐시 메모리 | CPU ↔ 메모리 속도 차이 완충 | CPU 내부/외부에 위치 |
| 보조기억장치 | 프로그램·데이터 영구 저장 | 비휘발성 (HDD, SSD) |
| 입출력장치 | 컴퓨터 외부와 정보 교환 | 키보드(입력), 모니터(출력) |
3. CPU — 컴퓨터의 두뇌
CPU는 명령어를 읽고(Fetch) → 해석하고(Decode) → 실행하는(Execute) 핵심 장치입니다.
CPU의 내부 구조
핵심 구성요소 3가지
① ALU (산술논리연산장치)
- 사칙연산(+, -, ×, ÷) 및 논리연산(AND, OR, NOT) 수행
- 실질적인 계산을 담당하는 회로
- Java의
a + b,a > b같은 연산이 실제로 처리되는 곳
② 제어장치 (Control Unit)
- 명령어를 해석해서 제어 신호(전기 신호) 를 각 부품으로 전달
- "메모리야, 이 데이터를 읽어라", "ALU야, 더하기를 수행해라" 같은 지시를 내림
③ 레지스터 (Register)
- CPU 내부의 초고속 임시 저장공간
- 명령어 처리 중 중간값을 보관
- 레지스터 값을 추적하면 프로그램 실행의 가장 낮은 단계를 파악 가능
💡 CPU 종류가 다르면? CPU 종류(Intel x86, ARM 등)에 따라 실행 가능한 명령어 집합(ISA)이 달라집니다. Java가 JVM을 통해 어느 CPU에서든 동일하게 동작할 수 있는 이유가 바로 여기 있습니다. JVM이 각 CPU에 맞는 명령어로 변환해주기 때문입니다.
4. 메모리와 캐시 메모리
메모리 (RAM)
현재 실행 중인 프로그램을 저장하는 부품입니다.
메모리의 2가지 핵심 개념
| 개념 | 설명 |
|---|---|
| 주소 (Address) | CPU가 원하는 데이터에 접근하기 위한 위치 정보. 실생활의 도로명 주소와 같음 |
| 휘발성 (Volatile) | 전원이 꺼지면 저장된 모든 정보가 삭제됨 |
☕ Java 관점: JVM이 실행되면,
.class파일(바이트코드)이 메모리(RAM)에 로드됩니다.new로 생성된 객체들은 Heap 영역(메모리의 일부)에 올라갑니다. 프로그램 종료 시 메모리에서 모두 사라지는 이유가 바로 휘발성 때문입니다.
캐시 메모리
CPU와 메모리 사이의 속도 차이를 해결하기 위한 고속 임시 저장장치입니다.
처리 속도: CPU >> 캐시 메모리 >> 메모리 (RAM) >> 보조기억장치
저장 용량: CPU << 캐시 메모리 << 메모리 (RAM) << 보조기억장치
- CPU가 자주 사용하는 데이터를 캐시에 미리 올려두어 빠른 접근 가능
- L1, L2, L3 캐시로 계층화되어 있으며, CPU 내부/외부 모두에 위치
💡 개발자 시선으로: Java의
HashMap, 스프링의@Cacheable, Redis 같은 소프트웨어 캐시도 이 개념과 완전히 동일한 원리입니다. 느린 저장소 대신 빠른 임시 저장소를 활용해 성능을 높이는 것이죠.
5. 보조기억장치 — 영구 저장소
메모리(RAM)는 휘발성이기 때문에 전원이 꺼지면 데이터가 사라집니다. 이를 보완하는 것이 비휘발성(non-volatile) 보조기억장치입니다.
| 구분 | 메모리 (RAM) | 보조기억장치 (HDD/SSD) |
|---|---|---|
| 역할 | 실행 중인 프로그램 저장 | 보관할 프로그램·데이터 저장 |
| 속도 | 빠름 | 느림 |
| 용량 | 작음 (수 GB) | 큼 (수백 GB ~ 수 TB) |
| 휘발성 | ✅ (전원 OFF → 삭제) | ❌ (전원 OFF → 유지) |
| 종류 | DDR SDRAM 등 | HDD, SSD, USB 메모리 |
⚠️ 중요한 포인트: CPU는 보조기억장치에 저장된 프로그램을 직접 실행할 수 없습니다. 반드시 보조기억장치 → 메모리(RAM) 으로 복사한 뒤 실행합니다.
Java 애플리케이션을 실행할 때
java -jar app.jar를 입력하면, SSD에 저장된.jar파일이 RAM으로 올라온 뒤 JVM이 실행하는 것입니다.
6. 입출력장치 & 메인보드 & 버스
입출력장치
컴퓨터 외부와 정보를 교환하는 장치입니다.
| 종류 | 예시 |
|---|---|
| 입력장치 | 키보드, 마우스, 마이크, 스캐너 |
| 출력장치 | 모니터, 스피커, 프린터 |
💡 보조기억장치도 넓은 의미에서 입출력장치의 일종입니다. 둘을 합쳐 주변장치(peripheral device) 라고 부르기도 합니다.
메인보드와 시스템 버스
모든 핵심 부품들은 메인보드(마더보드) 위에 연결됩니다. 부품들이 서로 데이터를 주고받는 통로가 바로 버스(Bus) 입니다.
시스템 버스의 3가지 구성요소:
| 버스 종류 | 방향 | 역할 |
|---|---|---|
| 데이터 버스 | 양방향 | 실제 데이터 전송 |
| 주소 버스 | 단방향 (CPU → 장치) | 어느 주소의 데이터인지 전달 |
| 제어 버스 | 양방향 | 읽기/쓰기 등 제어 신호 전달 |
🎯 핵심 요약
소스코드 (.java)
↓ 컴파일 (javac)
바이트코드 (.class) — 보조기억장치(SSD)에 저장
↓ 실행 (java)
메모리(RAM)에 로드 — JVM, 클래스 파일 올라옴
↓
CPU가 명령어 읽기(Fetch) → 해석(Decode) → 실행(Execute)
↓
ALU가 연산 수행 / 레지스터에 중간값 저장
↓
결과를 메모리 또는 출력장치로 전달
| 부품 | 한 줄 요약 |
|---|---|
| CPU | 명령어를 실행하는 두뇌 (ALU + 제어장치 + 레지스터) |
| RAM | 지금 실행 중인 것들의 공간 (빠르지만 휘발성) |
| 캐시 메모리 | CPU와 RAM 사이의 속도 완충제 |
| 보조기억장치 | 전원이 꺼져도 남아있는 영구 저장소 |
| 시스템 버스 | 부품들이 서로 소통하는 고속도로 |
📚 다음 학습 주제
- 명령어의 종류와 구조
- 명령어 사이클 (Fetch → Decode → Execute → Writeback)
- CPU 성능 향상 기술 (파이프라이닝, 슈퍼스칼라)
- 메모리 계층 구조와 지역성(Locality) 원리