
우리가 매일 사용하는 컴퓨터, 특히 수많은 데이터를 처리해야 하는 서버의 성능은 어떻게 결정될까? 많은 이들이 CPU의 코어 수나 클럭 속도, 혹은 메모리의 용량만을 떠올릴 것이다. 하지만 현대 멀티코어 프로세서 환경에서는 눈에 보이지 않는 또 다른 요소가 성능에 지대한 영향을 미친다. 바로 '메모리 접근 방식'이다. 만약 당신이 개발자이거나 시스템 엔지니어라면, 혹은 고성능 컴퓨팅에 관심이 있다면 'NUMA'라는 용어를 한 번쯤은 들어봤을 것이다. 오늘은 바로 이 NUMA가 무엇이며, 왜 중요한지 그 비밀을 파헤쳐 보고자 한다.

NUMA는 'Non-Uniform Memory Access'의 약자로, 우리말로는 '불균일 메모리 접근' 구조라고 번역할 수 있다. 이름에서 알 수 있듯이, CPU의 모든 코어가 메모리의 특정 영역에 접근할 때 걸리는 시간이 '균일하지 않다'는 특징을 가진 컴퓨터 메모리 설계 방식이다. 이것이 무슨 의미일까? 과거의 시스템, 즉 UMA(Uniform Memory Access) 구조에서는 모든 CPU 코어가 하나의 메모리 컨트롤러를 통해 전체 메모리에 접근했다. 따라서 어떤 코어가 어떤 메모리 주소에 접근하든 그 속도는 동일했다. 하지만 CPU 코어의 수가 폭발적으로 증가하면서 문제가 발생했다. 모든 코어가 단 하나의 통로(메모리 컨트롤러)를 이용하려 하니 병목 현상이 생기고 시스템 전체의 성능이 저하되기 시작한 것이다. NUMA는 바로 이 문제를 해결하기 위해 등장한 아키텍처이다.

NUMA 아키텍처의 핵심은 시스템을 여러 개의 '노드(Node)'로 나누는 것이다. 각 노드는 자신만의 CPU 코어 그룹과 로컬 메모리(Local Memory)를 가진다. 그리고 이 노드들은 고속 인터커넥트(Interconnect)를 통해 서로 연결된다.
이 구조에서 각 CPU 코어는 자신이 속한 노드의 로컬 메모리에 접근할 때 가장 빠른 속도를 보여준다. 마치 내 방에 있는 책을 꺼내보는 것이 가장 빠른 것과 같은 이치이다. 하지만 만약 다른 노드에 있는 메모리, 즉 리모트 메모리(Remote Memory)에 접근해야 한다면 어떨까? 이때는 인터커넥트를 통해 다른 노드로 요청을 보내야 하므로 로컬 메모리에 접근할 때보다 더 긴 시간이 소요된다. 바로 이 지점에서 '불균일한' 메모리 접근 시간이 발생하는 것이다.
이러한 NUMA의 동작 방식을 결정하는 주요 요소들을 살펴보자.
- 노드(Node): CPU 소켓 또는 코어 그룹과 그에 직접 연결된 메모리로 구성된 기본 단위이다. 일반적으로 하나의 CPU 소켓이 하나의 NUMA 노드가 된다.
- 로컬 메모리(Local Memory): 특정 CPU 코어와 같은 노드에 위치한 메모리이다. 접근 지연 시간(Latency)이 가장 짧다.
- 리모트 메모리(Remote Memory): 다른 노드에 위치한 메모리이다. 인터커넥트를 거쳐야 하므로 접근 지연 시간이 길다.
- 인터커넥트(Interconnect): NUMA 노드 간의 데이터 통신을 담당하는 고속 경로이다. 인텔의 QPI(QuickPath Interconnect)나 AMD의 인피니티 패브릭(Infinity Fabric)이 대표적이다.
NUMA 아키텍처는 분명한 장점을 가지고 있지만, 동시에 고려해야 할 단점도 존재한다. 개발자나 시스템 관리자는 이러한 특성을 잘 이해하고 활용해야 시스템의 잠재력을 최대한 이끌어 낼 수 있다.

