Alert

์ด ๊ธ€์€ Claude Code์˜ ๋„์›€์„ ๋ฐ›์•„ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

TL;DR

์ปดํ“จํ„ฐ์˜ ๊ฐ ์ €์žฅ ๊ณ„์ธต(L1 ์บ์‹œ ~ HDD)์€ ํ•œ ๋‹จ๊ณ„ ๋‚ด๋ ค๊ฐˆ ๋•Œ๋งˆ๋‹ค 10~100๋ฐฐ์”ฉ ๋А๋ ค์ง„๋‹ค. ์ด ์ˆซ์ž ๊ฐ๊ฐ์ด ์žˆ์–ด์•ผ ์บ์‹œ, DB ์„ ํƒ, ์‹œ์Šคํ…œ ์„ค๊ณ„์—์„œ ์˜ฌ๋ฐ”๋ฅธ ํŒ๋‹จ์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ๋‹ค.

Source


1. Latency๊ฐ€ ์™œ ์ค‘์š”ํ•œ๊ฐ€

์‹œ์Šคํ…œ ์„ฑ๋Šฅ์€ ์ฒ˜๋ฆฌ๋Ÿ‰(throughput)๋งŒ์œผ๋กœ ๊ฒฐ์ •๋˜์ง€ ์•Š๋Š”๋‹ค. ์•„๋ฌด๋ฆฌ ๋Œ€์—ญํญ์ด ๋„“์–ด๋„, ํ•œ ๋ฒˆ์˜ ์š”์ฒญ-์‘๋‹ต์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„(latency)์ด ๊ธธ๋ฉด ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ์ด ๋ณ‘๋ชฉ์— ๊ฑธ๋ฆฐ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด DB ์ฟผ๋ฆฌ ํ•œ ๋ฒˆ์— 10ms๊ฐ€ ๊ฑธ๋ฆฌ๋ฉด, ์ง๋ ฌ๋กœ 10๋ฒˆ ํ˜ธ์ถœํ•˜๋Š” API๋Š” ์ตœ์†Œ 100ms๋‹ค. ์ด๋Ÿฐ ๊ฐ๊ฐ ์—†์ด ์„ค๊ณ„ํ•˜๋ฉด โ€œ์™œ ๋А๋ฆฐ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹คโ€๋Š” ์ƒํ™ฉ์— ๋น ์ง„๋‹ค.


2. Memory hierarchy

์ปดํ“จํ„ฐ์˜ ์ €์žฅ ์žฅ์น˜๋Š” ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค. ์œ„๋กœ ๊ฐˆ์ˆ˜๋ก ๋น ๋ฅด๊ณ  ์ž‘๊ณ  ๋น„์‹ธ๋ฉฐ, ์•„๋ž˜๋กœ ๊ฐˆ์ˆ˜๋ก ๋А๋ฆฌ๊ณ  ํฌ๊ณ  ์‹ธ๋‹ค.

CPU Registers  (~0.1 ns, ์ˆ˜ ๋ฐ”์ดํŠธ)
    โ†“
L1 Cache       (~1 ns, 32-64 KB/์ฝ”์–ด)
    โ†“
L2 Cache       (~4-7 ns, 256 KB - 1 MB/์ฝ”์–ด)
    โ†“
L3 Cache       (~20-40 ns, 8-64 MB ๊ณต์œ )
    โ†“
Main Memory    (~100 ns, 8-512 GB)
    โ†“
NVMe SSD       (~10-150 us, 256 GB - 8 TB)
    โ†“
SATA SSD       (~50-200 us, 256 GB - 4 TB)
    โ†“
HDD            (~5-10 ms, 1-20 TB)
    โ†“
Network        (~0.5-150 ms, ๋ฌด์ œํ•œ)

ํ•ต์‹ฌ์€ ๊ฐ ๋‹จ๊ณ„๊ฐ€ ๋Œ€๋žต 10~100๋ฐฐ ๋А๋ ค์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. L1 ์บ์‹œ์—์„œ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ๊นŒ์ง€๋งŒ ํ•ด๋„ 200๋ฐฐ ์ฐจ์ด๊ฐ€ ๋‚œ๋‹ค.


3. The numbers

