| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- ํ๋ ์ ๊ตฌ์กฐ
- tcp ์ธ๊ทธ๋จผํธ
- reducible
- ์ค๋ธ์
- ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ
- ์ค๋ฅ์ ์ด
- well known ํฌํธ
- ๋ฉํฐํ๋ ์ฑ
- ์์๋ฒํธ
- xv6
- git merge
- ํ ํฐ ๋ฒ์ค
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ํญํด99
- mariadb
- ๊ฐ๋ฐ์์ทจ์
- 99ํด๋ฝ
- ๋น์ฃผ๊ธฐ์ ํธ
- java thread
- ์ฐ๋ถํฌdb
- ์ค๋ ๋
- ์ค๋ฅ๊ฒ์ถ
- IEEE 802
- ํ๋ก์ด๋์์
- ์ฃผ๊ธฐ์ ํธ
- ์ฝ๋ฉํ ์คํธ์ค๋น
- ๋ฐ์ดํฐ ์ ์ก
- til
- i-type
- ์๋น์ค ํ๋ฆฌ๋ฏธํฐ๋ธ
- Today
- Total
Unfazedโ๏ธ๐ฏ
๋ก์ปฌ ์บ์(Guava, Caffeine Cache) ๋ถ์ฐ ์บ์(Redis, Memcached), ํ์ด๋ธ๋ฆฌ๋ ์บ์, ์บ์ฑ ์ ๋ต ๋ณธ๋ฌธ
๋ก์ปฌ ์บ์(Guava, Caffeine Cache) ๋ถ์ฐ ์บ์(Redis, Memcached), ํ์ด๋ธ๋ฆฌ๋ ์บ์, ์บ์ฑ ์ ๋ต
9taetae9 2025. 9. 21. 14:391. ์บ์ฑ, ์บ์
1.1. ์บ์ฑ์ ๋ชฉ์
์บ์ฑ(Caching)์ ์ฃผ๋ชฉ์ ์ "์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ ๊ฐ์ ๋ฏธ๋ฆฌ ๋ณต์ฌํด ๋์ ์์ ์ฅ์"๋ฅผ ๋ง๋ จํ๋ ๊ฒ์ด๋ค. ์ด๋ ๋ฐ์ดํฐ ์ง์ญ์ฑ(Data Locality) ์์น, ์ฆ ํ๋ฒ ์ฌ์ฉ๋ ๋ฐ์ดํฐ๋ ๊ฐ๊น์ด ๋ฏธ๋์ ๋ค์ ์ฌ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ ๊ฒฝํ์ ๋ฒ์น์ ๊ทผ๊ฑฐํ๋ค.
์บ์ฑ์ ์ง์ ์ ์ธ ๊ฐ์น๋ ์ฑ๋ฅ ํฅ์์ ์๋ค. ๋ฐ์ดํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ๋์คํฌ(SSD, HDD) ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๊ตฌ ์ ์ฅ๋์ง๋ง, ๋์คํฌ ์ ๊ทผ์ ๋ฉ๋ชจ๋ฆฌ(RAM) ์ ๊ทผ์ ๋นํด ์๋๊ฐ ํ์ ํ ๋๋ฆฌ๋ค. ์ธ๋ฉ๋ชจ๋ฆฌ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ RAM์ ์ ์ฅํจ์ผ๋ก์จ ๋ฐ๋ฆฌ์ด ๋ฏธ๋ง์ ์ด์ ์ง์ฐ(ultra-low latency) ๋ฐ์ดํฐ ์ ๊ทผ์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ ์ธ ์๋ต ์๋๋ฅผ ํฌ๊ฒ ๊ฐ์ ํ๋ค.
๊ทธ๋ฌ๋ ์บ์ฑ์ด ๋จ์ํ ์๋ ๊ฐ์ ์๋ง ์ด์ ์ด ์๋ ๊ฒ์ ์๋๋ค. ํ๋ ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ์บ์ฑ์ ๋น์ฉ ์ต์ ํ์ ์์คํ ์์ ์ฑ์ ์ํ ํต์ฌ ์ํคํ ์ฒ ์ ๋ต์ผ๋ก ์์ฃผ ์ด์ฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ธ๋ถ API์ ๊ฐ์ ๋๋ฆฐ ๊ธฐ๋ณธ ์คํ ๋ฆฌ์ง ๊ณ์ธต์ ๋ํ ์ ๊ทผ ํ์๋ฅผ ์ค์์ผ๋ก์จ, ์๋ฒ์ ๋ถํ๋ฅผ ๋ฎ์ถ๊ณ ๋ถํ์ํ ๋คํธ์ํฌ ํธ๋ํฝ์ ์ ๊ฐํ ์ ์๋ค. ์ด๋ ์ง์ ์ ์ธ ์ธํ๋ผ ๋น์ฉ ์ ๊ฐ์ผ๋ก ์ด์ด์ง๋ฉฐ, ํนํ ์ฒ๋ฆฌ๋(IOPS)์ด๋ ๋ฐ์ดํฐ ์ ์ก๋์ ๋ฐ๋ผ ์๊ธ์ด ๋ถ๊ณผ๋๋ ํด๋ผ์ฐ๋ ์๋น์ค ํ๊ฒฝ์์๋ ๊ทธ ํจ๊ณผ๊ฐ ๋์ฑ ์ปค์ง๋ค.
๋ํ ์บ์ฑ์ ์์คํ ์ ํ์ฅ์ฑ๊ณผ ๊ฐ์ฉ์ฑ์ ๋์ด๋ ๋ฐ ๊ฒฐ์ ์ ์ธ ์ญํ ์ ํ ์ ์๋ค. ๋๊ท๋ชจ ํธ๋ํฝ์ด ๋ฐ์ํ๋ ์ํฉ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ข ์ข ์์คํ ์ ์ฒด์ ๋ณ๋ชฉ ์ง์ ์ด ๋๋ค. ์บ์๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ 'ํซ์คํ'(ํน์ ๋ฐ์ดํฐ์ ๋ํ ์ ๊ทผ์ด ์ง์ค๋๋ ํ์)์ ์ ๊ฑฐํ๊ณ ์์ธก ๋ถ๊ฐ๋ฅํ ํธ๋ํฝ ๊ธ์ฆ์ ํจ๊ณผ์ ์ผ๋ก ๋์ํ ์ ์๋ค. ์ด์ฒ๋ผ ์บ์ฑ์ ๋จ์ํ ์ฑ๋ฅ์ ๋ณด์กฐํ๋ ๊ธฐ์ ์ ๋์ด, ์์คํ ์ ๋น์ฉ ๊ตฌ์กฐ์ ์์ ์ฑ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ๊ทผ๋ณธ์ ์ธ ์ํคํ ์ฒ ๋ ๋ฒจ์ ์์ฌ๊ฒฐ์ ์ด๋ผ ํ ์ ์๋ค.
1.2. ์บ์์ ๊ธฐ๋ณธ ๋์ ์๋ฆฌ: Hit์ Miss
์บ์์ ๋์์ 'Cache Hit'์ 'Cache Miss' ๋ ๊ฐ์ง ์ํ๋ก ์์ฝ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ด ํน์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ์ ๋, ํด๋น ๋ฐ์ดํฐ๊ฐ ์บ์์ ์กด์ฌํ์ฌ ์ฆ์ ๋ฐํ๋๋ ๊ฒฝ์ฐ๋ฅผ 'Cache Hit'๋ผ๊ณ ํ๋ค. ๋ฐ๋ฉด, ๋ฐ์ดํฐ๊ฐ ์บ์์ ์กด์ฌํ์ง ์์ ์๋ณธ ๋ฐ์ดํฐ ์ ์ฅ์(ex: ๋ฐ์ดํฐ๋ฒ ์ด์ค)๊น์ง ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ ๊ฒฝ์ฐ๋ฅผ 'Cache Miss'๋ผ๊ณ ํ๋ค.
์บ์ฑ ์ ๋ต์ ํต์ฌ ๋ชฉํ๋ 'Cache Hit Rate'(์บ์ ํํธ์จ)๋ฅผ ์ต๋ํํ๋ ๊ฒ์ด๋ค. ํํธ์จ์ด ๋์์๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๋น ๋ฅธ ์๋ต ์๋๋ฅผ ์ ๊ณตํ๊ณ ์๋ณธ ์ ์ฅ์์ ๋ถํ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ค์ผ ์ ์๋ค. ๋ฐ๋๋ก ๋ฏธ์ค์จ์ด ๋์ผ๋ฉด ์บ์์ ์ด์ ์ ์ ๋๋ก ํ์ฉํ์ง ๋ชปํ๊ณ , ์คํ๋ ค ์บ์๋ฅผ ํ์ธํ๋ ์ถ๊ฐ์ ์ธ ์ค๋ฒํค๋๋ง ๋ฐ์์ํฌ ์ ์๋ค.
2. ๋ก์ปฌ ์บ์(Local Cache)
2.1. ๋ก์ปฌ ์บ์์ ํน์ง
๋ก์ปฌ ์บ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ์์ฒด ๋ฆฌ์์ค, ์ฆ ๋ฉ๋ชจ๋ฆฌ(RAM)๋ ๋์คํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์บ์ฑ ๋ฐฉ์์ด๋ค. ์บ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก์ธ์ค ๋ด์ ์กด์ฌํ๋ฏ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์์ ํ ๊ฐ์ด ํ๋ค.
๋ก์ปฌ ์บ์์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ์๋์ ์ธ ์๋์ด๋ค. ๋ฐ์ดํฐ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ๋คํธ์ํฌ ํต์ ์ด ์ ํ ํ์ ์๋ค. ์ด๋ก ์ธํด ๋ถ์ฐ ์บ์์ ๋น๊ตํ ์ ์์ ์ ๋๋ก ๋น ๋ฅธ ๋ฐ์ดํฐ ์ ๊ทผ ์๋๋ฅผ ๋ณด์ฅํ๋ฉฐ, ๋คํธ์ํฌ ์ง์ฐ์ด๋ ๋จ์ ๊ณผ ๊ฐ์ ์ธ๋ถ ์์ธ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค. ๋ํ, ๋ณ๋์ ์บ์ ์๋ฒ๋ฅผ ๊ตฌ์ถํ๊ฑฐ๋ ๋คํธ์ํฌ๋ฅผ ์ค์ ํ ํ์๊ฐ ์์ด ๊ตฌํ๊ณผ ๊ด๋ฆฌ๊ฐ ๋งค์ฐ ๋จ์ํ๊ณ ์ง๊ด์ ์ด๋ผ๋ ์ฅ์ ์ด ๋ ์ ์๊ฒ ๋ค.
Java ํ๊ฒฝ์์๋ ๋ก์ปฌ ์บ์์ ์ ์ฅ ๊ณต๊ฐ์ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
- On-Heap ์ ์ฅ์: JVM ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฌ์ฉํ๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ (GC)์ ๋์์ด ๋์ง๋ง, ๋ฐ์ดํฐ ์ง๋ ฌํ ๊ณผ์ ์ด ํ์ ์์ด ์ ๊ทผ ์๋๊ฐ ๊ฐ์ฅ ๋น ๋ฅด๋ค.
- Off-Heap ์ ์ฅ์: JVM ํ ์ธ๋ถ์ ๋ค์ดํฐ๋ธ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฌ์ฉํ๋ค. GC์ ์ํฅ์ ๋ฐ์ง ์์ GC๋ก ์ธํ ์ฑ๋ฅ ์ ํ๋ฅผ ํผํ ์ ์์ง๋ง, ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฝ์ ๋ ์ง๋ ฌํ ๋ฐ ์ญ์ง๋ ฌํ ๊ณผ์ ์ด ํ์ํ์ฌ On-Heap ๋ฐฉ์๋ณด๋ค๋ ์๋์ ์ผ๋ก ๋๋ฆฌ๋ค.
2.2. ๋ก์ปฌ ์บ์์ ๋จ์
๋จ์ํจ๊ณผ ๋น ๋ฅธ ์๋์๋ ๋ถ๊ตฌํ๊ณ ๋ก์ปฌ ์บ์๋ ๋ถ์ฐ ์์คํ ํ๊ฒฝ์์ ์ฌ์ฉ ์ ์ฌ๋ฌ ์น๋ช ์ ์ธ ๋จ์ ๋ค์ด ์กด์ฌํ๋ค.
- ๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ฌธ์ : ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ํตํด ์ฌ๋ฌ ์๋ฒ ์ธ์คํด์ค๋ก ํ์ฅ(Scale-out)๋ ํ๊ฒฝ์์ ๋ก์ปฌ ์บ์๋ ์ฌ๊ฐํ ๋ฐ์ดํฐ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ๋ค. ๊ฐ ์๋ฒ ์ธ์คํด์ค๊ฐ ์์ ๋ง์ ๋ ๋ฆฝ์ ์ธ ์บ์๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์, ํ ์๋ฒ์์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๋ค๋ฅธ ์๋ฒ์ ์บ์๋ ๊ฐฑ์ ๋์ง ์๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก, ๋์ผํ ๋ฐ์ดํฐ์ ๋ํ ์์ฒญ์ด ์ด๋ค ์๋ฒ๋ก ์ ๋ฌ๋๋๋์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ๊ฐ์ด ๋ฐํ๋ ์ ์๋ค. ์ด๋ ๋ฐ์ดํฐ์ ์ ๋ขฐ์ฑ์ ํด์น๋ ์ฌ๊ฐํ ๊ฒฐํจ์ด๋ค.
- ๋ฐ์ดํฐ ํ๋ฐ์ฑ ๋ฐ ์๋ช ์ฃผ๊ธฐ: ๋ก์ปฌ ์บ์๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก์ธ์ค์ ์ข ์์ ์ด๋ฏ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์์๋๊ฑฐ๋ ์ฅ์ ๋ก ์ธํด ์ข ๋ฃ๋๋ฉด ์บ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํจ๊ป ์์ค๋๋ค. ์ด๋ก ์ธํด ์๋น์ค ์ฌ์์ ์งํ ๋ชจ๋ ์์ฒญ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ชฐ๋ฆฌ๋ '์บ์ ์คํฌํผ๋(Cache Stampede)' ํ์์ด ๋ฐ์ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ณผ๋ถํ๋ฅผ ์ค ์ ์๋ค.
- ํ์ฅ์ฑ์ ํ๊ณ: ๋ก์ปฌ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์๋ฒ์ ๋ถ์ฐ(Sharding)ํ์ฌ ์ ์ฅํ๋ ๊ฒ์ด ๊ตฌ์กฐ์ ์ผ๋ก ์ด๋ ต๊ณ , ์ค์ง ๋ณต์ (Replication)๋ง ๊ฐ๋ฅํ๋ค. ๋ํ ์บ์ํด์ผ ํ ๋ฐ์ดํฐ์ ์์ด ๋์ด๋ ์๋ก ์ ํ๋ฆฌ์ผ์ด์ (WAS) ์์ฒด์ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ๋์ด ๋น๋กํ์ฌ ์ฆ๊ฐํ๋ฏ๋ก, ์์ง์ ํ์ฅ(Scale-up)์ ํฌ๊ฒ ์์กดํ๊ฒ ๋๋ค.
- ์์ ๋ญ๋น: ์ฌ๋ฌ ์๋ฒ ์ธ์คํด์ค๊ฐ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ค๋ณตํด์ ์ ์ฅํ์ฌ, ๋ฉ๋ชจ๋ฆฌ ์์์ ๋ญ๋น๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ค์ ๋ก์ปฌ ์บ์ ์์ฒด์ ๊ฒฐํจ์ด๋ผ๊ธฐ๋ณด๋ค๋, ๋จ์ผ ํ๋ก์ธ์ค ํ๊ฒฝ์ ์ต์ ํ๋ ๊ธฐ์ ์ ๊ทธ ์ค๊ณ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋ถ์ฐ ํ๊ฒฝ์ ์ ์ฉํ์ ๋ ๋ฐ์ํ๋ ๊ฒฐ๊ณผ์ด๋ค. ๋ฐ๋ผ์ ๋ก์ปฌ ์บ์๋ฅผ ์ ํํ๊ธฐ ์ ์๋ ํ์ฌ ์์คํ ์ ์ํคํ ์ฒ๋ฟ๋ง ์๋๋ผ, ๋ฏธ๋์ ํ์ฅ ๊ฐ๋ฅ์ฑ๊น์ง ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํ๋ค. ๋จ์ผ ์ธ์คํด์ค ์คํ์ด ๋ณด์ฅ๋๋ ํ๊ฒฝ, ์๋ฅผ ๋ค์ด ํน์ ๋ฐฐ์น ์์ ์ ์ํํ๋ ๋ ๋ฆฝ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ์์๋ ๋ก์ปฌ ์บ์๊ฐ ์ฌ์ ํ ๊ฐ์ฅ ํจ์จ์ ์ธ ์ ํ์ผ ์ ์๋ค.
2.3. Java ์ฃผ์ ๋ก์ปฌ ์บ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: Guava Cache, Caffeine Cache
Java ์ง์์์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ก์ปฌ ์บ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Google์ Guava Cache์ ์ด๋ฅผ ๊ณ์นํ Caffeine Cache์ด๋ค.
- Guava Cache: Google์ ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Guava์ ํฌํจ๋ ์บ์ ๊ตฌํ์ฒด์ด๋ค. CacheBuilder ํด๋์ค๋ฅผ ํตํด ๋น๋ ํจํด์ผ๋ก ์ ์ฐํ๊ฒ ์บ์๋ฅผ ์ค์ ํ ์ ์์ผ๋ฉฐ, ํฌ๊ธฐ ๊ธฐ๋ฐ ์ ๊ฑฐ, ์๊ฐ ๊ธฐ๋ฐ ๋ง๋ฃ(์์ฑ ํ, ์ ๊ทผ ํ), ์ค๋ ๋ ์์ ์ฑ ๋ฑ ํ์์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ํนํ LoadingCache ์ธํฐํ์ด์ค๋ ์บ์ ๋ฏธ์ค๊ฐ ๋ฐ์ํ์ ๋ ์ ์๋ ๋ก์ง์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋ก๋ํด์ฃผ๋ ํธ๋ฆฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- Caffeine Cache: Guava Cache๋ฅผ ๋ฐํ์ผ๋ก ๋ ๋์ ์ฑ๋ฅ์ ๋ชฉํ๋ก ์ค๊ณ๋ ๋ก์ปฌ ์บ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. Java 8 ์ด์ ํ๊ฒฝ์ ์๊ตฌํ๋ฉฐ, Guava Cache์ API์ ๊ฑฐ์ ํธํ๋์ด ๊ธฐ์กด Guava ์ฌ์ฉ์๋ค์ด ์ฝ๊ฒ ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์๋ค. Caffeine์ ๊ฐ์ฅ ํฐ ํน์ง์ TinyLFU(Tiny Least Frequently Used)๋ผ๋ ๋ ์ฐฝ์ ์ธ ์บ์ ์ ๊ฑฐ ์ ์ฑ ์ ์ฑํํ๋ค๋ ๊ฒ์ด๋ค. ์ด๋ ์ ํต์ ์ธ LRU(Least Recently Used)์ LFU(Least Frequently Used) ์ ์ฑ ์ ์ฅ์ ์ ๊ฒฐํฉํ์ฌ, ์ ๊ทผ ๋น๋์ ์ต๊ทผ์ฑ์ ๋ชจ๋ ๊ณ ๋ คํจ์ผ๋ก์จ ์ต์ ์ ๊ฐ๊น์ด ๋์ ์บ์ ํํธ์จ์ ๋ฌ์ฑํ๋ค. ๋ํ, ๋น๋๊ธฐ ๋ก๋ฉ, ๋ง๋ฃ๋ ๋ฐ์ดํฐ์ ๋น๋๊ธฐ ๋ฆฌํ๋ ์ ๋ฑ Guava๋ณด๋ค ๋ฐ์ ๋ ๊ธฐ๋ฅ์ ๋ค์ ์ ๊ณตํ๋ฉฐ, Spring Framework 4.3 ๋ฒ์ ๋ถํฐ๋ ๊ณต์ ์บ์ ๊ตฌํ์ฒด๋ก ์ฑํ๋์ด ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์๋ค.
๋ค์์ Caffeine์ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ๋ก์ปฌ ์บ์๋ฅผ ๊ตฌ์ฑํ๋ ์์ ์ฝ๋์ด๋ค.
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
import java.util.concurrent.TimeUnit;
public class CaffeineExample {
public static void main(String args) {
// Caffeine ์บ์ ๋น๋๋ฅผ ์ฌ์ฉํ์ฌ ์บ์ ์ธ์คํด์ค ์์ฑ
LoadingCache<String, String> cache = Caffeine.newBuilder()
.maximumSize(100) // ์บ์์ ์ ์ฅํ ์ ์๋ ์ต๋ ์์ดํ
์
.expireAfterWrite(10, TimeUnit.MINUTES) // ์์ดํ
์ด ์ฐ์ฌ์ง ํ 10๋ถ ๋ค ๋ง๋ฃ
.refreshAfterWrite(1, TimeUnit.MINUTES) // ์์ดํ
์ด ์ฐ์ฌ์ง ํ 1๋ถ๋ง๋ค ๋น๋๊ธฐ ๋ฆฌํ๋ ์
.build(key -> loadDataFromDatabase(key)); // Cache Miss ์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ ๋ก์ง ์ ์
// ๋ฐ์ดํฐ ์กฐํ
String value = cache.get("some-key");
System.out.println("Cached Value: " + value);
}
// ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ธ๋ถ API์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์๋ฎฌ๋ ์ด์
private static String loadDataFromDatabase(String key) {
System.out.println("Loading data for key: " + key);
return "Data for " + key;
}
}
์ด ์ฝ๋์์ build() ๋ฉ์๋์ ์ ๋ฌ๋ ๋๋ค ํจ์๋ CacheLoader ์ญํ ์ ํ์ฌ, cache.get("some-key") ํธ์ถ ์ ์บ์์ ํด๋น ํค๊ฐ ์์ผ๋ฉด loadDataFromDatabase() ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ํธ์ถํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ ํ ์บ์์ ์ ์ฅํ๋ค.
3. ๋ถ์ฐ ์บ์(Distributed Cache)
3.1. ๋ถ์ฐ ์บ์์ ์ํคํ ์ฒ์ ํน์ง
๋ถ์ฐ ์บ์(Distributed Cache)๋ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์๋ ๋ ๋ฆฝ๋ ๋ณ๋์ ์๋ฒ(๋๋ ์๋ฒ ํด๋ฌ์คํฐ)์ ์บ์ ์ ์ฅ์๋ฅผ ๊ตฌ์ถํ๊ณ , ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ๋คํธ์ํฌ๋ฅผ ํตํด ์ด ๊ณต์ ์ ์ฅ์์ ์ ๊ทผํ๋ ๋ฐฉ์์ด๋ค.
์ด๋ฌํ ์ํคํ ์ฒ๋ ๋ก์ปฌ ์บ์์ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ์ ๋ค์ ํด๊ฒฐํ๋ค.
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ ๋ณด์ฅ: ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ์ค์์ ๋จ์ผ ์บ์ ์ ์ฅ์๋ฅผ ์ฐธ์กฐํ๋ฏ๋ก, ๋ฐ์ดํฐ ๋ถ์ผ์น ๋ฌธ์ ๊ฐ ์์ฒ์ ์ผ๋ก ๋ฐ์ํ์ง ์๋๋ค. ์ด๋ค ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํญ์ ๋์ผํ ์บ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฅ๋ฐ์ ์ ์๋ค.
- ๋์ ํ์ฅ์ฑ๊ณผ ๊ฐ์ฉ์ฑ: ๋ถ์ฐ ์บ์๋ ์ํ์ ํ์ฅ(Scale-out)์ ๋งค์ฐ ์ฉ์ดํ๋ค. ๋ฐ์ดํฐ ์์ด ๋์ด๋๊ฑฐ๋ ํธ๋ํฝ์ด ์ฆ๊ฐํ๋ฉด ์บ์ ์๋ฒ๋ฅผ ์ถ๊ฐํ์ฌ ์ฉ๋๊ณผ ์ฒ๋ฆฌ๋์ ์ ํ์ ์ผ๋ก ๋๋ฆด ์ ์๋ค. ๋ํ, ๋ฐ์ดํฐ ๋ณต์ (Replication)๋ ํด๋ฌ์คํฐ๋ง(Clustering) ๊ตฌ์ฑ์ ํตํด ํน์ ์บ์ ์๋ฒ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์๋น์ค ์ค๋จ ์์ด ์ด์๋๋ ๊ณ ๊ฐ์ฉ์ฑ(High Availability)์ ํ๋ณดํ ์ ์๋ค.
- ๋ฐ์ดํฐ ์์์ฑ: ์บ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก์ธ์ค์ ๋ถ๋ฆฌ๋์ด ์๊ธฐ ๋๋ฌธ์, ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ์ฌ์์๋๊ฑฐ๋ ๋ฐฐํฌ๊ฐ ์ด๋ฃจ์ด์ ธ๋ ์บ์ ๋ฐ์ดํฐ๋ ๊ทธ๋๋ก ์ ์ง๋๋ค. Redis์ ๊ฐ์ ์ผ๋ถ ์๋ฃจ์ ์ ์ค๋ ์ท์ด๋ ๋ก๊ทธ ํ์ผ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ ์ฅํ๋ ์์์ฑ ์ต์ ์ ์ ๊ณตํ์ฌ, ์บ์ ์๋ฒ ์์ฒด์ ์ฅ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด์กดํ ์ ์๋ค.
3.2. ๋ถ์ฐ ์บ์์ ๋จ์
๋ถ์ฐ ์บ์๋ ๋ง์ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๊ทธ์ ์์ํ๋ ํธ๋ ์ด๋์คํ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ๋คํธ์ํฌ ์ง์ฐ: ๋ชจ๋ ์บ์ ์ ๊ทผ์ ๋คํธ์ํฌ ํต์ ์ ์๋ฐํ๋ค. ์ด๋ ์๋ฌด๋ฆฌ ๋น ๋ฅธ ๋คํธ์ํฌ ํ๊ฒฝ์ด๋ผ๋ ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ๋ณด๋ค๋ ํ์ฐ์ ์ผ๋ก ๋๋ฆด ์๋ฐ์ ์๋ค. ๋ํ ๋คํธ์ํฌ ์ํ์ ๋ฐ๋ผ ์ฑ๋ฅ์ ๋ณ๋์ฑ์ด ๋ฐ์ํ ์ ์๋ค๋ ์ ๋ ๊ณ ๋ คํด์ผ ํ๋ค.
- ์ด์ ๋ณต์ก์ฑ ๋ฐ ๋น์ฉ: ๋ณ๋์ ์บ์ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๊ณ , ๋ชจ๋ํฐ๋งํ๋ฉฐ, ์ฅ์ ์ ๋๋นํ๋ ๋ฑ ์ถ๊ฐ์ ์ธ ์ด์ ๋ถ๋ด์ด ๋ฐ์ํ๋ค. ์บ์ ์๋ฒ ์์ฒด๊ฐ ๋ ๋ค๋ฅธ ์ฅ์ ํฌ์ธํธ(Single Point of Failure)๊ฐ ๋ ์ ์์ผ๋ฏ๋ก, ๊ณ ๊ฐ์ฉ์ฑ ๊ตฌ์ฑ์ด ํ์์ ์ด๋ฉฐ ์ถ๊ฐ์ ์ธ ๋น์ฉ์ด ๋ฐ์ํ๋ค.
- ๋ฐ์ดํฐ ์ง๋ ฌํ ์ค๋ฒํค๋: ๊ฐ์ฒด์ ๊ฐ์ ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์กํ๋ ค๋ฉด, ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํธ ์คํธ๋ฆผ์ผ๋ก ๋ณํํ๋ ์ง๋ ฌํ(Serialization)์ ์ด๋ฅผ ๋ค์ ๊ฐ์ฒด๋ก ๋ณต์ํ๋ ์ญ์ง๋ ฌํ(Deserialization) ๊ณผ์ ์ด ํ์ํ๋ค. ์ด ๊ณผ์ ์ CPU ์์์ ์๋ชจํ๋ ์ถ๊ฐ์ ์ธ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํจ๋ค.
3.3. ๋ํ์ ์ธ ๋ถ์ฐ ์บ์ ์๋ฃจ์ : Redis vs Memcached
๊ฐ์ฅ ๋ํ์ ์ธ ๋ถ์ฐ ์บ์ ์๋ฃจ์ ์ Redis์ Memcached์ด๋ค. ๋ ์๋ฃจ์ ๋ชจ๋ ๊ณ ์ฑ๋ฅ ์ธ๋ฉ๋ชจ๋ฆฌ ํค-๊ฐ ์ ์ฅ์๋ผ๋ ๊ณตํต์ ์ ๊ฐ์ง์ง๋ง, ๊ทผ๋ณธ ๋ชฉ์ ๊ณผ ์ํคํ ์ฒ์์ ๋๋ ทํ ์ฐจ์ด๊ฐ ์๋ค.
Memcached๋ 'ํ๋ฐ์ฑ, ๋จ์์ฑ, ๋น ๋ฅธ ์๋'๋ผ๋ ์บ์ ๋ณธ์ฐ์ ์ญํ ์ ์ถฉ์คํ ์๋ฃจ์ ์ด๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถํ ๊ฒฝ๊ฐ์ด ์ฃผ๋ ๋ชฉํ์ด๊ณ , ์๋ณธ ๋ฐ์ดํฐ๋ก ์ฆ์ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ๋จ์ํ ํค-๊ฐ ์บ์ฑ๋ง ํ์ํ๋ค๋ฉด Memcached์ ๋ฉํฐ์ค๋ ๋ ์ํคํ ์ฒ์ ๋จ์์ฑ์ด ๋ ์ ๋ฆฌํ ์ ์๋ค.
Redis๋ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ์ ์์์ฑ, ๊ณ ๊ฐ์ฉ์ฑ ๊ธฐ๋ฅ์ ์ ๊ณตํจ์ผ๋ก์จ ๋จ์ํ '์บ์'๋ฅผ ๋์ด '๋ค๋ชฉ์ ๊ณ ์ ๋ฐ์ดํฐ ์ ์ฅ์'๋ก์์ ์ญํ ์ ์ํํ๋ค. ๋ญํน ์์คํ , ์ค์๊ฐ ์ฑํ , ๋ฉ์์ง ํ ๋ฑ ๋ณต์กํ ๋ฐ์ดํฐ ์ฐ์ฐ์ด๋ ๋ฐ์ดํฐ ๋ณด์กด์ด ํ์ํ ์๋๋ฆฌ์ค์์๋ Redis๊ฐ ๊ฑฐ์ ์ ์ผํ ์ ํ์ง๋ค.
| ๊ธฐ๋ฅ/ํน์ง | Redis | Memcached |
| ์๋ฃ๊ตฌ์กฐ | Strings, Lists, Sets, Sorted Sets, Hashes, Bitmaps ๋ฑ ๋ค์ํจ | ๋จ์ Key-Value (Strings)๋ง ์ง์ |
| ์ค๋ ๋ฉ ๋ชจ๋ธ | ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธ ์ค๋ ๋ (I/O Multiplexing). Race Condition ์ฐ๋ ค๊ฐ ์ ์ | ๋ฉํฐ ์ค๋ ๋ ์ํคํ ์ฒ. ๋ค์ค ์ฝ์ด๋ฅผ ํ์ฉํ์ฌ ๋์ ์ฒ๋ฆฌ๋(Throughput) ๋ฌ์ฑ |
| ์์์ฑ | RDB(์ค๋ ์ท), AOF(๋ก๊ทธ ํ์ผ) ๋ฐฉ์์ ๋์คํฌ ์ ์ฅ ์ง์ | ์ง์ํ์ง ์์. ์์ ์ธ๋ฉ๋ชจ๋ฆฌ ํ๋ฐ์ฑ ์บ์ |
| ๋ณต์ /๊ณ ๊ฐ์ฉ์ฑ | Master-Slave ๋ณต์ , Sentinel์ ํตํ ์๋ Failover, Cluster๋ฅผ ํตํ ์ค๋ฉ ๋ฐ ๊ณ ๊ฐ์ฉ์ฑ ๋ด์ฅ ์ง์ | ์์ฒด ๊ธฐ๋ฅ ์์. ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Consistent Hashing)๋ ์ธ๋ถ ๋๊ตฌ๋ฅผ ํตํด ๊ตฌํ ํ์ |
| ํธ๋์ญ์ | MULTI/EXEC ๋ช ๋ น์ด๋ฅผ ํตํ ์์์ ์ฐ์ฐ ์ง์ | ์ง์ํ์ง ์์ |
| Pub/Sub | ๋ด์ฅ๋ ๋ฐํ/๊ตฌ๋ ๋ฉ์์ง ๊ธฐ๋ฅ ์ ๊ณต | ์ง์ํ์ง ์์ |
| ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ | ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น (jemalloc). ๋ฉ๋ชจ๋ฆฌ ๋จํธํ ๋ฐ์ ๊ฐ๋ฅ์ฑ ์์ |
Slab Allocator๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ํ ๋นํ๊ณ ์ฌ์ฌ์ฉ. ๋จํธํ๊ฐ ์ ์ |
| ์ฃผ์ ์ฌ์ฉ ์ฌ๋ก | ๋ณตํฉ ๋ฐ์ดํฐ ์บ์ฑ, ๋ญํน ๋ณด๋, ๋ฉ์์ง ํ, ์ธ์ ์คํ ์ด, ์ค์๊ฐ ๋ถ์ ๋ฑ ๋ค๋ชฉ์ | ๋จ์ ๊ฐ์ฒด/๋ฌธ์์ด ์บ์ฑ, DB ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์บ์ฑ ๋ฑ ์์ ์บ์ฑ ๋ชฉ์ |
4. ์บ์ฑ ์ ๋ต๊ณผ ๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ฌธ์
์บ์๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฝ๊ณ ์ธ ๊ฒ์ธ์ง์ ๋ํ ๋ช ํํ ์ ๋ต, ์ฆ '์บ์ฑ ํจํด'์ ์ ์ํด์ผ ํ๋ค.
4.1. ๋ฐ์ดํฐ ์ ๊ทผ ํจํด
- Cache-Aside (Lazy Loading): ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ณด์์ ์ด๊ณ ์์ ํ ํจํด์ด๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ดํฐ์ ํ๋ฆ์ ์ง์ ์ ์ดํ๋ฉฐ, ์บ์๋ ์กฐํ ์๋ ๊ฐ์ ๋ณด์กฐ ์ญํ ๋ง ์ํํ๋ค.

