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๊ฐ ๋๋ฆฌ ์๋ฆฐ ๋ ์ดํด์ ์์น๋ค. ์์คํ ์ค๊ณ ๋ฉด์ ์์๋ ์์ฃผ ๋ฑ์ฅํ๋ค.
| Operation | Latency | ๋น๊ณ |
|---|---|---|
| L1 cache reference | 0.5 ns | ๊ธฐ์ค์ |
| Branch mispredict | 5 ns | L1์ 10๋ฐฐ |
| L2 cache reference | 7 ns | L1์ 14๋ฐฐ |
| Mutex lock/unlock | 25 ns | |
| Main memory reference | 100 ns | L1์ 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 seek | 10,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๋ ๊ธฐ์ค์ด๋ค. ์ต์ ํ๋์จ์ด์์ ๋ฌ๋ผ์ง ๋ถ๋ถ์ด ์๋ค.
| Operation | 2012 | 2024+ | ๋ณํ |
|---|---|---|---|
| SSD random read (4KB) | 150 us | 10-20 us | NVMe๊ฐ 10๋ฐฐ ๋น ๋ฆ |
| SSD 1MB ์์ฐจ ์ฝ๊ธฐ | 1 ms | 0.2-0.5 ms | NVMe ์์ฐจ ~5 GB/s |
| Main memory reference | 100 ns | 50-100 ns | DDR5๋ก ๋์ญํญ ๊ฐ์ , ๋ ์ดํด์๋ ๋น์ท |
| HDD seek | 10 ms | 5-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 ๋จ์ ๊ตฌ๋ถ๊ณผ ๊ฐ ๊ณ์ธต ๊ฐ ๋น์จ์ ์๋ฉด ์ถฉ๋ถํ๋ค.