장점을 먼저 알아보자.
- 뛰어난 확장성: CPU 코어와 메모리를 노드 단위로 추가하며 시스템을 확장하기 용이하다. UMA 구조에서 발생하는 메모리 버스 병목 현상을 크게 줄일 수 있다.
- 높은 메모리 대역폭: 각 노드가 독립적인 메모리 컨트롤러를 가지므로 시스템 전체의 메모리 대역폭이 크게 향상된다. 이는 메모리 집약적인 애플리케이션에서 큰 성능 향상을 가져온다.
- 지연 시간 감소: 프로세스가 필요한 데이터를 대부분 로컬 메모리에 두고 실행될 경우, 평균 메모리 접근 지연 시간을 획기적으로 줄일 수 있다.
반면, 다음과 같은 단점도 존재한다.
- 리모트 메모리 접근 비용: 다른 노드의 메모리에 접근할 때 발생하는 지연 시간 증가는 성능 저하의 주된 원인이 될 수 있다.
- 데이터 지역성(Data Locality)의 중요성: 애플리케이션이 NUMA를 고려하지 않고 설계되었다면, 데이터가 여러 노드에 분산되어 리모트 메모리 접근이 빈번하게 발생할 수 있다. 이는 오히려 UMA 환경보다 성능이 떨어지는 결과를 낳을 수도 있다.
- 복잡한 관리: 운영체제(OS)와 애플리케이션이 NUMA 구조를 올바르게 인식하고, 프로세스와 데이터를 최적의 노드에 할당(NUMA-aware scheduling)하는 것이 매우 중요하다.

그렇다면 우리는 이 까다롭지만 강력한 NUMA 아키텍처를 어떻게 활용해야 할까? 핵심은 '데이터 지역성'을 극대화하는 것이다. 즉, 특정 CPU 코어에서 실행되는 프로세스는 가급적 그 코어와 같은 노드에 있는 메모리(로컬 메모리)를 사용하도록 만들어야 한다.
데이터베이스 서버, 가상화 환경, 대규모 과학 연산 등 고성능을 요구하는 환경에서는 NUMA 설정이 성능에 직접적인 영향을 미친다. 예를 들어, 가상 머신(VM)을 특정 NUMA 노드에 고정(Pinning)하거나, 데이터베이스의 버퍼 풀을 특정 노드의 메모리에 할당하는 등의 튜닝을 통해 리모트 메모리 접근을 최소화하고 성능을 최적화할 수 있다.

최신 운영체제들은 대부분 NUMA를 자동으로 인식하고 스케줄링을 최적화하는 기능을 제공하지만, 애플리케이션의 특성을 완벽하게 파악하기는 어렵다. 따라서 애플리케이션 개발 단계부터 NUMA 구조를 염두에 두고 메모리 할당 및 스레드 관리 전략을 수립하는 것이 이상적이다. 자신의 서버가 NUMA 아키텍처를 사용하는지 확인하고, 프로세스들이 어느 노드에서 실행되고 있는지 모니터링하는 습관은 고성능 시스템을 다루는 전문가에게 필수적인 역량이라 할 수 있다.

#NUMA #NonUniformMemoryAccess #서버성능 #시스템아키텍처 #개발자 #IT기술 #프로그래밍 #고성능컴퓨팅 #메모리 #CPU
'IT 정보 > 용어' 카테고리의 다른 글
| 개발자 필수 스킬, Log4j란? 왜 Log 라이브러리를 사용해야할까? (0) | 2025.10.12 |
|---|---|
| 데몬(Daemon)이란? 컴퓨터 속 숨은 일꾼 데몬의 정의와 종류, 역할 (0) | 2025.10.11 |
| 선버스트(SUNBURST)란? 역대급 공급망 공격에 사용된 악성코드 (0) | 2025.10.08 |
| 미미카츠(Mimikatz)란? 윈도우 비밀번호를 평문으로? 해킹툴의 제왕 (0) | 2025.10.07 |
| NTFS의 심장을 파헤치다, MFT(마스터 파일 테이블)란? (0) | 2025.10.06 |