Cache Hit ์๋๋ฆฌ์ค
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ดํฐ ์กฐํ๋ฅผ ์ํด ๋จผ์ ์บ์๋ฅผ ํ์ธํ๋ค. (Application → Cache (read request))
- Cache Hit ์, ์บ์ ๋ฐ์ดํฐ๋ฅผ ์ฆ์ ๋ฐํํ๋ค. (cache hit: read from cache → Application)
Cache Miss ์๋๋ฆฌ์ค
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ดํฐ ์กฐํ๋ฅผ ์ํด ๋จผ์ ์บ์๋ฅผ ํ์ธํ๋ค. (Application → Cache (read request))
- Cache Miss (cache miss: (Cache → Application))
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ค. (Application → Storage (read request))
- ๋ฐ์ดํฐ ๋ฒ ์ด์ค์์ ์กฐํํ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ค. (read from storage (Storage → Application))
- ์บ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. (write to cache (Application → Cache))
- ์ฅ์ : ์ค์ ๋ก ์์ฒญ๋๋ ๋ฐ์ดํฐ๋ง ์บ์์ ์ ์ฅ๋์ด ๋ฉ๋ชจ๋ฆฌ๊ฐ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ๋๋ฉฐ, ์บ์์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํ๋ฅผ ํตํด ์๋น์ค์ ์ฐ์์ฑ์ ๋ณด์ฅํ ์ ์๋ค.
- ๋จ์ : ์ต์ด ๋ฐ์ดํฐ ์ ๊ทผ ์์๋ ํญ์ Cache Miss๊ฐ ๋ฐ์ํ์ฌ ์ง์ฐ ์๊ฐ์ด ๊ธธ์ด์ง๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์์ ๋ ์บ์๋ฅผ ๋ช ์์ ์ผ๋ก ๋ฌดํจํ(invalidate)ํ์ง ์์ผ๋ฉด ๋ฐ์ดํฐ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ ์ ์๋ค.

