처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.06.15 67

CPU는 빠른데 왜 내 프로그램은 느릴까? ‘메모리 장벽’의 정체

Hacker News 원문 보기

CPU는 사실 놀고 있어요

“요즘 CPU 진짜 빠르잖아요. 초당 수십억 번 연산하는데.” 맞아요. 그런데 정작 프로그램을 돌려보면 생각보다 느릴 때가 많죠. 이상하지 않나요? CPU가 이렇게 빠른데 왜? 답은 ‘CPU가 느린 게 아니라, 데이터가 CPU한테 도착하는 게 느린 것’이에요. 이걸 ‘메모리 장벽(memory wall)’이라고 불러요.

이게 뭐냐면요. 지난 수십 년 동안 CPU 속도는 어마어마하게 빨라졌는데, 메모리(RAM)에서 데이터를 가져오는 속도는 그만큼 빨라지지 못했어요. 그 격차가 점점 벌어져서, 이제는 CPU가 계산할 거리가 없어서 멍하니 기다리는 시간이 더 많아진 거예요. 비유하자면, 엄청 빠른 요리사가 있는데 재료를 가져다주는 직원이 느려터져서, 요리사가 칼 들고 멀뚱멀뚱 기다리는 상황이랄까요.

숫자로 보면 충격적이에요

얼마나 차이 나는지 감을 잡아볼게요. CPU가 연산 한 번 하는 데 1초가 걸린다고 ‘뻥튀기’해서 비유해보면요. CPU 바로 옆에 붙은 L1 캐시(cache, CPU 안의 초고속 임시 저장소)에서 데이터를 가져오는 건 한 2~3초쯤이에요. 그런데 메인 메모리(RAM)까지 갔다 오면 몇 분이 걸리는 셈이고, 디스크(SSD)까지 가면 며칠이 걸리는 수준이에요. 그러니까 데이터가 ‘어디에 있느냐’에 따라 속도가 말도 안 되게 차이 나는 거죠.

그래서 CPU는 ‘캐시’라는 걸 여러 단계로 두고 있어요. 자주 쓸 것 같은 데이터를 미리 가까운 곳에 복사해두는 거예요. L1, L2, L3 캐시 순으로 점점 커지지만 점점 느려져요. CPU가 데이터를 찾을 때 캐시에 있으면 ‘캐시 히트(cache hit)’라 빠르고, 없으면 ‘캐시 미스(cache miss)’라서 저 멀리 메모리까지 가야 하니 엄청 느려져요.

그래서 코드를 어떻게 짜야 할까

여기서 핵심 개념이 ‘지역성(locality)’이에요. CPU는 데이터를 가져올 때 딱 그것만 가져오는 게 아니라, 그 주변 데이터까지 한 덩어리(캐시 라인, 보통 64바이트)로 통째로 가져와요. 그래서 데이터를 메모리에 차곡차곡 붙여서 순서대로 접근하면 캐시 히트가 잘 나서 빨라져요.

대표적인 예가 2차원 배열을 도는 순서예요. 같은 배열이라도 행(row) 방향으로 도느냐 열(column) 방향으로 도느냐에 따라 속도가 몇 배씩 차이 나거든요. 메모리에 데이터가 행 순서로 저장돼 있으면, 행 방향으로 읽어야 캐시가 가져온 옆 데이터를 알뜰하게 다 쓰는 거예요. 열 방향으로 띄엄띄엄 읽으면 매번 캐시 미스가 나서 느려지고요.

또 하나, 연결 리스트(linked list)처럼 데이터가 메모리 여기저기 흩어져 있는 자료구조보다, 배열(array)처럼 쭉 붙어 있는 자료구조가 캐시 입장에선 훨씬 친절해요. 교과서에서는 “둘 다 O(n)이니 비슷하다”고 배우지만, 실제로는 배열이 훨씬 빠른 경우가 많은데 그 이유가 바로 이 메모리 장벽 때문이에요.

업계 흐름에서 보면

이 문제 때문에 하드웨어 업계도 계속 고민하고 있어요. HBM(High Bandwidth Memory)처럼 메모리를 CPU나 GPU 코앞에 쌓아 올리는 기술이 나온 것도, AI 시대에 메모리 대역폭이 병목이 됐기 때문이에요. 요즘 AI용 GPU가 비싼 이유 중 하나도 이 HBM 때문이거든요. AI 모델 학습은 어마어마한 데이터를 메모리에서 끊임없이 퍼다 날라야 해서, 순수 계산 능력보다 메모리에서 얼마나 빨리 데이터를 공급하느냐가 진짜 승부처가 됐어요.

한국 개발자에게

웹이나 앱 개발만 한다면 “이런 거 몰라도 되는 거 아냐?” 싶을 수 있어요. 근데 데이터를 많이 다루는 작업, 예를 들어 대용량 처리, 게임, 이미지·영상 처리, 머신러닝 쪽으로 가면 이 개념이 성능을 가르는 결정타가 돼요. 같은 알고리즘인데 메모리 접근 패턴만 바꿔서 몇 배 빨라지는 경험을 하게 되거든요.

당장 못 써먹더라도 “내 코드가 느린 이유가 알고리즘이 아니라 메모리 접근일 수도 있다”는 관점 하나만 챙겨도 큰 수확이에요. 프로파일러(profiler, 코드의 어느 부분이 느린지 측정해주는 도구)를 돌렸을 때 캐시 미스가 많이 찍히면 “아, 이거구나” 하고 알아챌 수 있으니까요.

정리하며

이제 CPU 속도보다 메모리 접근이 성능을 좌우하는 시대예요. 빠른 코드를 짜고 싶다면 “어떻게 계산할까”만큼 “데이터를 어떻게 배치하고 접근할까”를 고민해야 해요.

여러분은 메모리 접근 패턴을 바꿔서 성능을 끌어올린 경험이 있으신가요? 어떤 상황이었는지 궁금해요.


🔗 출처: Hacker News

이 뉴스가 유용했나요?

이 기술을 직접 배워보세요

파이썬으로 자동화를 시작해보세요

파이썬 기초부터 자동화까지 실전 강의.

파이썬 강의 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.