Jeff Dean(Google)์ด ์ •๋ฆฌํ•˜๊ณ , Jonas Boner๊ฐ€ ๋„๋ฆฌ ์•Œ๋ฆฐ ๋ ˆ์ดํ„ด์‹œ ์ˆ˜์น˜๋‹ค. ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฉด์ ‘์—์„œ๋„ ์ž์ฃผ ๋“ฑ์žฅํ•œ๋‹ค.

OperationLatency๋น„๊ณ 
L1 cache reference0.5 ns๊ธฐ์ค€์ 
Branch mispredict5 nsL1์˜ 10๋ฐฐ
L2 cache reference7 nsL1์˜ 14๋ฐฐ
Mutex lock/unlock25 ns
Main memory reference100 nsL1์˜ 200๋ฐฐ
1KB๋ฅผ Snappy๋กœ ์••์ถ•3,000 ns (3 us)
1 Gbps ๋„คํŠธ์›Œํฌ๋กœ 1KB ์ „์†ก10,000 ns (10 us)
SSD random read (4KB)150,000 ns (150 us)
๋ฉ”๋ชจ๋ฆฌ์—์„œ 1MB ์ˆœ์ฐจ ์ฝ๊ธฐ250,000 ns (250 us)
๊ฐ™์€ ๋ฐ์ดํ„ฐ์„ผํ„ฐ ์™•๋ณต500,000 ns (0.5 ms)
SSD์—์„œ 1MB ์ˆœ์ฐจ ์ฝ๊ธฐ1,000,000 ns (1 ms)๋ฉ”๋ชจ๋ฆฌ์˜ 4๋ฐฐ
HDD seek10,000,000 ns (10 ms)SSD์˜ ~67๋ฐฐ
HDD์—์„œ 1MB ์ˆœ์ฐจ ์ฝ๊ธฐ20,000,000 ns (20 ms)๋ฉ”๋ชจ๋ฆฌ์˜ 80๋ฐฐ
CA โ†’ ๋„ค๋œ๋ž€๋“œ โ†’ CA ํŒจํ‚ท ์™•๋ณต150,000,000 ns (150 ms)๋น›์˜ ์†๋„ ํ•œ๊ณ„

์ฒด๊ฐ ๋น„์œ : 1๋‚˜๋…ธ์ดˆ = 1์ดˆ๋ผ๋ฉด?

L1 ์บ์‹œ ์ ‘๊ทผ(~1 ns)์„ 1์ดˆ๋กœ ํ™˜์‚ฐํ•˜๋ฉด ๋‚˜๋จธ์ง€ ๊ณ„์ธต์ด ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฌ๋Š”์ง€ ์ง๊ด€์ ์œผ๋กœ ๋ณด์ธ๋‹ค.

  • L1 ์บ์‹œ = 1์ดˆ
  • ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ = 1๋ถ„ 40์ดˆ
  • NVMe SSD = 5์‹œ๊ฐ„ 30๋ถ„
  • SATA SSD = 28์‹œ๊ฐ„
  • HDD = ์•ฝ 2๊ฐœ์›”

CPU ์ž…์žฅ์—์„œ RAM์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฑด 1~2๋ถ„์ด์ง€๋งŒ, NVMe SSD๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฑด ๋ฐ˜๋‚˜์ ˆ์ด๊ณ , HDD๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฑด ๋‘ ๋‹ฌ ํœด๊ฐ€๋‹ค.


4. Modern hardware

์œ„ ์ˆ˜์น˜๋Š” 2012๋…„ ๊ธฐ์ค€์ด๋‹ค. ์ตœ์‹  ํ•˜๋“œ์›จ์–ด์—์„œ ๋‹ฌ๋ผ์ง„ ๋ถ€๋ถ„์ด ์žˆ๋‹ค.