- Read-Through: ๋ฐ์ดํฐ ๋ก๋ฉ ์ฑ
์์ ์บ์์๊ฒ ์์ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋๋ฅผ ๋จ์ํํ๋ ํจํด์ด๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ํญ์ ์บ์์๋ง ๋ฐ์ดํฐ ์กฐํ๋ฅผ ์์ฒญํ๋ค.
- Cache Hit ์, ์บ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ค.
- Cache Miss์, ์บ์๊ฐ ์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ฌ ์บ์์ ์ ์ฅํ ํ, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐํํ๋ค.
- ์ฅ์ : ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์กด์ฌ๋ฅผ ์ธ์งํ ํ์๊ฐ ์์ด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ , ๋ฐ์ดํฐ ๋ก๋ฉ ๋ก์ง์ด ์บ์์ ์ง์ค๋์ด ์ผ๊ด์ฑ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๋ค.
- ๋จ์ : ์บ์ ์๋ฃจ์ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ํต์ ํ๋ ๊ธฐ๋ฅ์ ์ง์ํด์ผ ํ๋ฉฐ, ์บ์์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ฐ์ดํฐ ์กฐํ ์์ฒด๊ฐ ๋ถ๊ฐ๋ฅํด์ ธ ์๋น์ค ์ ์ฒด์ ์ฅ์ ๋ก ์ด์ด์ง ์ ์๋ค.

