← SEARCHABLE ARCHIVE
Computer Science · 2026-07-15

하버드 아키텍처란 무엇인가?

명령어와 데이터의 메모리를 왜 분리할까?

INTERACTIVE READING MODE →

본 블로그 작성 글들은, 강의를 목표로 하고 제작되었습니다. 또한 작성된 글의 정보도 틀렸을 수 있으니, 주의해주세요.

컴퓨터는 프로그램의 명령어와 프로그램이 사용하는 데이터를 어딘가에 저장해두고 읽어와야 한다. 이때 명령어와 데이터를 서로 다른 메모리에 나누어 저장하는 구조를 Harvard Architecture(하버드 아키텍처)라고 부른다.

명령어와 데이터가 따로 있다

하버드 아키텍처에서는 명령어 메모리와 데이터 메모리가 물리적으로 분리되어 있다. CPU로 이어지는 통로인 Bus(버스)도 따로 사용한다.

명령어 메모리 ── 명령어 버스 ──┐
                                CPU
데이터 메모리 ── 데이터 버스 ───┘

CPU가 다음 명령어를 가져오는 동안, 현재 명령어에 필요한 데이터도 동시에 읽을 수 있다. 길 하나를 명령어와 데이터가 번갈아 사용하는 구조보다 병목이 줄어들 수 있다.

또한 두 메모리의 규격을 다르게 설계할 수도 있다. 명령어는 읽기 전용 메모리에 넣고 데이터는 읽고 쓸 수 있는 메모리에 넣거나, 명령어와 데이터의 비트 폭을 서로 다르게 둘 수도 있다.

폰 노이만 구조와 무엇이 다른가?

Von Neumann Architecture(폰 노이만 아키텍처)는 명령어와 데이터를 같은 메모리와 버스에 둔다.

하버드 구조
명령어 메모리 ─┐
               CPU
데이터 메모리 ─┘

폰 노이만 구조
명령어 + 데이터 메모리 ── CPU

폰 노이만 구조는 메모리 공간이 하나라서 프로그래밍과 하드웨어 구성이 비교적 단순하다. 하지만 명령어를 가져오는 일과 데이터를 읽는 일이 같은 길을 사용하므로 동시에 처리하기 어렵다.

반대로 하버드 구조는 동시에 접근하기 좋지만, 비어 있는 명령어 메모리를 데이터가 대신 사용하는 식의 유연한 공간 활용은 어렵다. 메모리와 버스를 따로 만들어야 하므로 하드웨어도 복잡해진다.

어디에서 사용하는가?

입력에 빠르게 반응해야 하는 마이크로컨트롤러나 DSP에서 하버드 구조를 쉽게 볼 수 있다. 프로그램이 정해져 있고 명령어와 데이터를 동시에 처리하는 것이 중요한 환경에 잘 맞는다.

현대 PC의 CPU는 어느 한쪽으로만 딱 잘라 말하기 어렵다. 메인 메모리는 명령어와 데이터를 함께 저장하지만 CPU 가까이에서는 명령어 캐시와 데이터 캐시를 분리하는 Modified Harvard Architecture(수정된 하버드 구조)를 많이 사용한다.

즉 하버드 아키텍처의 핵심은 단순히 메모리가 두 개라는 말이 아니다. 명령어와 데이터가 서로 다른 저장 공간과 통로를 사용해서 CPU가 두 작업을 동시에 진행할 수 있게 만든 구조라고 이해하면 된다.