
무어의 법칙: 반도체 발전의 예언과 그 종말이 남긴 것
개발자가 개똥같이 코드를 짜도 컴퓨터가 알아서 빨라지던 '공짜 점심'의 시대는 끝났습니다. 무어의 법칙의 종말이 우리에게 미친 영향과 개발자의 새로운 생존 전략에 대해 이야기합니다.

개발자가 개똥같이 코드를 짜도 컴퓨터가 알아서 빨라지던 '공짜 점심'의 시대는 끝났습니다. 무어의 법칙의 종말이 우리에게 미친 영향과 개발자의 새로운 생존 전략에 대해 이야기합니다.
내 서버는 왜 걸핏하면 뻗을까? OS가 한정된 메모리를 쪼개 쓰는 처절한 사투. 단편화(Fragmentation)와의 전쟁.

미로를 탈출하는 두 가지 방법. 넓게 퍼져나갈 것인가(BFS), 한 우물만 팔 것인가(DFS). 최단 경로는 누가 찾을까?

이름부터 빠릅니다. 피벗(Pivot)을 기준으로 나누고 또 나누는 분할 정복 알고리즘. 왜 최악엔 느린데도 가장 많이 쓰일까요?

매번 3-Way Handshake 하느라 지쳤나요? 한 번 맺은 인연(TCP 연결)을 소중히 유지하는 법. HTTP 최적화의 기본.