- Write-Through: ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ์ต์ฐ์ ์ผ๋ก ๊ณ ๋ คํ๋ ํจํด์ผ๋ก, ์ฃผ๋ก ๊ธ์ต ๊ฑฐ๋์ ๊ฐ์ด ๊ฐ๋ ฅํ ์ผ๊ด์ฑ์ด ์๊ตฌ๋๋ ์์คํ
์ ์ ํฉํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ดํฐ๋ฅผ ์ธ ๋, ๋จผ์ ์บ์์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ค.
- ์บ์์ ์ฐ๊ธฐ๊ฐ ์ฑ๊ณตํ๋ฉด, ์ฆ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ด๋ค. ๋ ์์ ์ด ๋ชจ๋ ์ฑ๊ณตํด์ผ ์ฐ๊ธฐ ์์ ์ด ์๋ฃ๋๋ค.
- ์ฅ์ : ์บ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๊ฐ ํญ์ ๋๊ธฐํ๋๋ฏ๋ก ๋ฐ์ดํฐ ์ ํฉ์ฑ์ด ๋งค์ฐ ๋๋ค.
- ๋จ์ : ๋ชจ๋ ์ฐ๊ธฐ ์์ ์ด ์บ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ๊ณณ์์ ์ด๋ฃจ์ด์ง๋ฏ๋ก, ์ฐ๊ธฐ ์ง์ฐ ์๊ฐ์ด ์ฆ๊ฐํ๊ณ ์์คํ ์ ์ฒด์ ์ฐ๊ธฐ ์ฒ๋ฆฌ๋์ด ๊ฐ์ํ ์ ์๋ค.

