컴퓨터 구조를 공부하다 보면 어느 순간부터는 “CPU가 얼마나 빠른가”보다 “데이터를 얼마나 빨리 가져올 수 있는가”가 훨씬 중요한 문제처럼 느껴지기 시작한다. 나도 처음에는 CPU 성능이라는 게 결국 계산 속도 싸움이라고 생각했었다. 그런데 캐시 구조, 메모리 접근, False Sharing 같은 개념들을 하나씩 보다 보니까 현대 컴퓨터는 오히려 “기다리는 시간을 줄이는 방향”으로 계속 발전하고 있다는 게 보이기 시작했다. 그리고 그 흐름 끝에서 등장하는 개념 중 하나가 바로 NUMA(Non-Uniform Memory Access)다.
처음 NUMA라는 단어를 봤을 때는 솔직히 무슨 의미인지 전혀 감이 안 왔다. 이름도 너무 길고 어려워 보였다. 그런데 구조를 이해하고 나니까 핵심은 생각보다 단순했다. 바로 “CPU마다 메모리와의 거리 차이가 존재한다”는 개념이었다.


CPU 코어가 많아질수록 메모리 접근 구조도 복잡해진다
예전 단일 CPU 구조에서는 메모리 접근 방식이 상대적으로 단순했다. CPU 하나가 RAM에 접근하면 됐기 때문이다. 하지만 멀티코어, 멀티소켓 서버 구조로 발전하면서 상황이 달라지기 시작했다.
특히 서버에서는 CPU가 하나만 들어가는 게 아니라 여러 개가 동시에 들어가는 경우가 많다. 문제는 CPU 수가 많아질수록 모든 CPU가 하나의 RAM만 공유하는 방식이 점점 비효율적으로 변한다는 점이었다.
처음에는 “RAM은 그냥 하나로 연결하면 되는 거 아닌가?”라고 생각했는데, 실제로는 CPU가 많아질수록 메모리 접근 충돌과 대기 시간이 계속 증가하게 된다. 결국 CPU들이 같은 메모리를 두고 경쟁하는 상황이 생기는 것이다.
그래서 등장한 방식이 NUMA 구조다. NUMA에서는 각 CPU가 자신과 가까운 메모리 영역(Local Memory)을 가지게 된다. 즉, CPU마다 “자기 근처 RAM”이 따로 존재하는 느낌에 가깝다.
나도 이 개념을 처음 봤을 때 꽤 신기했다. 예전에는 메모리 접근 속도는 그냥 RAM 성능 차이라고만 생각했는데, 실제로는 CPU와 메모리 사이 “거리” 자체도 성능에 영향을 줄 수 있다는 게 의외였기 때문이다.
특히 서버 구조 그림을 보면 CPU마다 연결된 메모리가 따로 있고, 다른 CPU 메모리에 접근할 때는 훨씬 긴 경로를 거쳐야 한다는 걸 보고 “컴퓨터 내부도 결국 물리적인 거리 영향을 받는구나”라는 생각이 들었다.
NUMA에서는 가까운 메모리와 먼 메모리 속도가 다르다
NUMA의 핵심은 이름 그대로 “메모리 접근 속도가 균일하지 않다(Non-Uniform)”는 점이다. 즉, 어떤 메모리는 빠르고 어떤 메모리는 상대적으로 느리다.
예를 들어 CPU A가 자기 Local Memory에 접근하면 굉장히 빠르게 처리할 수 있다. 하지만 CPU B 쪽 메모리에 접근해야 하면 상황이 달라진다. CPU 간 연결 경로를 거쳐야 하고, 지연 시간도 더 커진다.
나도 처음에는 “조금 느린 정도 아닌가?” 싶었는데, 고성능 서버 환경에서는 이런 차이가 꽤 크게 누적될 수 있다고 한다. 특히 데이터 양이 엄청 많고, 멀티스레드 작업이 계속 발생하는 환경에서는 메모리 위치 자체가 성능에 직접 영향을 준다는 것이다.
예전에 서버 최적화 관련 글을 보다가 “NUMA Awareness”라는 표현을 본 적이 있었는데, 처음에는 그냥 어려운 서버 용어인 줄 알았다. 그런데 알고 보니까 프로그램이 가능하면 자기 CPU 근처 메모리를 사용하도록 최적화하는 개념이었다.
그걸 보면서 처음으로 “현대 컴퓨터 성능은 단순히 CPU 숫자 싸움이 아니라, 데이터를 어디에 배치하느냐까지 전부 연결되는 문제구나”라는 걸 느끼게 됐다.
그래서 현대 서버는 데이터 위치까지 신경 쓰기 시작했다
NUMA 구조가 등장하면서 운영체제와 프로그램도 단순히 CPU 사용량만 관리하는 수준을 넘어, “데이터를 어느 메모리에 둘 것인가”까지 신경 쓰게 되었다.
예를 들어 특정 스레드가 CPU A에서 실행 중이라면, 가능하면 CPU A 근처 메모리를 사용하도록 배치하는 게 훨씬 효율적이다. 반대로 멀리 있는 메모리를 계속 접근하면 CPU가 기다리는 시간이 많아질 수 있다.
나도 예전에는 메모리라는 게 그냥 하나의 공간이라고만 생각했는데, NUMA 구조를 이해하고 나니까 현대 서버는 내부적으로 훨씬 복잡하게 움직이고 있다는 게 느껴졌다. 특히 AI 서버나 대형 데이터센터 같은 환경에서는 CPU와 메모리 배치 자체가 성능 최적화의 핵심 요소 중 하나라고 한다.
결국 NUMA는 단순히 특이한 서버 구조가 아니라, CPU 성능이 계속 빨라지면서 메모리 접근 비용이 상대적으로 더 중요해진 시대의 결과물에 가까웠다.
이걸 공부하면서 가장 인상 깊었던 건, 컴퓨터도 결국 물리적인 구조 위에서 움직이는 기계라는 점이었다. 아무리 CPU가 빨라져도 데이터가 멀리 있으면 결국 기다려야 하고, 그 기다림을 줄이기 위해 구조 자체가 계속 진화하고 있었던 것이다.
한 줄로 정리하면 NUMA는 여러 CPU가 각각 가까운 메모리를 가지도록 만든 구조이며, CPU와 메모리 사이 거리 차이에 따라 접근 속도가 달라지는 현대 서버 메모리 구조다.