제가 존경하는 20년 차 개발자 선배님과 술자리에서 들은 이야기입니다.
"라떼는 말이야, 코드가 좀 느리다 싶으면 최적화한다고 밤샐 필요가 없었어. 그냥 '팀장님, 서버가 낡았네요' 하고 2년만 버티면 됐거든. 2년 뒤에 새 서버를 사 오면 진짜 거짓말처럼 속도가 2배가 되어 있었으니까."
농담 같지만, 이것은 컴퓨터 역사상 가장 위대한 예언이자 축복이었던 시절의 실제 이야기입니다. 우리가 아무리 코드를 비효율적으로 짜도, 하드웨어가 멱살 잡고 캐리 해주던 시절. 바로 무어의 법칙(Moore's Law)이 지배하던 황금기였습니다.
하지만 슬프게도, 우리가 사는 지금 2025년은 그 파티가 끝나고 청구서가 날아오는 시기입니다. 오늘은 이 위대한 법칙의 흥망성쇠와, 이것이 지금 내 연봉과 업무에 어떤 영향을 미치고 있는지 정리해본다.
1965년, 인텔(Intel)의 공동 창립자 고든 무어(Gordon Moore)는 반도체 산업의 미래를 예측하는 짧은 논문을 씁니다.
"반도체 칩 하나에 집적할 수 있는 트랜지스터(Transistor)의 수는 약 24개월(2년)마다 두 배로 증가할 것이다."
이 문장은 단순해 보이지만, 엄청난 의미를 담고 있습니다.
삼성전자, 인텔, TSMC 같은 기업들은 이 그래프를 현실로 만들기 위해 피를 토하는 노력을 했습니다.
graph LR
Year1970[1970s] --> Tech1[수천 개 (Intel 4004)]
Year1990[1990s] --> Tech2[수백만 개 (Pentium)]
Year2010[2010s] --> Tech3[수십억 개 (Core i7)]
Year2020[2020s] --> Tech4[수백억~천억 개 (Apple M, NVIDIA)]
Tech1 -.-> Tech2
Tech2 -.-> Tech3
Tech3 -.-> Tech4
그 결과, 1990년대에 300만 원 주고 샀던 컴퓨터보다, 지금 여러분 손에 들린 100만 원짜리 아이폰이 수천 배 더 빠릅니다. 인류 역사상 어떤 산업도 50년 동안 매년 2배씩 효율이 좋아진 사례는 없습니다. 자동차가 무어의 법칙대로 발전했다면, 지금쯤 차 한 대 가격은 100원이고 속도는 마하 10이었을 거라는 우스갯소리가 있을 정도죠.
하지만 영원할 것 같았던 이 법칙에도 한계가 찾아왔습니다. 2000년대 중반부터 CPU 클럭 속도(GHz)의 상승세가 꺾이기 시작한 것입니다.
왜일까요? 너무 작게 만들다 보니 물리학의 벽에 부딪혔기 때문입니다.
결국 2005년경, 마이크로소프트의 허브 서터(Herb Sutter)는 "The Free Lunch Is Over (공짜 점심은 끝났다)"라는 유명한 칼럼을 씁니다.
"더 이상 하드웨어의 발전이 자동으로 소프트웨어를 빠르게 만들어주지 않는다. 이제 성능 향상은 하드웨어 엔지니어가 주는 선물이 아니라, 소프트웨어 개발자의 땀과 노력(동시성 프로그래밍)으로 만들어내야 한다."
처음에는 이 "공짜 점심" 얘기가 와닿지 않았습니다. 무어의 법칙은 트랜지스터 개수가 늘어난다는 건데, 왜 클럭 속도가 안 올라가는 걸까요? 트랜지스터가 많으면 더 빠르게 돌릴 수 있는 거 아닌가요?
이 의문을 풀어준 개념이 바로 데너드 스케일링(Dennard Scaling)이었습니다.
1974년, IBM의 로버트 데너드(Robert Dennard)가 제안한 법칙입니다. 요약하면 이렇습니다.
"트랜지스터를 30% 정도 작게 만들면, 같은 전력으로 속도를 40% 빠르게 할 수 있다."
무어의 법칙이 "2년마다 개수가 2배"라면, 데너드 스케일링은 "작게 만들수록 전력 대비 성능이 좋아진다"는 뜻입니다. 즉, 트랜지스터를 작게 만들면:
이 두 법칙이 손을 잡고 가던 시절, CPU 제조사들은 그야말로 "공짜 점심"을 먹고 있었습니다. 작게 만들기만 하면 개수도 늘고, 속도도 빨라지고, 전력도 덜 먹으니까요.
문제는 2005년경부터 데너드 스케일링이 깨지기 시작했다는 점입니다. 트랜지스터를 작게 만들어도 전력 소비가 비례해서 줄지 않았습니다.
왜 그랬을까요? 물리학 시간에 배운 "누설 전류(Leakage Current)" 때문입니다.
트랜지스터의 게이트(Gate) 두께가 원자 몇 개 수준으로 얇아지니, 꺼져 있어야 할 때도 전자가 새어 나갔습니다. 마치 수도꼭지를 완전히 잠가도 똑똑 물이 떨어지는 것처럼요.
이 누설 전류가 어마어마한 열을 발생시켰습니다. 인텔의 펜티엄4 프레스캇(Prescott) 시리즈는 클럭을 3.8GHz까지 올렸다가 발열 때문에 "넷버스트(NetBurst)" 아키텍처를 포기해야 했을 정도였습니다.
결국, 더 빠르게(Faster) 가는 길은 막혔습니다. 이 대목에서 저는 비로소 이해했다. 무어의 법칙은 살아있어도, 데너드 스케일링이 죽어버리면 "공짜 점심"은 끝나는 거였구나.
데너드 스케일링이 죽었어도, 반도체 업계는 무어의 법칙만큼은 지키려고 발악했습니다. 그게 바로 우리가 뉴스에서 듣는 "5nm", "3nm" 공정 경쟁입니다.
처음에 저는 이게 뭔 소린지 몰랐습니다. "5나노미터요? 원자 크기가 0.1nm인데, 그럼 트랜지스터가 원자 50개 정도 크기라는 건가요?" 네, 맞습니다. 지금 TSMC와 삼성이 만드는 3nm 칩은 정말로 트랜지스터 하나가 원자 30개 수준입니다. 인간이 만든 구조물 중 가장 작은 것입니다.
| 연도 | 공정 노드 | 주요 제품 | 비고 |
|---|---|---|---|
| 2011 | 32nm | Intel Sandy Bridge | PC 황금기 |
| 2014 | 14nm | Intel Broadwell | 모바일 시대 본격화 |
| 2017 | 10nm | Apple A11 | TSMC가 인텔 추월 시작 |
| 2019 | 7nm | AMD Ryzen 3000, Apple A13 | AMD의 역전 시작 |
| 2020 | 5nm | Apple M1, A14 | ARM 기반 혁명 |
| 2022 | 3nm | Apple M2 Pro/Max (TSMC) | 삼성은 양산 실패 |
| 2024 | 2nm | 개발 중 (TSMC) | 물리적 한계 근접 |
이 표를 보면 재밌는 점이 있습니다. 인텔은 10nm에서 주저앉았고, TSMC는 7nm부터 쭉쭉 내려갔습니다. 삼성전자는 3nm를 양산한다고 했지만 수율(Yield) 문제로 고전했습니다.
왜 이렇게 차이가 났을까요? 이 대목에서 저는 "공정 노드 숫자는 마케팅이다"라는 사실을 받아들였다.
예를 들어, TSMC의 7nm와 인텔의 10nm는 실제로는 비슷한 밀도입니다. 인텔이 보수적으로 측정해서 10nm라고 부른 걸, TSMC는 공격적으로 7nm라고 부른 것이죠. 숫자 게임이었던 겁니다.
하지만 결과는 명확했습니다. TSMC는 애플, AMD, 엔비디아 같은 굵직한 고객들을 싹쓸이했고, 인텔은 2021년에야 겨우 10nm를 대량 양산했습니다. 그새 TSMC는 5nm를 넘어 3nm로 달려갔고요.
CPU 제조사들은 전략을 바꿉니다. "한 놈을 똑똑하게 만드는 건 한계가 왔으니, 멍청해도 좋으니 여러 놈을 넣자"는 전략입니다.
이것이 바로 멀티 코어(Multi-Core)의 시작입니다. 싱글 코어 4GHz를 만드는 게 불가능하니, 2GHz짜리 코어 2개(듀얼), 4개(쿼드), 8개(옥타)를 넣기 시작한 것이죠.
하드웨어의 이 변화는 우리 개발자들에게 엄청난 숙제를 안겨주었습니다.
예전에는 코드를 순서대로(Single Thread) 짜면 3GHz 속도로 실행됐습니다. 그런데 새 컴퓨터를 샀더니 2GHz 코어가 4개 달려있습니다. 내 코드는 여전히 싱글 스레드라 코어 1개만 씁니다. 결과적으로 새 컴퓨터에서 내 프로그램이 더 느려졌습니다! (3GHz -> 2GHz)
이때부터 개발자 채용 공고에 무시무시한 단어들이 등장하기 시작합니다. #동시성(Concurrency) #병렬처리(Parallelism) #비동기(Async) #스레드안전(Thread-safety)
이제 개발자가 코드를 쪼개서 4개의 코어에 골고루 나눠주지 않으면 컴퓨터의 성능을 25%밖에 못 쓰는 시대가 된 것입니다.
말로만 들으면 감이 안 옵니다. 그래서 제가 직접 간단한 성능 테스트를 해봤습니다.
# 싱글 스레드 - 소수(Prime Number) 찾기
import time
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def find_primes_single(start, end):
return [n for n in range(start, end) if is_prime(n)]
# 1부터 100,000까지 소수 찾기 (싱글 스레드)
start = time.time()
primes = find_primes_single(1, 100000)
end = time.time()
print(f"싱글 스레드: {end - start:.2f}초, 소수 개수: {len(primes)}")
# 결과 - 약 3.2초
# 멀티 스레드 - 같은 작업을 4개 코어로 분산
from concurrent.futures import ProcessPoolExecutor
import time
def find_primes_multi(start, end, workers=4):
chunk_size = (end - start) // workers
ranges = [(start + i * chunk_size, start + (i + 1) * chunk_size)
for i in range(workers)]
with ProcessPoolExecutor(max_workers=workers) as executor:
results = executor.map(lambda r: find_primes_single(*r), ranges)
return sum(results, [])
# 1부터 100,000까지 소수 찾기 (4코어)
start = time.time()
primes = find_primes_multi(1, 100000, workers=4)
end = time.time()
print(f"멀티 스레드 (4코어): {end - start:.2f}초, 소수 개수: {len(primes)}")
# 결과 - 약 0.9초
결과가 놀라웠습니다.
약 3.5배 빨라졌습니다. 이론적으로는 4배가 되어야 하는데 3.5배가 나온 이유는 프로세스 간 통신 오버헤드(Overhead) 때문입니다.
이 코드를 돌리고 나서야 와닿았다. "공짜 점심이 끝났다"는 게 이거였구나. 예전엔 하드웨어가 알아서 3.2초를 1.6초로 만들어줬는데, 이젠 내가 코드를 쪼개야 0.9초가 된다는 거.
제가 Node.js로 서버를 운영할 때도 이 문제에 부딪혔습니다.
Node.js는 싱글 스레드로 동작합니다. 제 서버는 AWS EC2 c5.xlarge (4코어)에서 돌아가는데, Node 프로세스 하나는 코어 1개만 씁니다. 나머지 3개 코어는 놀고 있는 거죠.
그래서 PM2 Cluster 모드를 써서 프로세스를 4개 복제했습니다.
# PM2로 클러스터 모드 실행
pm2 start app.js -i 4 # 4개 프로세스 생성
# PM2 상태 확인
pm2 status
# ┌─────┬────────┬─────────┬──────┬───────┬────────┐
# │ id │ name │ mode │ ↺ │ cpu │ memory │
# ├─────┼────────┼─────────┼──────┼───────┼────────┤
# │ 0 │ app │ cluster │ 0 │ 25% │ 120MB │
# │ 1 │ app │ cluster │ 0 │ 25% │ 118MB │
# │ 2 │ app │ cluster │ 0 │ 25% │ 121MB │
# │ 3 │ app │ cluster │ 0 │ 25% │ 119MB │
# └─────┴────────┴─────────┴──────┴───────┴────────┘
이렇게 하니 CPU 사용률이 25%에서 100%로 올라갔고, 초당 처리량(Throughput)이 3배 가까이 늘었습니다.
하지만 솔직히, 이게 "개발자의 책임"이 된 게 좀 억울하긴 합니다. 예전엔 그냥 코드 짜면 됐는데, 이젠 클러스터링, 로드 밸런싱, 세션 공유까지 신경 써야 하니까요.
공정 미세화도 한계에 부딪혔고, 멀티 코어도 한계가 있습니다. (코어가 100개 달려있어도 대부분의 프로그램은 못 씁니다) 그럼 이제 어떻게 성능을 올릴까요?
반도체 업계는 또 다른 해법을 내놓았습니다. 칩렛(Chiplet) 아키텍처와 이종 컴퓨팅(Heterogeneous Computing)입니다.
2017년, AMD는 인텔에게 처참하게 밀리고 있었습니다. 시장 점유율이 10%대였죠. 그런데 AMD는 천재적인 발상을 합니다.
"큰 칩 하나를 만들면 수율(Yield)이 낮아서 비싸다. 작은 칩 여러 개를 만들어서 붙이면 어떨까?"
이게 바로 칩렛(Chiplet) 전략입니다.
전통적인 CPU는 하나의 거대한 다이(Die)였습니다. 문제는, 칩이 클수록 불량률이 기하급수적으로 올라간다는 점입니다. 웨이퍼 한 장에 먼지 하나만 떨어져도 그 영역의 칩은 다 버려야 하니까요.
AMD는 이렇게 했습니다.
graph TD
IOD[I/O Die<br/>14nm] --> CCD1[CCD 1<br/>7nm<br/>8 Cores]
IOD --> CCD2[CCD 2<br/>7nm<br/>8 Cores]
IOD --> Memory[DDR4/DDR5 메모리]
IOD --> PCIe[PCIe 연결]
CCD1 -.-> CCD2
이 전략의 장점은 어마어마했습니다.
결과적으로, AMD Ryzen 9 5950X는 16코어에 105W TDP로 인텔의 10코어 CPU를 압도했습니다. 그것도 가격은 더 싸게.
저는 이 전략을 알았을 때 무릎을 쳤습니다. "결국 엔지니어링은 trade-off구나. 완벽한 하나보다, 적당한 여러 개를 잘 붙이는 게 현실적인 해법이었던 거였다."
애플은 한 발 더 나갔습니다. 2020년 M1 칩을 발표하면서 "이종 컴퓨팅(Heterogeneous Computing)"의 교과서를 썼습니다.
M1 칩 하나에는 이런 것들이 들어있습니다.
여기서 핵심은 "각자 잘하는 일만 시킨다"는 철학입니다.
예를 들어, 제가 MacBook에서 유튜브를 보면서 VS Code로 코딩하는 상황을 봅시다.
전부 동시에 돌아가는데, 전체 전력 소비는 20W도 안 됩니다. 인텔 노트북이라면 팬이 쉴 새 없이 돌아갈 작업량입니다.
이 구조를 이해하고 나니, 왜 M1 MacBook Air가 팬도 없는데 인텔 i7보다 빠른지 이해가 됐습니다. "범용 코어 하나를 빠르게"가 아니라, "전문가 여럿을 적재적소에" 배치한 거였구나.
기술 얘기만 하면 재미없으니, 돈 얘기도 해봤다. 무어의 법칙이 끝난 진짜 이유 중 하나는 "경제성"입니다.
| 공정 노드 | 공장 건설 비용 | 주요 기업 |
|---|---|---|
| 28nm (2011) | 30억 달러 | 삼성, TSMC, 인텔 |
| 14nm (2014) | 50억 달러 | 삼성, TSMC, 인텔 |
| 7nm (2018) | 100억 달러 | TSMC, 삼성 |
| 5nm (2020) | 150억 달러 | TSMC, 삼성 |
| 3nm (2022) | 200억 달러 | TSMC (삼성 고전) |
| 2nm (예정) | 280억 달러 추정 | TSMC |
TSMC의 3nm 공장 하나를 짓는데 200억 달러(약 26조 원)가 듭니다. 한국 돈으로 26조면 현대자동차 시가총액과 비슷합니다. 공장 하나가요.
게다가 이 공장의 수명은 5~7년입니다. 그다음 세대 공정이 나오면 구형이 되니까요.
이 때문에 반도체 제조는 이제 TSMC, 삼성전자, 인텔 이 세 기업만 할 수 있는 게임이 됐습니다. GlobalFoundries는 7nm에서 포기했고, 인텔도 외주 생산(파운드리)을 TSMC에 맡기는 지경까지 왔습니다.
미국 정부는 2022년 CHIPS and Science Act를 통과시켜 527억 달러(약 70조 원)를 반도체 산업에 쏟아붓기로 했습니다.
왜일까요? 반도체 생산의 92%가 아시아(한국, 대만, 중국)에 집중되어 있기 때문입니다. 코로나19 때 차량용 반도체 부족으로 GM, 포드가 공장을 멈춰야 했던 사건이 결정타였죠.
TSMC는 미국 애리조나에 400억 달러를 투자해서 5nm 공장을 짓고 있습니다. 삼성전자도 텍사스에 170억 달러를 투자했고요.
저는 이 뉴스를 보면서 깨달았습니다. 무어의 법칙이 끝난 건 기술적 한계도 있지만, 경제적 한계도 있다는 걸요. 2nm 이후는 설령 기술적으로 가능해도, 한 공장에 30조를 쏟아부을 기업이 있을지 의문입니다.
가끔 옛날 코드를 보면 while문 하나로 모든 걸 처리하는 단순함이 그립기도 합니다. 하지만 우리는 이제 복잡한 분산 시스템의 시대에 살고 있습니다.
무어의 법칙은 끝났지만, 개발자의 가치는 오히려 올라갔습니다. 하드웨어가 공짜로 해주던 일을 이제는 우리의 아키텍처 설계 능력으로 해결해야 하니까요.
저는 이제 무어의 법칙의 종말을 다르게 받아들이게 됐습니다. 슬픈 게 아니라, 오히려 개발자가 하드웨어를 제대로 이해해야 하는 시대가 온 거라고요.
여러분의 코드는 지금 멀티 코어를 100% 활용하고 있나요? GPU를 쓸 수 있는 작업을 CPU로 돌리고 있진 않나요? "공짜 점심"이 끝난 뷔페에서 어떻게 배를 채울지 고민해 볼 시간입니다.