- Write-Back (Write-Behind): ์ฐ๊ธฐ ์ฑ๋ฅ์ ๊ทน๋ํํ๊ธฐ ์ํ ํจํด์ผ๋ก, ๋ฐ์ดํฐ ์ ํฉ์ฑ๋ณด๋ค๋ ์ฐ๊ธฐ ์ฒ๋ฆฌ๋์ด ํจ์ฌ ์ค์ํ ํน์ ๋๋ฉ์ธ(ex: ๋๋์ ๋ก๊ทธ ์์ง, ์ค์๊ฐ ํต๊ณ ์ง๊ณ)์ ์ฌ์ฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ ์บ์์๋ง ์ด๋ค.
- ์บ์๋ ์ฐ๊ธฐ ์์ฒญ์ ํน์ ๋ฒํผ์ ๋ชจ์๋์๋ค๊ฐ, ์ผ์ ์๊ฐ์ด ์ง๋๊ฑฐ๋ ๋ฒํผ๊ฐ ๊ฐ๋ ์ฐจ๋ฉด ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด ๊ธฐ๋ก(batch write)ํ๋ค.
- ์ฅ์ : ์ฐ๊ธฐ ์์ ์ด ๋ฉ๋ชจ๋ฆฌ์์ ์ฆ์ ์๋ฃ๋๋ฏ๋ก ์๋ต ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ธฐ ๋ถํ๋ฅผ ํ๊ธฐ์ ์ผ๋ก ์ค์ผ ์ ์๋ค.
- ๋จ์ : ์บ์์๋ง ๋ฐ์ดํฐ๊ฐ ๊ธฐ๋ก๋ ์ํ์์ ์บ์ ์๋ฒ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์๋์ง ์์ ๋ฐ์ดํฐ๊ฐ ์๊ตฌ์ ์ผ๋ก ์ ์ค๋ ์ํ์ด ์กด์ฌํ๋ค.

