컴퓨터에서 메모리는 한 덩어리로 존재하지 않습니다. 단계적인 계층을 이루고 있습니다. 이를 메모리 계층(Memory Hierarchy)이라고 부릅니다. 이 시스템은 보통 레지스터(Register)에서 시작합니다. 그리고 L1, L2, L3 캐시(Cache)를 거칩니다.
그다음 우리가 흔히 아는 메인 메모리로 이어집니다. 마지막에는 보조 저장장치(Storage)가 위치합니다. 이 순서는 그냥 나열한 것이 아닙니다. 속도와 역할에 따라 명확한 의미가 담겨 있습니다. 처음 접하면 복잡해 보일 수 있습니다.
속도와 용량의 반비례 관계
이 계층 시스템에는 분명한 원칙이 있습니다. CPU에 가까울수록 메모리는 아주 빠릅니다. 하지만 크기가 작고 가격이 비쌉니다. 레지스터는 CPU 내부에 있어 접근 속도가 가장 빠릅니다. 대신 저장할 수 있는 데이터는 극히 제한적입니다.

반면 CPU에서 멀어질수록 속도는 느려집니다. 대신 용량은 커지고 가격은 저렴해집니다. 캐시는 레지스터보다 조금 느리지만 여전히 매우 빠릅니다. 자주 쓰이는 데이터를 임시로 보관하는 역할을 합니다. CPU가 메인 메모리까지 가지 않도록 돕습니다.
현실적인 제약과 타협점
메인 메모리는 캐시보다 훨씬 큰 용량을 제공합니다. 하지만 접근 속도는 캐시에 비해 눈에 띄게 느립니다. 디스크 같은 보조 저장장치는 가장 느립니다. 대신 대량의 데이터를 저장할 수 있는 공간입니다. 왜 이렇게 단계를 나누었을까요?
이유는 현실적인 제약 때문입니다. 모든 메모리를 레지스터처럼 빠르게 만들면 좋습니다. 하지만 비용과 전력 소모를 감당할 수 없습니다. 그래서 컴퓨터는 타협점을 찾았습니다. 자주 쓰는 데이터는 빠른 곳에 둡니다.
비용 효율을 높이는 배치
반대로 덜 쓰는 데이터는 느린 곳에 배치합니다. 이렇게 하면 비용과 성능의 균형을 맞출 수 있습니다. 이 방식은 지역성 원리와 맞물려 효율을 냅니다. 필요한 데이터가 가까운 곳에 있을 확률을 높이는 겁니다. 덕분에 전체적인 처리 속도가 빨라집니다.
게임 엔진에서 이 내용을 이해하는 것은 매우 중요합니다. 게임은 매 프레임 대량의 데이터를 처리합니다. 반복적인 작업이 쉴 새 없이 일어납니다. 이때 데이터가 어느 계층에 머무르느냐가 중요합니다. 이것이 곧 게임의 성능으로 이어집니다.
게임 프레임 방어를 위한 전략
자주 접근하는 데이터가 캐시에 잘 올라가 있어야 합니다. 그러면 CPU는 거의 멈추지 않고 일을 계속할 수 있습니다. 하지만 매번 램이나 그 아래 단계까지 내려간다면 문제가 생깁니다. 데이터를 가져오는 시간 동안 CPU는 놀게 됩니다. 결과적으로 프레임 타임이 급격히 늘어납니다.
그래서 프로그래머는 데이터 배치를 신중하게 설계해야 합니다. 데이터를 저장하는 것만으로는 부족합니다. 어떤 순서로 접근할지 함께 고민해야 합니다. 연속된 메모리에 데이터를 두는 방식이 대표적입니다. 이렇게 하면 캐시 효율이 크게 높아집니다.
프로그래머가 만드는 성능 차이
자주 쓰는 데이터와 거의 쓰지 않는 데이터를 분리하기도 합니다. 이런 설계는 코드 한 줄의 최적화보다 더 큰 효과를 냅니다. 메모리 접근 패턴만 바꿔도 성능 차이가 벌어집니다. 처음에는 어렵게 느껴질 수 있습니다. 하지만 원리를 알면 최적화의 길이 보입니다.
이 계층 시스템은 하드웨어의 한계 속에서 최대 성능을 내기 위한 약속입니다. 게임 엔진은 이 약속을 잘 이해하고 따라야 합니다. 그래야 같은 하드웨어에서도 더 좋은 결과를 냅니다. 안정적인 프레임과 부드러운 플레이 경험을 제공할 수 있습니다.