Operation20122024+๋ณ€ํ™”
SSD random read (4KB)150 us10-20 usNVMe๊ฐ€ 10๋ฐฐ ๋น ๋ฆ„
SSD 1MB ์ˆœ์ฐจ ์ฝ๊ธฐ1 ms0.2-0.5 msNVMe ์ˆœ์ฐจ ~5 GB/s
Main memory reference100 ns50-100 nsDDR5๋กœ ๋Œ€์—ญํญ ๊ฐœ์„ , ๋ ˆ์ดํ„ด์‹œ๋Š” ๋น„์Šท
HDD seek10 ms5-10 ms๊ธฐ๊ณ„์  ํ•œ๊ณ„๋กœ ๊ฑฐ์˜ ๋ณ€ํ™” ์—†์Œ

ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง„ ๊ฒƒ์€ NVMe SSD๋‹ค. ๊ธฐ์กด SATA SSD ๋Œ€๋น„ 10๋ฐฐ ๊ฐ€๊นŒ์ด ๋นจ๋ผ์ง€๋ฉด์„œ, ์ˆœ์ฐจ ์ฝ๊ธฐ ์„ฑ๋Šฅ์ด ๋ฉ”๋ชจ๋ฆฌ์— ๊ทผ์ ‘ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ์ด ๋•๋ถ„์— RocksDB ๊ฐ™์€ ๋””์Šคํฌ ๊ธฐ๋ฐ˜ DB๋„ ์ €๋ ˆ์ดํ„ด์‹œ ์›Œํฌ๋กœ๋“œ์— ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ฐ˜๋ฉด DRAM ๋ ˆ์ดํ„ด์‹œ์™€ HDD seek์€ 10๋…„ ์ „๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค. DRAM์€ ๋Œ€์—ญํญ์€ ๋Š˜์—ˆ์ง€๋งŒ ์ ‘๊ทผ ์ง€์—ฐ์€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ค„์ด๊ธฐ ์–ด๋ ต๊ณ , HDD๋Š” ๊ธฐ๊ณ„์‹ ํšŒ์ „ ๊ตฌ์กฐ์˜ ํ•œ๊ณ„๋‹ค.


5. Practical implications

์ด ์ˆซ์ž๋“ค์ด ์‹ค๋ฌด์—์„œ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์„ ์ •๋ฆฌํ•œ๋‹ค.

ํ”ํ•œ ์˜คํ•ด: โ€œ์ตœ์‹  SSD๋‹ˆ๊นŒ ์ถฉ๋ถ„ํžˆ ๋น ๋ฅด๊ฒ ์ง€โ€

NVMe SSD๊ฐ€ ๋นจ๋ผ์ง„ ๊ฑด ์‚ฌ์‹ค์ด์ง€๋งŒ, ๊ทธ๋ž˜๋„ RAM๋ณด๋‹ค ์•ฝ 200๋ฐฐ ๋А๋ฆฌ๋‹ค. โ€œSSD๋กœ ๋ฐ”๊ฟจ์œผ๋‹ˆ๊นŒ Redis ๊ฐ™์€ ์บ์‹œ๊ฐ€ ํ•„์š” ์—†๋‹คโ€๋Š” ์œ„ํ—˜ํ•œ ํŒ๋‹จ์ด๋‹ค. ํ•˜๋“œ์›จ์–ด๊ฐ€ ๋ฐœ์ „ํ•ด๋„ ๊ณ„์ธต ๊ฐ„ ์†๋„ ๊ฒฉ์ฐจ๋Š” ๊ณ„์† ์œ ์ง€๋˜๊ณ  ์žˆ๋‹ค.

Cache layer๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

DB์—์„œ ๋””์Šคํฌ๋ฅผ ์ฝ์œผ๋ฉด ์ˆ˜ ms๊ฐ€ ๊ฑธ๋ฆฌ์ง€๋งŒ, Redis ๊ฐ™์€ ์ธ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ๋Š” ~100 ns ์ˆ˜์ค€์ด๋‹ค. ์ž์ฃผ ์ฝํžˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์— ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ 1๋งŒ ๋ฐฐ ์ด์ƒ ๋นจ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

Sequential vs random access

์•ž์„œ ๋‹ค๋ฃฌ ์ˆ˜์น˜๋Š” ๋ชจ๋‘ ๋žœ๋ค ์•ก์„ธ์Šค ๊ธฐ์ค€์ด๋‹ค. ๋žœ๋ค์€ ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ์œ„์น˜๋กœ ์ ํ”„ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ ˆ์ดํ„ด์‹œ๊ฐ€ ์ง€๋ฐฐ์ ์ด๋‹ค. ๋ฐ˜๋ฉด ์ˆœ์ฐจ ์ฝ๊ธฐ๋Š” ํ•œ๋ฒˆ ์ ‘๊ทผํ•œ ํ›„ ์—ฐ์†๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌ๋Ÿ‰(throughput)์ด ์ง€๋ฐฐ์ ์ด๋‹ค. NVMe SSD์˜ ์ˆœ์ฐจ ์ฒ˜๋ฆฌ๋Ÿ‰์€ ์ˆ˜ GB/s์— ๋‹ฌํ•œ๋‹ค.