- Write-Around: ์ฐ๊ธฐ ์์
์ด ์ฆ์ง๋ง ํด๋น ๋ฐ์ดํฐ๊ฐ ๋ค์ ์ฝํ ํ๋ฅ ์ด ๋ฎ์ ๊ฒฝ์ฐ์ ์ ์ฉํ ํจํด์ด๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐ๊ธฐ ์์ ์ ์บ์๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์ํํ๋ค. (์ ๊ทธ๋ฆผ์ 1๋ฒ ์์ )
- ์ฝ๊ธฐ ์์ ์ Cache-Aside ํจํด์ ๋ฐ๋ฅธ๋ค. (์ ๊ทธ๋ฆผ์ 2,3,4๋ฒ ์์ )
- ์ฅ์ : ์ฐ๊ธฐ ์์ ์ด ๋น ๋ฅด๊ณ , ๋ถํ์ํ ๋ฐ์ดํฐ๊ฐ ์บ์์ ์ ์ฅ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ ์บ์ ํจ์จ์ ๋์ธ๋ค.
- ๋จ์ : ๋ฐ์ดํฐ๋ฅผ ์ด ์งํ์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฝ์ผ๋ ค๊ณ ํ๋ฉด ๋ฐ๋์ Cache Miss๊ฐ ๋ฐ์ํ์ฌ, ์ผ์์ ์ผ๋ก ๋ฐ์ดํฐ ๋ถ์ผ์น๋ฅผ ๊ฒฝํํ๊ฒ ๋๋ค.
4.2. ๋์ฉ๋ ํธ๋ํฝ ํ๊ฒฝ์์์ ๋ฌธ์ ์ ํด๊ฒฐ์ฑ
๋๊ท๋ชจ ํธ๋ํฝ ํ๊ฒฝ์์๋ ๋จ์ํ ์บ์ฑ ํจํด๋ง์ผ๋ก๋ ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ๋ค์ด ๋ฐ์ํ๋ค.
4.2.1 ์บ์ ์๋ (Cache Stampede / Thundering Herd)
์ธ๊ธฐ ์๋ ๋ฐ์ดํฐ์ ์บ์๊ฐ ๋ง๋ฃ๋๋ ์๊ฐ, ์๋ง์ ์์ฒญ์ด ๋์์ Cache Miss๋ฅผ ์ผ์ผํค๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ชฐ๋ ค๊ฐ ์์คํ ์ ์ฒด์ ๊ณผ๋ถํ๋ฅผ ์ฃผ๋ ํ์์ด๋ค.
- ๋ฌธ์ ์ํฉ
Cache ๋ง๋ฃ ์์ ์ ๋๋์ ๋์ ์์ฒญ ๋ฐ์
↓
๋ชจ๋ ์์ฒญ์ด DB๋ก ์ง์ ์ ์ก
↓
DB ๊ณผ๋ถํ ๋ฐ ์๋ต ์ง์ฐ
- ๋ฐ์ ์๋๋ฆฌ์ค
- ์ธ๊ธฐ ์ํ ์ ๋ณด๊ฐ ์บ์์์ ๋ง๋ฃ๋ ๋
- ํธ๋ ๋ฉ ์ฝํ ์ธ ์ ๋ํ ๋๋ ์กฐํ
- ํ๋ก๋ชจ์ ์๊ฐ ๋ฑ ํน์ ์์ ์ ์ง์ค ์์ฒญ
- ํด๊ฒฐ์ฑ 1 (Jitter ์ถ๊ฐ): ์บ์ ๋ง๋ฃ ์๊ฐ(TTL)์ ์งง์ ๋๋ค ์๊ฐ(Jitter)์ ์ถ๊ฐํ์ฌ, ์ฌ๋ฌ ์บ์ ํญ๋ชฉ์ด ๋์์ ๋ง๋ฃ๋์ง ์๋๋ก ์์ ์ ๋ถ์ฐ์ํค๋ ์ ๋ต์ด๋ค.
- ํด๊ฒฐ์ฑ 2 (๋ถ์ฐ ๋ฝ ์ ์ฉ): Redisson(Redis ๊ธฐ๋ฐ ๋ถ์ฐ ๋ฝ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๊ฒ ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ) ๋ฑ ๋ถ์ฐ ๋ฝ์ ํ์ฉํ์ฌ ๋จ ํ๋ฒ์ ์ฐ๊ธฐ ์์ ๋ง ํ์ฉ ์ํค๊ธฐ๋ ๋ฐฉ๋ฒ์ด๋ค.
4.2.2. ์บ์ ๊ดํต (Cache Penetration)
์กด์ฌํ์ง ์๋ ๋ฐ์ดํฐ์ ๋ํ ์ ์์ ์ด๊ฑฐ๋ ๋น์ ์์ ์ธ ์์ฒญ์ด ๋ฐ๋ณต์ ์ผ๋ก ๋ฐ์ํ์ฌ, ๋งค๋ฒ Cache Miss๋ฅผ ์ผ์ผํค๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํ์ํ ์กฐํ ๋ถํ๋ฅผ ๊ฐํ๋ ๋ฌธ์ ์ด๋ค.
- ํด๊ฒฐ์ฑ (Null ๊ฐ ์บ์ฑ): ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ ์ฌ์ค ์์ฒด๋ฅผ ์บ์ฑํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์๋ฅผ ๋ค์ด, ํน์ ํค์ ๋ํด "NULL"์ด๋ผ๋ ํน์ํ ๊ฐ์ ์งง์ TTL๋ก ์บ์ฑํด๋๋ฉด, ์ดํ ๋์ผํ ํค์ ๋ํ ์์ฒญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊น์ง ๋๋ฌํ์ง ์๊ณ ์บ์์์ ์ฐจ๋จ๋๋ค.
5. ์ํคํ ์ฒ๋ณ ์บ์ฑ ์ ๋ต ์ ํ
๋ชจ๋๋ฆฌ์ ์ํคํ ์ฒ์ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ ๊ฐ๊ฐ ๋ค๋ฅธ ํน์ฑ์ ๊ฐ์ง๋ฏ๋ก, ๊ทธ์ ๋ง๋ ์บ์ฑ ์ ๊ทผ๋ฒ์ด ํ์ํ๋ค.
5.1. ๋ชจ๋๋ฆฌ์ ์ํคํ ์ฒ์์์ ์บ์ฑ
๋ชจ๋๋ฆฌ์ ์ํคํ ์ฒ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ด ํ๋์ ํฐ ๋ฐฐํฌ ๋จ์๋ก ๋ฌถ์ฌ ์๋ ๊ตฌ์กฐ์ด๋ค.
- ์ด๊ธฐ ๋ฐ ์๊ท๋ชจ ๋จ๊ณ: ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋จ์ผ ์๋ฒ์์ ์ด์๋๋ ๊ฒฝ์ฐ, ๋ก์ปฌ ์บ์๋ ๋คํธ์ํฌ ์ค๋ฒํค๋ ์์ด ์ต๊ณ ์ ์ฑ๋ฅ์ ์ ๊ณตํ๋ ๊ฐ์ฅ ํจ์จ์ ์ธ ์ ํ์ด๋ค.
- ์ํ ํ์ฅ ๋จ๊ณ: ํธ๋ํฝ ์ฆ๊ฐ๋ก ์๋ฒ๋ฅผ ์ฌ๋ฌ ๋๋ก ํ์ฅ(Scale-out)ํ๊ธฐ ์์ํ๋ฉด, ๋ก์ปฌ ์บ์์ ๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ด ๋จ๊ณ์์๋ ๋ถ์ฐ ์บ์(ex: Redis)๋ฅผ ๋์ ํ์ฌ ์ฌ์ฉ์ ์ธ์ ์ ๋ณด๋ ์ฌ๋ฌ ์ธ์คํด์ค๊ฐ ๊ณต์ ํด์ผ ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ค์์์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ ์ ํ ๊ฒฝ๋ก์ด๋ค.
5.2. ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์์์ ์บ์ฑ
๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ ๊ฐ ๊ธฐ๋ฅ์ด ๋ ๋ฆฝ์ ์ธ ์๋น์ค๋ก ๋ถ๋ฆฌ๋์ด ์๊ณ , ์๋น์ค๋ณ๋ก ์์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฐ์ง๋ฉฐ, API๋ฅผ ํตํด ํต์ ํ๋ ๊ตฌ์กฐ์ด๋ค. ์ด ํ๊ฒฝ์์ ์บ์ฑ์ ์๋น์ค ๊ฐ์ ๊ฒฐํฉ๋์ ์์คํ ์ ์ฒด์ ์์ ์ฑ์ ํฐ ์ํฅ์ ๋ฏธ์น๋ ์๋ ์ ๊ฒ์ด ๋ ์ ์๋ค.
์๋ชป๋ ์บ์ฑ ์ ๋ต, ์๋ฅผ ๋ค์ด ์ฌ๋ฌ ์๋น์ค๊ฐ ํ๋์ ๊ฑฐ๋ํ ๊ณต์ ๋ถ์ฐ ์บ์๋ฅผ ์ง์ ์ฝ๊ณ ์ฐ๋ ๋ฐฉ์์ ์ด ์บ์๋ฅผ ์๋ก์ด ํํ์ '๊ณต์ ๋ฐ์ดํฐ๋ฒ ์ด์ค'๋ก ๋ง๋ค์ด ์๋น์ค ๊ฐ์ ๊ฐํ ๊ฒฐํฉ์ ์ ๋ฐํ ์ ์๋ค. ํ ์๋น์ค์ ์บ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ณ๊ฒฝ์ด ๋ค๋ฅธ ์๋น์ค์ ์ํฅ์ ๋ฏธ์น๊ฑฐ๋, ์ฅ์ ๋ฅผ ์ ํํ๋ ์์ธ์ด ๋ ์ ์๋ค.
๋ฐ๋ผ์ ๋ง์ดํฌ๋ก์๋น์ค ํ๊ฒฝ์์๋ ์๋น์ค์ ๋ ๋ฆฝ์ฑ๊ณผ ๊ฒฝ๊ณ๋ฅผ ๋ช ํํ ํ๋ ์บ์ฑ ํจํด์ ์ ์ฉํ๋ ๊ฒ์ด ์ค์ํ๋ค.
- ์๋น์ค๋ณ ๋ก์ปฌ ์บ์: ๋ค๋ฅธ ์๋น์ค์ ์์กดํ์ง ์๋ ์์ฒด ๋ฐ์ดํฐ ์ค ๋ณ๊ฒฝ ๋น๋๊ฐ ๋งค์ฐ ๋ฎ์ ๋ฐ์ดํฐ(ex: ์ค์ ๊ฐ, ๊ตญ๊ฐ ์ฝ๋ ๋ฑ ๋ฉํ๋ฐ์ดํฐ)๋ฅผ ์บ์ฑํ ๋ ์ ์ฉํ๋ค. ๊ฐ ์๋น์ค ์ธ์คํด์ค ๋ด์ ์บ์๋ฅผ ๋์ด ์ธ๋ถ API ํธ์ถ ์์ด ๊ฐ์ฅ ๋น ๋ฅธ ์๋ต์ ์ ๊ณตํ ์ ์๋ค.
- ๊ณต์ ๋ถ์ฐ ์บ์ (Sidecar Cache): ์๋น์ค๊ฐ ๋ค๋ฅธ ์๋น์ค์ ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ ๋, ํด๋น ์๋น์ค์ API๋ฅผ ํธ์ถํ์ฌ ์ป์ ์๋ต์ ์์ฒด์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ถ์ฐ ์บ์์ ์ ์ฅํ๋ ํจํด์ด๋ค. ์ด๋ ์๋น์ค ๊ฐ์ ๊ฒฝ๊ณ๋ฅผ ๋ช ํํ ํ๊ณ API ๊ณ์ฝ์ ์กด์คํ๊ฒ ํ๋ค. ๋ํ, ํธ์ถ ๋์ ์๋น์ค์ ์ผ์์ ์ธ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์บ์๋ ๋ฐ์ดํฐ๋ก ์๋ต์ ๊ณ์ํ ์ ์์ด, ์ฅ์ ์ ํ๋ฅผ ๋ง๊ณ ์์คํ ์ ํ๋ณตํ๋ ฅ์ฑ(Resilience)์ ๋์ด๋ ๋ฐ ๊ธฐ์ฌํ๋ค.
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ ์ ์ง: ํ ์๋น์ค์์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์์ ๋, ํด๋น ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ๊ณ ์๋ ๋ค๋ฅธ ์๋น์ค๋ค์๊ฒ ๋ณ๊ฒฝ ์ฌ์ค์ ์๋ ค์ฃผ๋ ๋ฉ์ปค๋์ฆ์ด ํ์ํ๋ค. ์ด๋ฅผ ์ํด ๋ฉ์์ง ํ(ex: Kafka, RabbitMQ)๋ฅผ ํ์ฉํ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ถํ์ฌ ์บ์ ๋ฌดํจํ ์ด๋ฒคํธ๋ฅผ ์ ํํ๋ ๋ฐฉ์์ด ์ฌ์ฉ๋ ์ ์๋ค.
5.3. ํ์ด๋ธ๋ฆฌ๋ ์บ์ฑ ์ ๋ต: ๋์ด ์บ์(Near-Cache)
ํ์ด๋ธ๋ฆฌ๋ ์บ์ฑ์ ๋ก์ปฌ ์บ์์ ๋น ๋ฅธ ์๋์ ๋ถ์ฐ ์บ์์ ์ผ๊ด์ฑ ๋ฐ ๋์ฉ๋์ด๋ผ๋ ์ฅ์ ์ ๋ชจ๋ ์ทจํ๊ธฐ ์ํ ํจํด์ด๋ค. ๋์ด ์บ์(Near-Cache)๋ผ ํ๋ค.

