컴퓨터 구조를 공부해야 하는 이유
컴퓨터 구조는 소프트웨어 개발자라면 반드시 이해하고 있어야 할 핵심 지식이다. 대부분의 프로그래머는 고수준 언어(Java, Python 등)를 통해 프로그램을 작성하지만, 그 코드가 결국 어떤 방식으로 CPU에서 실행되고 메모리에 저장되며, 저장장치나 화면에 출력되는지는 컴퓨터 구조를 통해 알 수 있다. 이러한 이해는 단순히 이론을 넘어 실제 개발 과정에서 효율적이고 안정적인 코드를 작성하는 데 큰 영향을 준다.
예를 들어, 동일한 코드가 모든 환경에서 항상 동일하게 동작할까? 정답은 아니다. CPU 아키텍처가 다르면 명령어 집합이나 연산 처리 방식이 다르다. 특히 정수 오버플로우, 부동소수점 연산 정확도, 데이터 정렬 방식(endian) 등은 시스템마다 차이가 있어, 이로 인해 발생하는 버그는 컴퓨터 구조에 대한 지식 없이 디버깅하기 어렵다.
또한, 성능과 비용, 용도에 따라 어떤 컴퓨터를 선택할지도 구조적 이해가 필요하다. 연산이 많은 프로그램은 고성능 CPU와 캐시 구조가 중요하고, 데이터 처리가 중심이라면 대용량 메모리와 빠른 저장장치가 우선이다. 반면 단순 제어 중심의 내장 시스템에서는 소형 저전력 구조가 적합하다.
이러한 하드웨어 구성 요소에 대한 이해는 클라우드 환경에서도 매우 중요하다. AWS, Azure, GCP 같은 서비스에서는 CPU 종류, 메모리 용량, 디스크 IOPS 같은 요소에 따라 요금이 달라진다. 단순히 가장 높은 사양을 선택하기보다, 내 서비스가 어떤 자원을 가장 많이 사용하는지 알고 적절한 사양을 선택하면, 불필요한 비용을 줄이고 효율적인 운영이 가능하다.
결국, 컴퓨터 구조는 '내 코드가 하드웨어에서 어떻게 실행되는가'를 설명해주는 기초이자, 개발자로서의 깊이를 결정짓는 기반이다.
컴퓨터 구조 – 4가지 주요 부품
컴퓨터는 다양한 부품으로 이루어져 있지만, 가장 핵심이 되는 구성요소는 다음 네 가지다.
- CPU (중앙처리장치)
- 연산과 제어를 담당
- 흔히 컴퓨터의 두뇌라 불린다
- RAM (주기억장치)
- 실행 중인 프로그램과 데이터를 임시 저장
- 빠른 속도를 요구하지만 휘발성이다
- 보조기억장치 (SSD/HDD)
- 전원이 꺼져도 데이터 보존
- 대용량 파일, OS 저장 등에 사용
- 입출력장치 (I/O 장치)
- 사용자와 컴퓨터 사이의 인터페이스
- 예: 키보드, 마우스, 모니터, 프린터 등
이 네 부품은 시스템 버스를 통해 서로 연결되며, CPU의 명령에 따라 데이터를 주고받는다.
예를 들어, CPU가 작업을 요청하면 RAM에서 데이터를 불러오고, 그 결과는 모니터에 출력되거나 SSD에 저장된다. 이렇게 서로 긴밀하게 작동하는 구조가 바로 컴퓨터 시스템의 핵심 원리다.
CPU
CPU는 Central Processing Unit의 약자로, 중앙처리장치라고 불린다. 컴퓨터의 모든 계산과 제어가 이곳에서 이루어진다. 우리가 작성한 코드가 실제로 실행되는 곳도 바로 CPU다.
CPU의 핵심 구성 요소
- 제어장치(Control Unit)
- 명령어를 해석하고, 어떤 연산을 언제 수행할지 지시한다.
- 연산 논리 장치(ALU)
- 산술 연산(+, - 등)과 논리 연산(&&, || 등)을 수행한다.
- 레지스터(Register)
- CPU 내부의 초고속 임시 저장소로, 변수나 연산 중간값을 보관한다.
CPU는 ⟪페치 → 디코드 → 실행⟫의 순서로 명령어를 처리하며, 이를 명령어 사이클이라 부른다.
CPU 성능을 결정짓는 요소
- 클럭 속도: 1초에 명령어를 몇 번 실행하는지를 나타낸다. 단위는 GHz.
- 코어 수: 동시에 몇 개의 작업을 처리할 수 있는지 나타내며, 싱글코어, 쿼드코어, 옥타코어 등으로 구분된다.
- 캐시 메모리: CPU 내부에 포함된 고속 메모리로, L1, L2, L3 단계로 구분된다.
RISC vs CISC
CPU 설계 방식에는 ⟪RISC⟫(명령어를 단순화한 구조)와 ⟪CISC⟫(복잡한 명령어도 한번에 처리하는 구조)가 있다. 대표적으로 ARM CPU는 RISC 기반, 인텔 CPU는 CISC 기반으로 만들어진다. 모바일과 서버 환경에서 아키텍처가 달라지는 이유 중 하나다.
RAM
RAM(Random Access Memory)은 우리가 프로그램을 실행할 때 필요한 데이터를 일시적으로 저장하는 기억장치다. CPU가 작업을 처리하려면 데이터를 빠르게 읽고 써야 하는데, 그 역할을 RAM이 맡는다. 실행 중인 코드, 변수, 이미지, 사용자 입력 등 모든 임시 정보가 RAM 위에서 관리된다.
RAM의 주요 특징
- 휘발성 메모리: 전원이 꺼지면 데이터가 사라진다.
- 빠른 접근 속도: SSD보다 훨씬 빠르지만 용량은 작다.
- 동시 접근 가능: 주소 기반으로 데이터를 빠르게 읽고 쓸 수 있다.
RAM의 내부 구조와 종류
- DRAM (Dynamic RAM)
대부분의 일반 PC에서 사용되는 RAM이다. 일정 시간마다 리프레시(refresh)가 필요하지만 가격이 저렴하고 대용량 구현이 가능하다. - SRAM (Static RAM)
리프레시가 필요 없고 속도가 빠르지만 가격이 비싸고 용량이 작다. 주로 CPU 내부의 캐시 메모리로 사용된다.
RAM은 수많은 메모리 셀로 이루어져 있으며, 각각의 셀은 주소를 가진다. CPU는 ⟪주소 버스⟫를 통해 특정 셀을 가리키고, ⟪데이터 버스⟫를 통해 값을 읽거나 쓴다.
가상 메모리와 페이징
물리적 RAM이 부족할 경우 운영체제는 하드디스크의 일부 공간을 RAM처럼 활용하는데, 이를 ⟪가상 메모리⟫라고 한다. 이 과정에서 메모리는 페이지 단위로 쪼개어 관리되며, 필요에 따라 디스크와 RAM 사이를 오가게 된다. 이런 구조 덕분에 실제 메모리 용량보다 더 많은 프로그램을 실행할 수 있다.
CPU와 RAM
CPU와 RAM은 떨어져 있는 두 부품처럼 보이지만, 실제로는 한 몸처럼 긴밀하게 협력한다. CPU가 어떤 작업을 수행하려면 반드시 RAM에서 데이터를 불러와야 하고, 그 결과를 다시 RAM에 저장하는 일이 반복된다. 이 과정을 통해 우리가 작성한 프로그램이 실제로 실행된다.
명령어 사이클: 페치 → 디코드 → 실행
- 페치(Fetch)
RAM에 저장된 명령어를 CPU가 가져온다. - 디코드(Decode)
명령어의 의미를 해석하고 어떤 연산을 해야 하는지 판단한다. - 실행(Execute)
실제 연산을 수행하고, 필요한 경우 결과를 다시 RAM에 저장한다.
이 사이클은 수억, 수십억 번 반복되며 프로그램이 작동하게 된다.
메모리 계층 구조와 속도 차이
RAM은 빠르지만 CPU보다 느리고, SSD보다는 빠르다. CPU와 RAM 사이의 속도 차이를 줄이기 위해 ⟪캐시 메모리⟫가 존재한다.
- L1, L2, L3 캐시: CPU 내부에 존재하며 RAM보다 훨씬 빠르다.
- CPU는 먼저 캐시를 확인하고, 없을 경우 RAM에 접근한다.
- 이를 ⟪캐시 미스⟫라 하고, 캐시에 있으면 ⟪캐시 히트⟫라고 부른다.
캐시가 존재하는 이유는 단 하나, RAM보다 느린 속도를 극복하기 위해서다.
병목 현상과 성능 튜닝
프로그램이 느릴 때는 반드시 CPU 때문이 아니라 RAM 접근이 병목이 되는 경우가 많다. 이처럼 CPU와 RAM의 동작 속도 차이와 상호작용을 이해하면, 메모리 최적화나 캐시 활용 등의 실질적인 성능 향상 방법을 고민할 수 있게 된다.
보조기억장치
보조기억장치는 컴퓨터를 꺼도 사라지지 않는 데이터를 저장하는 장치다. 우리가 파일을 저장하거나, 운영체제를 설치하거나, 프로그램을 하드디스크에 설치하는 모든 행위는 이 장치를 통해 이루어진다. 대표적으로 ⟪HDD⟫와 ⟪SSD⟫가 있다.
HDD와 SSD의 차이점
구분 | HDD (Hard Disk Drive) | SSD (Solid State Drive) |
저장 방식 | 자기 디스크에 데이터를 기록 | 반도체 칩에 데이터를 저장 |
속도 | 느림 (회전 지연 존재) | 빠름 (접근 지연 거의 없음) |
내구성 | 충격에 약함 | 비교적 충격에 강함 |
가격 | GB당 저렴 | GB당 비쌈 |
용도 | 대용량 저장용 | 빠른 부팅, 고속 작업용 |
HDD는 회전하는 원판에 자기로 데이터를 기록하는 방식이고, SSD는 반도체에 전자를 저장하는 방식이기 때문에 속도에서 큰 차이가 난다.
저장장치와 인터페이스
보조기억장치는 어떻게 CPU와 연결되느냐도 성능에 큰 영향을 미친다. 대표적인 연결 방식은 다음과 같다.
- SATA: 가장 일반적인 방식으로, HDD와 일반 SSD에서 주로 사용된다.
- NVMe (PCIe): 고속 SSD에서 사용되는 최신 방식으로, SATA보다 수 배 빠르다.
만약 NVMe SSD를 장착했는데 속도가 기대 이하라면, 메인보드 슬롯이 PCIe를 지원하지 않거나 설정이 잘못되었을 수도 있다. 이런 구조를 이해하면 하드웨어 문제를 진단하거나 성능을 높이는 데 도움이 된다.
파일 시스템과 저장 방식
파일 시스템은 데이터를 어떤 방식으로 저장하고 읽어올지를 결정한다. 예를 들어 ⟪NTFS⟫, ⟪FAT32⟫, ⟪ext4⟫ 등 다양한 포맷이 존재하며, 운영체제나 장치 호환성과 밀접하게 연관되어 있다. 단순히 저장장치만 빠르다고 해서 성능이 최적화되는 건 아니며, 파일 시스템 역시 중요한 고려 요소다.
입출력장치
입출력장치는 컴퓨터가 외부와 정보를 주고받는 수단이다. 우리가 키보드를 눌러 입력하거나, 화면으로 결과를 확인하거나, 네트워크를 통해 데이터를 송수신하는 모든 과정은 입출력장치를 통해 이루어진다.
입력장치와 출력장치
- 입력장치
키보드, 마우스, 터치스크린, 스캐너, 마이크 등
사용자의 명령이나 데이터를 컴퓨터로 전달한다. - 출력장치
모니터, 프린터, 스피커 등
컴퓨터가 처리한 결과를 사용자에게 전달한다.
이 외에도 네트워크 카드처럼 입출력을 동시에 수행하는 장치도 있다.
입출력 방식의 차이
입출력장치는 ⟪어떻게 데이터를 주고받는가⟫에 따라 크게 두 가지 방식으로 나뉜다.
- 폴링(Polling)
CPU가 주기적으로 장치를 검사하며 데이터 유무를 확인한다. 구현은 단순하지만 CPU 자원을 낭비하기 쉽다. - 인터럽트(Interrupt)
장치가 데이터를 준비하면 CPU에게 신호(인터럽트)를 보내 처리하게 한다. 효율적이지만 하드웨어 설계가 복잡하다.
입출력 성능은 단순히 장치의 속도뿐만 아니라, 운영체제가 어떤 방식으로 I/O를 관리하느냐에 따라서도 크게 달라진다.
DMA (Direct Memory Access)
CPU를 거치지 않고, 장치가 메모리와 직접 데이터를 주고받는 방식이다. 대용량 데이터를 빠르게 전송해야 할 때 유리하다. 예를 들어 SSD에서 대규모 파일을 읽어올 때 CPU가 일일이 관여하지 않고 DMA를 사용하면 시스템 자원을 효율적으로 활용할 수 있다.
메인보드와 시스템 버스
컴퓨터의 모든 부품은 독립적으로 존재하는 것이 아니라, 메인보드(Mainboard) 위에 장착되고 시스템 버스(System Bus)를 통해 서로 연결된다. 메인보드는 일종의 회로판이며, CPU, RAM, 저장장치, 그래픽카드, I/O 장치 등이 이 위에 꽂혀 서로 통신하게 된다.
메인보드의 구성 요소
- 소켓(Socket): CPU를 장착하는 부분. 메인보드는 특정 소켓 타입만 지원한다.
- 메모리 슬롯(DIMM 슬롯): RAM을 꽂는 슬롯
- 칩셋(Chipset): 부품 간 데이터 흐름을 관리하는 중간 관리자 역할
- 확장 슬롯(PCIe 등): 그래픽카드, 사운드카드, 네트워크카드 등을 연결
- 저장장치 포트(SATA, M.2 등): SSD, HDD와 연결
이처럼 메인보드는 단순한 기판이 아니라, 모든 장치를 조율하고 연결하는 중심 허브다.
시스템 버스의 역할
시스템 버스는 데이터를 주고받는 전송 통로다. 버스는 크게 세 가지로 나뉜다.
- 데이터 버스
실제 데이터가 흐르는 통로 - 주소 버스
데이터가 저장되거나 읽혀야 할 위치를 가리키는 통로 - 제어 버스
읽기/쓰기 여부, 인터럽트 등 제어 신호를 전달하는 통로
버스의 폭(bit 수)이 클수록 한 번에 더 많은 데이터를 처리할 수 있으며, CPU와 RAM의 호환성, 성능에도 직접적인 영향을 미친다.
고속 버스의 종류
- PCI Express (PCIe): GPU 등 고성능 장치를 연결하는 데 사용
- USB: 범용 입출력 버스, 외장장치와 주로 연결
- SATA / NVMe: 저장장치를 위한 고속 인터페이스
버스는 단순한 ‘선’이 아니라, 시스템의 통신 효율을 결정하는 핵심 요소다. 특히 고성능 시스템에서는 어떤 버스 구조를 사용하느냐에 따라 성능이 크게 달라진다.
'CS > 컴퓨터 구조' 카테고리의 다른 글
RAM (0) | 2025.06.18 |
---|---|
CPU (2) (1) | 2025.06.18 |
CPU (1) (0) | 2025.06.18 |
컴퓨터에게 명령하기 (0) | 2025.06.17 |
컴퓨터가 사용하는 데이터 (0과 1) (0) | 2025.06.17 |