๊ฐ™์€ NVMe SSD๋ผ๋„ ์ž‘์€ ๋žœ๋ค ์ฝ๊ธฐ 1๋งŒ ๋ฒˆ๊ณผ ํฐ ํŒŒ์ผ 1๊ฐœ๋ฅผ ์ˆœ์ฐจ ์ฝ๊ธฐํ•˜๋Š” ๊ฒƒ์€ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ํฌ๋‹ค. ์ด๊ฒƒ์ด DB ์ธ๋ฑ์Šค ์„ค๊ณ„๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ ์ด๊ณ , LSM-tree ๊ธฐ๋ฐ˜ DB(RocksDB, Cassandra)๊ฐ€ ์“ฐ๊ธฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ชจ์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์ด์œ ๋‹ค.

Network latency๋Š” ๋ฌผ๋ฆฌ ๋ฒ•์น™

๋น›์ด ๊ด‘์„ฌ์œ ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ์†๋„๋Š” ~200,000 km/s๋‹ค. ์„œ์šธ-๋ฏธ๊ตญ ์„œ๋ถ€ ๊ฐ„ ํŽธ๋„ ๊ฑฐ๋ฆฌ๊ฐ€ ~9,000 km์ด๋‹ˆ ๋ฌผ๋ฆฌ์  ํ•˜ํ•œ์ด ~45 ms๋‹ค. ๊ธฐ์ˆ ๋กœ ์ค„์ผ ์ˆ˜ ์—†๋Š” ์˜์—ญ์ด๋ฏ€๋กœ, ์‚ฌ์šฉ์ž์™€ ๊ฐ€๊นŒ์šด edge์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ด ์œ ์ผํ•œ ํ•ด๋ฒ•์ด๋‹ค.

Waterfall effect

๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์„ ์ง๋ ฌ๋กœ 3๋ฒˆ ํ•˜๋ฉด ๋ ˆ์ดํ„ด์‹œ๊ฐ€ 3๋ฐฐ๋‹ค. 300 ms ๋งํฌ์—์„œ 3๋ฒˆ ์ง๋ ฌ ํ˜ธ์ถœํ•˜๋ฉด 900 ms. ์ด๊ฒƒ์ด GraphQL ๋ฐฐ์นญ, ๋ณ‘๋ ฌ ์š”์ฒญ, ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์ด ์ค‘์š”ํ•œ ์ด์œ ๋‹ค.


6. Summary table

๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ์–ตํ•ด์•ผ ํ•  ํ•ต์‹ฌ ๋น„์œจ์„ ์ •๋ฆฌํ•œ๋‹ค.

  • L1 โ†’ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ: 200๋ฐฐ
  • ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ โ†’ SSD: 1,000๋ฐฐ
  • SSD โ†’ HDD: ~67๋ฐฐ
  • ๊ฐ™์€ ๋ฐ์ดํ„ฐ์„ผํ„ฐ ์™•๋ณต โ†’ ๋Œ€๋ฅ™ ๊ฐ„ ์™•๋ณต: 300๋ฐฐ

๋ฉด์ ‘์—์„œ ์ž์ฃผ ๋‚˜์˜ค๋Š” ์งˆ๋ฌธ

โ€œ๋ ˆ์ดํ„ด์‹œ ์ˆซ์ž๋ฅผ ์™ธ์›Œ๋ผโ€๊ฐ€ ์•„๋‹ˆ๋ผ ์ž๋ฆฟ์ˆ˜(order of magnitude) ๊ฐ๊ฐ์„ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ns / us / ms ๋‹จ์œ„ ๊ตฌ๋ถ„๊ณผ ๊ฐ ๊ณ„์ธต ๊ฐ„ ๋น„์œจ์„ ์•Œ๋ฉด ์ถฉ๋ถ„ํ•˜๋‹ค.