- ๋์ ๋ฐฉ์
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฒญ ์ฒ๋ฆฌ ์ ๊ฐ์ฅ ๋จผ์ ๋ก์ปฌ ์บ์๋ฅผ ์กฐํํ๋ค.
- ๋ก์ปฌ ์บ์์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด(๋ก์ปฌ ์บ์ Miss), ๋ถ์ฐ ์บ์๋ฅผ ์กฐํํ๋ค.
- ๋ถ์ฐ ์บ์์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด(๋ถ์ฐ ์บ์ Hit), ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ๋ก์ปฌ ์บ์์ ์ ์ฅํ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐํํ๋ค.
- ๋ถ์ฐ ์บ์์๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด(๋ถ์ฐ ์บ์ Miss), ์๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ฌ ๋ถ์ฐ ์บ์์ ๋ก์ปฌ ์บ์์ ๋ชจ๋ ์ ์ฅํ ํ ๋ฐํํ๋ค.
- ์ฅ์ : ์์ฃผ ์ ๊ทผํ๋ 'ํซ(Hot)' ๋ฐ์ดํฐ๋ ๋ก์ปฌ ์บ์์์ ๋คํธ์ํฌ ์ง์ฐ ์์ด ์ด๊ณ ์์ผ๋ก ์ฒ๋ฆฌ๋๋ค. ๋์์ ๋ถ์ฐ ์บ์๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ๊ณผ ์์์ฑ์ ํ๋ณดํ ์ ์๋ค. ์ด ๊ตฌ์กฐ๋ ์ ์ฒด์ ์ธ ๋คํธ์ํฌ ํธ๋ํฝ๊ณผ ๋ถ์ฐ ์บ์์ ๊ฐํด์ง๋ ๋ถํ๋ฅผ ํฌ๊ฒ ์ค์ฌ์ฃผ๋ฉฐ, ์๋ฒ ์ฌ์์์ผ๋ก ๋ก์ปฌ ์บ์๊ฐ ๋น์์ง๋๋ผ๋ ๋ถ์ฐ ์บ์ ๋๋ถ์ ๋น ๋ฅด๊ฒ ์บ์๋ฅผ ์๋ฐ์ ํ ์ ์๋ค.
- ๊ณผ์ : ๊ฐ์ฅ ํฐ ๊ณผ์ ๋ ๋ก์ปฌ ์บ์ ๊ฐ์ ๋๊ธฐํ์ด๋ค. ๋ถ์ฐ ์บ์์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์์ ๋, ๋ชจ๋ ์๋ฒ ์ธ์คํด์ค์ ๋ก์ปฌ ์บ์์ ์๋ ๊ตฌ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ๋ฌดํจํํ ๊ฒ์ธ๊ฐ์ ๋ฌธ์ ์ด๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Redis์ Pub/Sub ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ๋ฉ์์ง ์์คํ ์ ํ์ฉํ์ฌ ๋ชจ๋ ์ธ์คํด์ค์ ์บ์ ๋ฌดํจํ ๋ฉ์์ง๋ฅผ ์ ํํ๋ '๋ฐฑํ๋ ์ธ(backplane)' ์ฑ๋์ ๊ตฌํํด์ผ ํ๋ค.
6. ์ด๋ค ์บ์๋ฅผ ์ ํํ ๊ฒ์ธ๊ฐ?
6.1. ์ ํ์ ์ํ ํต์ฌ ์ง๋ฌธ
์ฌ๋ฐ๋ฅธ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ธฐ ์ํด ๋ค์ ์ง๋ฌธ๋ค์ ์ค์ค๋ก์๊ฒ ๋์ ธ๋ณด์์ผ ํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฅ ๊ณํ์ ๋ฌด์์ธ๊ฐ? ํ์ฌ ๋จ์ผ ์๋ฒ๋ก ์ด์ ์ค์ด๋ฉฐ, ๊ฐ๊น์ด ๋ฏธ๋์๋ ์ํ ํ์ฅ ๊ณํ์ด ์๋๊ฐ? ์๋๋ฉด ์ด๊ธฐ๋ถํฐ ๋ถ์ฐ ํ๊ฒฝ์ ์ผ๋์ ๋๊ณ ์๋๊ฐ?
- ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ ์๊ตฌ ์์ค์ ์ด๋ ์ ๋์ธ๊ฐ? ๊ธ์ต ์ ๋ณด์ฒ๋ผ 1์ด์ ๋ถ์ผ์น๋ ํ์ฉํ ์ ์๋ ๊ฐ๋ ฅํ ์ผ๊ด์ฑ์ด ํ์ํ๊ฐ? ์๋๋ฉด ์์ ๋ฏธ๋์ด ํผ๋์ฒ๋ผ ๋ช ์ด ์ ๋์ ์ง์ฐ์ด ํ์ฉ๋๋ ์ต์ข ์ ์ผ๊ด์ฑ์ผ๋ก ์ถฉ๋ถํ๊ฐ?
- ์ฃผ์ ์ํฌ๋ก๋๋ ์ฝ๊ธฐ ์ค์ฌ์ธ๊ฐ, ์ฐ๊ธฐ ์ค์ฌ์ธ๊ฐ? ๋ฐ์ดํฐ ์กฐํ(Read)๊ฐ ์๋์ ์ผ๋ก ๋ง์๊ฐ, ์๋๋ฉด ๋ฐ์ดํฐ ๋ณ๊ฒฝ(Write)์ด ๋น๋ฒํ๊ฒ ์ผ์ด๋๋๊ฐ?
- ๋ฐ์ดํฐ๊ฐ ์ผ๋ง๋ ์์ฃผ ๋ณ๊ฒฝ๋๋๊ฐ? ํ๋ฒ ์บ์ฑ๋๋ฉด ๊ฑฐ์ ๋ฐ๋์ง ์๋ ๋ฐ์ดํฐ์ธ๊ฐ, ์๋๋ฉด ์์๋ก ๊ฐฑ์ ๋๋ ๋์ ์ธ ๋ฐ์ดํฐ์ธ๊ฐ?
- ์ด์ ๋ฐ ๊ด๋ฆฌ ์ญ๋๊ณผ ์์ฐ์ ์ถฉ๋ถํ๊ฐ? ๋ณ๋์ ์บ์ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๊ณ 24/7 ์ ์ง๋ณด์ํ ์ ์๋ ์ธ๋ ฅ๊ณผ ๋น์ฉ์ ๊ฐ๋นํ ์ ์๋๊ฐ?
6.2. ์์ฌ๊ฒฐ์ ๋งคํธ๋ฆญ์ค
์ ์ง๋ฌธ๋ค์ ๋ฐํ์ผ๋ก ๊ฐ ์บ์ฑ ์ ๋ต์ ํน์ง์ ์์ฝํ ์๋์ ์์ฌ๊ฒฐ์ ๋งคํธ๋ฆญ์ค๋ฅผ ํตํด ํ๋ก์ ํธ ์ํฉ์ ๊ฐ์ฅ ์ ํฉํ ์ ๋ต์ ๊ณ ๋ฏผํด ๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
| ์์ฌ๊ฒฐ์ ์์ | ๋ก์ปฌ ์บ์ (Local Cache) | ๋ถ์ฐ ์บ์ (Distributed Cache) | ํ์ด๋ธ๋ฆฌ๋ ์บ์ (Hybrid Cache) |
| ์ ํ๋ฆฌ์ผ์ด์ ๊ท๋ชจ | ๋จ์ผ ์ธ์คํด์ค ํ๊ฒฝ์ ์ต์ | ๋ค์ค ์ธ์คํด์ค, ๋ถ์ฐ/๋ง์ดํฌ๋ก์๋น์ค ํ๊ฒฝ | ๋ค์ค ์ธ์คํด์ค, ํนํ ์ฑ๋ฅ์ ๋งค์ฐ ๋ฏผ๊ฐํ ๋๊ท๋ชจ ํ๊ฒฝ |
| ๋ฐ์ดํฐ ์ผ๊ด์ฑ | ๋ฎ์ (์ธ์คํด์ค ๊ฐ ๋ถ์ผ์น ๋ฐ์) | ๋์ (์ค์ ์ ์ฅ์๋ก ์ผ๊ด์ฑ ๋ณด์ฅ) | ๋์ (๋ถ์ฐ ์บ์๋ฅผ ํตํด ์ผ๊ด์ฑ ๋ณด์ฅ, ๋ก์ปฌ ์บ์ ๋๊ธฐํ ํ์) |
| ์ฑ๋ฅ (์ง์ฐ์๊ฐ) | ๋งค์ฐ ๋ฎ์ (๋คํธ์ํฌ ์ค๋ฒํค๋ ์์) | ๋ฎ์ (๋คํธ์ํฌ ์ง์ฐ ๋ฐ์) | ๋งค์ฐ ๋ฎ์ (๋ก์ปฌ ์บ์ Hit) / ๋ฎ์ (๋ถ์ ์บ์ Hit) |
| ๋ฐ์ดํฐ ํ๋ฐ์ฑ | ๋์ (์ ํ๋ฆฌ์ผ์ด์ ์ฌ์์ ์ ์์ค) | ๋ฎ์ (์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ ๋ฆฝ์ , ์์์ฑ ์ต์ ๊ฐ๋ฅ) | ๋ฎ์ (๋ถ์ฐ ์บ์ ๋ฐ์ดํฐ๋ ๋ณด์กด๋จ) |
| ์ด์ ๋ณต์ก๋ | ๋งค์ฐ ๋ฎ์ (๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ๋ก ๊ตฌํ) | ๋์ (๋ณ๋ ์ธํ๋ผ ๊ตฌ์ถ ๋ฐ ๊ด๋ฆฌ ํ์) | ๋งค์ฐ ๋์ (๋ก์ปฌ/๋ถ์ฐ ์บ์ ๊ด๋ฆฌ ๋ฐ ๋๊ธฐํ ๊ตฌํ ํ์) |
| ๋น์ฉ | ๋งค์ฐ ๋ฎ์ (์ถ๊ฐ ๋น์ฉ ์์) | ๋์ (๋ณ๋ ์๋ฒ/์๋น์ค ๋น์ฉ ๋ฐ์) | ๋งค์ฐ ๋์ (๋ถ์ฐ ์บ์ + ์ถ๊ฐ ๊ฐ๋ฐ/์ด์ ๋ฆฌ์์ค) |
์ฐธ๊ณ ์๋ฃ:
In-Process Cache vs. Centralized Cache in Java Applications
Caching is a crucial technique for enhancing the performance of Java applications by storing frequently accessed data in a faster storage…
medium.com
https://blog.bytebytego.com/p/a-crash-course-in-caching-part-2
A Crash Course in Caching - Part 2
This is part 2 of the Crash Course in Caching series. Distributed cache A distributed cache stores frequently accessed data in memory across multiple nodes. The cached data is partitioned across many nodes, with each node only storing a portion of the cach
blog.bytebytego.com
https://toss.tech/article/cache-traffic-tip
์บ์ ๋ฌธ์ ํด๊ฒฐ ๊ฐ์ด๋ - DB ๊ณผ๋ถํ ๋ฐฉ์ง ์ค์ ํ
๋์ฉ๋ ํธ๋ํฝ ํ๊ฒฝ์์ ์บ์๋ฅผ ์ฌ์ฉํ ๋ ์ฃผ์ํด์ผํ ์ํ ์ํฉ๊ณผ ์๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค.
toss.tech
Microservices Caching: Strategies, Topologies, and Best Practices
This article offers a thorough look at caching in microservices from the fundamental to more advanced...
dev.to
Hybrid Cache Strategy in Spring Boot: A Guide to Redisson and Caffeine Integration
Introduction: The Need for Hybrid Caching In modern application development, performance...
dev.to
https://www.ibm.com/docs/ko/wxs/8.6.1?topic=topology-local-in-memory-cache
๋ก์ปฌ ์ธ๋ฉ๋ชจ๋ฆฌ ์บ์
๊ฐ์ฅ ๊ฐ๋จํ ๊ฒฝ์ฐ WebSphere® eXtreme Scale ์ ๋ก์ปฌ (๋น๋ถ์ฐ) ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ๊ทธ๋ฆฌ๋ ์บ์๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ก์ปฌ ์ฌ๋ก์์ ํนํ, ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์์ ๋ฐ์ดํฐ๋ฅผ ์ก์ธ์คํ๊ณ ์์ ํด์ผ ํ๋ ๋์
www.ibm.com