์บ์ฑ ์ ๋ต
์บ์ฑ ์ ๋ต¶
๊ฐ์¶
์ด ๋ฌธ์์์๋ ์บ์ฑ์ ํต์ฌ ์ ๋ต๊ณผ ํจํด์ ๋ค๋ฃน๋๋ค. Cache-Aside, Read-Through, Write-Through, Write-Behind ํจํด์ ์ฐจ์ด๋ฅผ ์ดํดํ๊ณ , ์บ์ ๋ฌดํจํ, TTL ์ค์ , ๊ทธ๋ฆฌ๊ณ ์บ์ ์นจํฌ/๋์ฌํ/ํซํค ๋ฌธ์ ์ ํด๊ฒฐ์ฑ ์ ํ์ตํฉ๋๋ค.
๋์ด๋: โญโญโญ ์์ ํ์ต ์๊ฐ: 2-3์๊ฐ ์ ์ ์ง์: 05_Reverse_Proxy_API_Gateway.md
๋ชฉ์ฐจ¶
- ์บ์ฑ์ด๋?
- ์บ์ฑ ์ ๋ต ํจํด
- ์บ์ ๋ฌดํจํ
- ์บ์ ๋ฌธ์ ์ ํด๊ฒฐ์ฑ
- CDN ์บ์ฑ
- ์ฐ์ต ๋ฌธ์
- ๋ค์ ๋จ๊ณ
- ์ฐธ๊ณ ์๋ฃ
1. ์บ์ฑ์ด๋?¶
1.1 ์บ์ฑ์ ์ ์¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ์บ์ฑ์ด๋? โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ "์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅธ ์ ์ฅ์์ ์์ ์ ์ฅ" โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ ์บ์ ์์ด: โ โ
โ โ โ โ
โ โ Client โโโถ Server โโโถ Database โ โ
โ โ โโโโโโโโโโโโโโโ (๋งค๋ฒ DB ์กฐํ) โ โ
โ โ ~100ms โ โ
โ โ โ โ
โ โ ์บ์ ์ฌ์ฉ: โ โ
โ โ โ โ
โ โ Client โโโถ Server โโโถ Cache (Hit!) โโโถ ์๋ต โ โ
โ โ โโโโโโโโโโโโโ ~1ms โ โ
โ โ โ โ
โ โ Cache Miss ์: โ โ
โ โ Server โโโถ Database โโโถ Cache ์ ์ฅ โโโถ ์๋ต โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ 100๋ฐฐ ์ด์ ๋น ๋ฅธ ์๋ต ๊ฐ๋ฅ! โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
1.2 ์บ์ ๊ณ์ธต¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ์บ์ ๊ณ์ธต โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ Client โ
โ โ โ
โ โโโ ๋ธ๋ผ์ฐ์ ์บ์ (๊ฐ์ฅ ๋น ๋ฆ) โ
โ โ L1: ๋ฉ๋ชจ๋ฆฌ ์บ์ โ
โ โ L2: ๋์คํฌ ์บ์ โ
โ โ โ
โ โโโ CDN ์บ์ (Edge) โ
โ โ ์ง๋ฆฌ์ ์ผ๋ก ๊ฐ๊น์ด ์๋ฒ โ
โ โ โ
โ โโโ ๋ฆฌ๋ฒ์ค ํ๋ก์ ์บ์ โ
โ โ Nginx, Varnish โ
โ โ โ
โ โโโ ์ ํ๋ฆฌ์ผ์ด์
์บ์ โ
โ โ ๋ก์ปฌ ์บ์ (in-memory) โ
โ โ ๋ถ์ฐ ์บ์ (Redis, Memcached) โ
โ โ โ
โ โโโ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์บ์ โ
โ Query Cache, Buffer Pool โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ๋น ๋ฆ ๋๋ฆผ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโถ โ โ
โ โ ๋ธ๋ผ์ฐ์ โ CDN โ ํ๋ก์ โ App Cache โ DB โ โ
โ โ โ โ
โ โ ์์ ํผ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโถ โ โ
โ โ (์ ์ฅ ์ฉ๋) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
1.3 ์บ์ ํํธ์จ¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ์บ์ ํํธ์จ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ Cache Hit Rate = (์บ์ ์ ์ค ์) / (์ ์ฒด ์์ฒญ ์) ร 100% โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ ์์: 1000 ์์ฒญ, 950 Hit, 50 Miss โ โ
โ โ Hit Rate = 950 / 1000 = 95% โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ํํธ์จ์ ๋ฐ๋ฅธ ํจ๊ณผ: โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ Hit Rate โ DB ๋ถํ ๊ฐ์ โ ํ๊ท ์๋ต ์๊ฐ โ โ
โ โ โโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโ โ โ
โ โ 50% โ 50% โ 50ms (์์) โ โ
โ โ 90% โ 90% โ 10ms โ โ
โ โ 95% โ 95% โ 5ms โ โ
โ โ 99% โ 99% โ 2ms โ โ
โ โ โ โ
โ โ ๋์ ํํธ์จ = ๋ ๋น ๋ฅธ ์๋ต + DB ๋ณดํธ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ํํธ์จ ํฅ์ ์ ๋ต: โ
โ โข ์ ์ ํ TTL ์ค์ โ
โ โข ์บ์ ํฌ๊ธฐ ์ต์ ํ โ
โ โข ํซ ๋ฐ์ดํฐ ์ฌ์ ๋ก๋ฉ โ
โ โข ์บ์ ํค ์ค๊ณ ์ต์ ํ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
2. ์บ์ฑ ์ ๋ต ํจํด¶
2.1 Cache-Aside (Lazy Loading)¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Cache-Aside ํจํด โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ "์ ํ๋ฆฌ์ผ์ด์
์ด ์บ์๋ฅผ ์ง์ ๊ด๋ฆฌ" โ
โ โ
โ ์ฝ๊ธฐ (Read): โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ Application โ โ
โ โ โ โ โ
โ โ โ 1. ์บ์์์ ์กฐํ โ โ
โ โ โผ โ โ
โ โ [Cache] โโHit?โโโถ Yes โโโถ ๋ฐ์ดํฐ ๋ฐํ โ โ
โ โ โ โ โ
โ โ No (Miss) โ โ
โ โ โ โ โ
โ โ โ 2. DB์์ ์กฐํ โ โ
โ โ โผ โ โ
โ โ [Database] โโโถ ๋ฐ์ดํฐ ๋ฐํ โ โ
โ โ โ โ โ
โ โ โ 3. ์บ์์ ์ ์ฅ โ โ
โ โ โผ โ โ
โ โ [Cache] (์
๋ฐ์ดํธ) โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ์ฐ๊ธฐ (Write): โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ Application โ โ
โ โ โ โ โ
โ โ โ 1. DB์ ์ฐ๊ธฐ โ โ
โ โ โผ โ โ
โ โ [Database] (์
๋ฐ์ดํธ) โ โ
โ โ โ โ โ
โ โ โ 2. ์บ์ ๋ฌดํจํ (์ญ์ ) โ โ
โ โ โผ โ โ
โ โ [Cache] (์ญ์ ) โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ์ฝ๋ ์์: โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ def get_user(user_id): โ โ
โ โ # 1. ์บ์ ํ์ธ โ โ
โ โ user = cache.get(f"user:{user_id}") โ โ
โ โ if user: โ โ
โ โ return user # Cache Hit โ โ
โ โ โ โ
โ โ # 2. DB ์กฐํ (Cache Miss) โ โ
โ โ user = db.query(f"SELECT * FROM users WHERE id={id}") โ โ
โ โ โ โ
โ โ # 3. ์บ์ ์ ์ฅ โ โ
โ โ cache.set(f"user:{user_id}", user, ttl=3600) โ โ
โ โ โ โ
โ โ return user โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ์ฅ์ : โ
โ โข ํ์ํ ๋ฐ์ดํฐ๋ง ์บ์ฑ (๋ฉ๋ชจ๋ฆฌ ํจ์จ) โ
โ โข ์บ์ ์ฅ์ ์์๋ DB๋ก ๋์ โ
โ โ
โ ๋จ์ : โ
โ โข ์ฒซ ์์ฒญ์ ํญ์ ๋๋ฆผ (Cache Miss) โ
โ โข ์บ์-DB ๋ถ์ผ์น ๊ฐ๋ฅ์ฑ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
2.2 Read-Through¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Read-Through ํจํด โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ "์บ์๊ฐ DB ์กฐํ๋ฅผ ๋ํ" โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ Application โ โ
โ โ โ โ โ
โ โ โ 1. ์บ์์ ์์ฒญ (ํญ์) โ โ
โ โ โผ โ โ
โ โ [Cache] โโHit?โโโถ Yes โโโถ ๋ฐ์ดํฐ ๋ฐํ โ โ
โ โ โ โ โ
โ โ No (Miss) โ โ
โ โ โ โ โ
โ โ โ 2. ์บ์๊ฐ DB ์กฐํ (์๋) โ โ
โ โ โผ โ โ
โ โ [Database] โ โ
โ โ โ โ โ
โ โ โ 3. ์บ์์ ์ ์ฅ + ๋ฐํ โ โ
โ โ โผ โ โ
โ โ Application โ โ
โ โ โ โ
โ โ ์ ํ๋ฆฌ์ผ์ด์
์ ์บ์๋ง ๋ฐ๋ผ๋ด! โ โ
โ โ DB ์กฐํ ๋ก์ง์ด ์บ์์ ๋ด์ฅ๋จ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ Cache-Aside vs Read-Through: โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Cache-Aside: ์ฑ์ด ์บ์์ DB ๋ชจ๋ ๊ด๋ฆฌ โ โ
โ โ Read-Through: ์ฑ์ ์บ์๋ง ์ฌ์ฉ, ์บ์๊ฐ DB ๊ด๋ฆฌ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ์ฅ์ : โ
โ โข ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋ ๋จ์ํ โ
โ โข ์บ์ ๋ก์ง ์ค์ํ โ
โ โ
โ ๋จ์ : โ
โ โข ์บ์ ์์คํ
์ ๋ก๋ ๊ตฌํ ํ์ โ
โ โข ์ ์ฐ์ฑ ๊ฐ์ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
2.3 Write-Through¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Write-Through ํจํด โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ "์ฐ๊ธฐ ์ ์บ์์ DB ๋์ ์
๋ฐ์ดํธ (๋๊ธฐ)" โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ Application โ โ
โ โ โ โ โ
โ โ โ 1. ์บ์์ ์ฐ๊ธฐ โ โ
โ โ โผ โ โ
โ โ [Cache] โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ โ
โ โ โ 2. ์บ์๊ฐ DB์ ์ฐ๊ธฐ (๋๊ธฐ) โ โ โ
โ โ โผ โ ๋์์ โ โ
โ โ [Database] โ ์๋ฃ โ โ
โ โ โ โ โ โ
โ โ โ 3. ์๋ฃ ํ ์๋ต โ โ โ
โ โ โผ โ โ โ
โ โ Application โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ํน์ง: โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ โข ์บ์์ DB๊ฐ ํญ์ ๋๊ธฐํ (๊ฐํ ์ผ๊ด์ฑ) โ โ
โ โ โข Read-Through์ ํจ๊ป ์ฌ์ฉํ๋ฉด ํจ๊ณผ์ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ์ฅ์ : โ
โ โข ๋ฐ์ดํฐ ์ผ๊ด์ฑ ๋ณด์ฅ โ
โ โข ๋ฐ์ดํฐ ์์ค ์์ โ
โ โ
โ ๋จ์ : โ
โ โข ์ฐ๊ธฐ ์ง์ฐ (๋ ๊ณณ์ ์ฐ๊ธฐ) โ
โ โข ๋ถํ์ํ ๋ฐ์ดํฐ๋ ์บ์ฑ๋ ์ ์์ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
2.4 Write-Behind (Write-Back)¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Write-Behind (Write-Back) ํจํด โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ "์บ์์ ๋จผ์ ์ฐ๊ณ , DB์๋ ๋์ค์ ์ฐ๊ธฐ (๋น๋๊ธฐ)" โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ Application โ โ
โ โ โ โ โ
โ โ โ 1. ์บ์์ ์ฐ๊ธฐ โ โ
โ โ โผ โ โ
โ โ [Cache] โโโโโโโโโโโโโโโถ ์ฆ์ ์๋ต โ โ
โ โ โ โ โ
โ โ โ 2. ๋์ค์ DB์ ์ฐ๊ธฐ (๋น๋๊ธฐ) โ โ
โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ Write Queue โ โ โ
โ โ โ โ [data1, data2, data3, ...] โ โ โ
โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ โ
โ โ โ โ ๋ฐฐ์น ์ฒ๋ฆฌ โ โ
โ โ โ โผ โ โ
โ โ โโโโโโโโโโโถ [Database] โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ์๊ฐ๋๋ณ ๋์: โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ T=0: Write 1 โ Cache (์ฆ์ ์๋ฃ) โ โ
โ โ T=1: Write 2 โ Cache (์ฆ์ ์๋ฃ) โ โ
โ โ T=2: Write 3 โ Cache (์ฆ์ ์๋ฃ) โ โ
โ โ ... โ โ
โ โ T=10: ๋ฐฐ์น๋ก DB์ Write 1,2,3 ํ ๋ฒ์ ์ ์ฅ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ์ฅ์ : โ
โ โข ์ฐ๊ธฐ ์ฑ๋ฅ ์ฐ์ (์บ์์๋ง ์ฐ๊ณ ์๋ต) โ
โ โข DB ๋ถํ ๊ฐ์ (๋ฐฐ์น ์ฒ๋ฆฌ) โ
โ โข ์ฐ๊ธฐ ๋ณํฉ ๊ฐ๋ฅ (๊ฐ์ ํค ์ฌ๋ฌ ๋ฒ ์ฐ๊ธฐ โ ๋ง์ง๋ง๋ง ์ ์ฅ) โ
โ โ
โ ๋จ์ : โ
โ โข ๋ฐ์ดํฐ ์์ค ์ํ (์บ์ ์ฅ์ ์) โ
โ โข ๊ตฌํ ๋ณต์ก โ
โ โข ์ผ๊ด์ฑ ๋ฌธ์ (DB์ ์์ง ์๋ ๋ฐ์ดํฐ) โ
โ โ
โ ์ฌ์ฉ ์ฌ๋ก: โ
โ โข ๋ก๊ทธ ์์ง โ
โ โข ์กฐํ์/์ข์์ ์นด์ดํฐ โ
โ โข ์ค์๊ฐ์ฑ๋ณด๋ค ์ฑ๋ฅ์ด ์ค์ํ ๊ฒฝ์ฐ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
2.5 ํจํด ๋น๊ต ์์ฝ¶
| ํจํด | ์ฝ๊ธฐ | ์ฐ๊ธฐ | ์ผ๊ด์ฑ | ์ฑ๋ฅ | ๋ณต์ก๋ |
|---|---|---|---|---|---|
| Cache-Aside | ์ฑ์ด ๊ด๋ฆฌ | DB ์ง์ , ์บ์ ๋ฌดํจํ | ์ฝํจ | ์ข์ | ๋ฎ์ |
| Read-Through | ์บ์๊ฐ ๊ด๋ฆฌ | - | - | ์ข์ | ์ค๊ฐ |
| Write-Through | - | ์บ์โDB ๋๊ธฐ | ๊ฐํจ | ๋ณดํต | ์ค๊ฐ |
| Write-Behind | - | ์บ์ ๋จผ์ , DB ๋์ค | ์ฝํจ | ๋งค์ฐ ์ข์ | ๋์ |
3. ์บ์ ๋ฌดํจํ¶
3.1 ๋ฌดํจํ ์ ๋ต¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ์บ์ ๋ฌดํจํ ์ ๋ต โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ "์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์ธ์ , ์ด๋ป๊ฒ ์ญ์ /๊ฐฑ์ ํ ๊ฒ์ธ๊ฐ?" โ
โ โ
โ 1. TTL (Time To Live) ๊ธฐ๋ฐ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ cache.set("user:123", data, ttl=3600) # 1์๊ฐ ํ ๋ง๋ฃ โ โ
โ โ โ โ
โ โ T=0: [user:123] ์ ์ฅ โ โ
โ โ T=3600: [user:123] ์๋ ์ญ์ โ โ
โ โ โ โ
โ โ ์ฅ์ : ๋จ์, ์๋ โ โ
โ โ ๋จ์ : TTL ๋์ ์ค๋๋ ๋ฐ์ดํฐ ์๋น ๊ฐ๋ฅ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ 2. ๋ช
์์ ์ญ์ (Explicit Invalidation) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ # ๋ฐ์ดํฐ ์์ ์ โ โ
โ โ db.update_user(user_id, new_data) โ โ
โ โ cache.delete(f"user:{user_id}") # ์บ์ ์ญ์ โ โ
โ โ โ โ
โ โ ์ฅ์ : ์ฆ์ ์ผ๊ด์ฑ ํ๋ณต โ โ
โ โ ๋จ์ : ์ญ์ ๋ก์ง ํ์, ์ค์ ๊ฐ๋ฅ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ 3. ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋ฌดํจํ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ DB ๋ณ๊ฒฝ โโโถ ์ด๋ฒคํธ ๋ฐํ โโโถ ์บ์ ๋ฌดํจํ โ โ
โ โ โ โ
โ โ [DB] โโCDCโโโถ [Kafka] โโโถ [Cache Invalidator] โ โ
โ โ โ โ
โ โ ์ฅ์ : ๋์จํ ๊ฒฐํฉ, ํ์ฅ์ฑ โ โ
โ โ ๋จ์ : ๋ณต์ก๋ ์ฆ๊ฐ, ์ง์ฐ ๊ฐ๋ฅ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
3.2 TTL ์ค์ ๊ฐ์ด๋¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ TTL ์ค์ ๊ฐ์ด๋ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ๋ฐ์ดํฐ ํน์ฑ๋ณ TTL ๊ถ์ฅ: โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ ๊ฑฐ์ ๋ณํ์ง ์๋ ๋ฐ์ดํฐ: โ โ
โ โ โข ์ค์ ๊ฐ, ๋ฉํ๋ฐ์ดํฐ: 24์๊ฐ ~ 7์ผ โ โ
โ โ โข ๊ตญ๊ฐ/์ง์ญ ์ ๋ณด: 7์ผ+ โ โ
โ โ โ โ
โ โ ์์ฃผ ๋ณํ์ง ์๋ ๋ฐ์ดํฐ: โ โ
โ โ โข ์ฌ์ฉ์ ํ๋กํ: 1์๊ฐ ~ 24์๊ฐ โ โ
โ โ โข ์ํ ์ ๋ณด: 1์๊ฐ ~ 6์๊ฐ โ โ
โ โ โ โ
โ โ ์์ฃผ ๋ณํ๋ ๋ฐ์ดํฐ: โ โ
โ โ โข ์ฌ๊ณ ์๋: 1๋ถ ~ 5๋ถ โ โ
โ โ โข ์ค์๊ฐ ํต๊ณ: 30์ด ~ 1๋ถ โ โ
โ โ โ โ
โ โ ์ค์๊ฐ ๋ฐ์ดํฐ: โ โ
โ โ โข ์บ์ฑํ์ง ์๊ฑฐ๋ ๋งค์ฐ ์งง์ TTL (์ด ๋จ์) โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ TTL ๊ฒฐ์ ๊ณต์: โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ TTL = f(๋ณ๊ฒฝ ๋น๋, ์ผ๊ด์ฑ ์๊ตฌ, ํธ๋ํฝ ํจํด) โ โ
โ โ โ โ
โ โ โข ๋ณ๊ฒฝ ๋น๋ ๋ฎ์ โ TTL ๊ธธ๊ฒ โ โ
โ โ โข ์ผ๊ด์ฑ ์ค์ โ TTL ์งง๊ฒ ๋๋ ๋ช
์์ ๋ฌดํจํ โ โ
โ โ โข ํธ๋ํฝ ๋์ โ TTL ๊ธธ๊ฒ (ํํธ์จ ์ค์) โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ TTL Jitter (์งํฐ): โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ ๋ฌธ์ : ๊ฐ์ TTL โ ๋์ ๋ง๋ฃ โ ์บ์ ์คํฌํผ๋ โ โ
โ โ โ โ
โ โ ํด๊ฒฐ: TTL์ ๋๋ค ๊ฐ ์ถ๊ฐ โ โ
โ โ โ โ
โ โ base_ttl = 3600 # 1์๊ฐ โ โ
โ โ jitter = random(-300, 300) # ยฑ5๋ถ โ โ
โ โ ttl = base_ttl + jitter # 55๋ถ ~ 65๋ถ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
4. ์บ์ ๋ฌธ์ ์ ํด๊ฒฐ์ฑ ¶
4.1 ์บ์ ์นจํฌ (Cache Penetration)¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ์บ์ ์นจํฌ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ "์กด์ฌํ์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ์์ฒญ โ DB ๊ณผ๋ถํ" โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ ๊ณต๊ฒฉ์: GET /user?id=-1 (์กด์ฌํ์ง ์๋ ID) โ โ
โ โ โ โ
โ โ ๋งค๋ฒ: โ โ
โ โ 1. ์บ์ ํ์ธ โ Miss โ โ
โ โ 2. DB ์กฐํ โ ๊ฒฐ๊ณผ ์์ โ โ
โ โ 3. ์บ์ ์ ์ฅ ์ ํจ (์์ผ๋๊น) โ โ
โ โ 4. ๋ค์ ์์ฒญ๋ ๊ฐ์ ๊ณผ์ ๋ฐ๋ณต! โ โ
โ โ โ โ
โ โ Request โโโถ [Cache] โโMissโโโถ [DB] โโโถ Empty โ โ
โ โ Request โโโถ [Cache] โโMissโโโถ [DB] โโโถ Empty (๋ฐ๋ณต) โ โ
โ โ Request โโโถ [Cache] โโMissโโโถ [DB] โโโถ Empty โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ํด๊ฒฐ์ฑ
1: Null ๊ฐ ์บ์ฑ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ data = cache.get(key) โ โ
โ โ if data is None: โ โ
โ โ data = db.query(key) โ โ
โ โ if data is None: โ โ
โ โ cache.set(key, "NULL", ttl=60) # ์งง์ TTL โ โ
โ โ else: โ โ
โ โ cache.set(key, data, ttl=3600) โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ํด๊ฒฐ์ฑ
2: Bloom Filter โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ [Bloom Filter] โโ"key ์กด์ฌํ ์ ์์?" โ โ
โ โ โ โ โ
โ โ โโโ ํ์คํ ์์ โ ๋ฐ๋ก ๋ฐํ (DB ์กฐํ ์ ํจ) โ โ
โ โ โ โ โ
โ โ โโโ ์์ ์ ์์ โ ์บ์/DB ์กฐํ โ โ
โ โ โ โ
โ โ Bloom Filter: ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ์ธ ์กด์ฌ ํ์ธ ์๋ฃ๊ตฌ์กฐ โ โ
โ โ False Positive ๊ฐ๋ฅ, False Negative ๋ถ๊ฐ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
4.2 ์บ์ ๋์ฌํ (Cache Avalanche)¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ์บ์ ๋์ฌํ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ "๋๋์ ์บ์๊ฐ ๋์์ ๋ง๋ฃ โ DB ํญ์ฃผ" โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ T=0: ์บ์ ์๋ฐ (1000๊ฐ ํญ๋ชฉ, TTL=3600) โ โ
โ โ โ โ
โ โ T=3600: 1000๊ฐ ๋์ ๋ง๋ฃ! โ โ
โ โ โโโถ 1000๊ฐ ๋์ DB ์กฐํ โ โ
โ โ โโโถ DB ๊ณผ๋ถํ / ์ฅ์ โ โ
โ โ โ โ
โ โ [Cache] โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ All Expired! โ โ โ
โ โ โโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ
โ โ โโโโโโโโโโดโโโโโโโโโ โ โ
โ โ โ DB ๋์ ์์ฒญ โ โ โ
โ โ โ 1000๊ฐ! โ โ โ
โ โ โโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ
โ โ โผ โ โ
โ โ [DB] ๐ฅ ๊ณผ๋ถํ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ํด๊ฒฐ์ฑ
1: TTL ๋ถ์ฐ (Jitter) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ ttl = base_ttl + random(0, 600) # 0~10๋ถ ๋๋ค ์ถ๊ฐ โ โ
โ โ โ โ
โ โ โ ๋ง๋ฃ ์์ ์ด ๋ถ์ฐ๋จ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ํด๊ฒฐ์ฑ
2: ์บ์ ์๋ฐ (Pre-loading) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ โข ์๋ฒ ์์ ์ ํซ ๋ฐ์ดํฐ ๋ฏธ๋ฆฌ ๋ก๋ฉ โ โ
โ โ โข ๋ง๋ฃ ์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๊ฐฑ์ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ํด๊ฒฐ์ฑ
3: ๋ค์ค ์บ์ ๋ ์ด์ด โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ [L1 Cache] โโMissโโโถ [L2 Cache] โโMissโโโถ [DB] โ โ
โ โ (๋ก์ปฌ) (๋ถ์ฐ) โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ํด๊ฒฐ์ฑ
4: ๋ฎคํ
์ค/๋ฝ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ ์บ์ Miss ์ ํ๋์ ์์ฒญ๋ง DB ์กฐํ, ๋๋จธ์ง ๋๊ธฐ โ โ
โ โ โ โ
โ โ def get_with_lock(key): โ โ
โ โ data = cache.get(key) โ โ
โ โ if data: โ โ
โ โ return data โ โ
โ โ โ โ
โ โ if cache.setnx(f"lock:{key}", 1, ttl=10): โ โ
โ โ # ๋ฝ ํ๋ ์ฑ๊ณต โ DB ์กฐํ โ โ
โ โ data = db.query(key) โ โ
โ โ cache.set(key, data) โ โ
โ โ cache.delete(f"lock:{key}") โ โ
โ โ else: โ โ
โ โ # ๋ฝ ํ๋ ์คํจ โ ์ ์ ๋๊ธฐ ํ ์ฌ์๋ โ โ
โ โ sleep(0.1) โ โ
โ โ return cache.get(key) โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
4.3 ํซํค ๋ฌธ์ (Hot Key)¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ํซํค ๋ฌธ์ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ "ํน์ ํค์ ํธ๋ํฝ ์ง์ค โ ํด๋น ์บ์ ๋
ธ๋ ๊ณผ๋ถํ" โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ ์: ์ธ๊ธฐ ์ฐ์์ธ ๊ฒ์๊ธ, ํ๋์ ์ธ์ผ ์ํ โ โ
โ โ โ โ
โ โ product:12345 (ํซ ์ํ) โ โ
โ โ โ โ โ
โ โ โโโโโโโโโโผโโโโโโโโโ โ โ
โ โ โ โ โ โ โ
โ โ โผ โผ โผ โ โ
โ โ [์์ฒญ] [์์ฒญ] [์์ฒญ] ร10000 โ โ
โ โ โ โ โ
โ โ โผ โ โ
โ โ [Redis Node 1] ๐ฅ ๊ณผ๋ถํ โ โ
โ โ โ โ
โ โ ๋ค๋ฅธ ๋
ธ๋๋ค์ ํ๊ฐํ๋ฐ ํ ๋
ธ๋๋ง ๊ณผ๋ถํ! โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ํด๊ฒฐ์ฑ
1: ๋ก์ปฌ ์บ์ ์ถ๊ฐ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ [App Server 1] โโ[Local Cache] โ โ
โ โ [App Server 2] โโ[Local Cache] โ โ
โ โ [App Server 3] โโ[Local Cache] โ โ
โ โ โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ
โ โ โผ โ โ
โ โ [Redis Cluster] โ โ
โ โ โ โ
โ โ ๋ก์ปฌ ์บ์๋ก ํซํค ๋ถ์ฐ! โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ํด๊ฒฐ์ฑ
2: ํค ๋ณต์ (Key Replication) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ ์๋: product:12345 โ โ
โ โ โ โ
โ โ ๋ณต์ : product:12345:0 โ โ
โ โ product:12345:1 โ โ
โ โ product:12345:2 โ โ
โ โ ... โ โ
โ โ product:12345:N โ โ
โ โ โ โ
โ โ ์กฐํ ์: product:12345:{random(0, N)} โ โ
โ โ โ ์ฌ๋ฌ ๋
ธ๋์ ๋ถ์ฐ! โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ํด๊ฒฐ์ฑ
3: ์ฝ๊ธฐ ๋ณต์ ๋ณธ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ [Master] โโ๋ณต์ โโโถ [Replica 1] โ โ
โ โ โโโถ [Replica 2] โ โ
โ โ โโโถ [Replica 3] โ โ
โ โ โ โ
โ โ ์ฝ๊ธฐ ์์ฒญ์ ๋ณต์ ๋ณธ๋ค์ ๋ถ์ฐ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
4.4 ๋ฌธ์ ์์ฝ¶
| ๋ฌธ์ | ์์ธ | ์ํฅ | ํด๊ฒฐ์ฑ |
|---|---|---|---|
| ์บ์ ์นจํฌ | ์๋ ๋ฐ์ดํฐ ์กฐํ | DB ๊ณผ๋ถํ | Null ์บ์ฑ, Bloom Filter |
| ์บ์ ๋์ฌํ | ๋์ ๋ง๋ฃ | DB ํญ์ฃผ | TTL Jitter, ๋ฝ, ์๋ฐ |
| ํซํค | ํน์ ํค ์ง์ค | ๋ ธ๋ ๊ณผ๋ถํ | ๋ก์ปฌ ์บ์, ํค ๋ณต์ |
5. CDN ์บ์ฑ¶
5.1 CDN ์บ์ฑ ๊ฐ์¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ CDN ์บ์ฑ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ "์ ์ ์ฝํ
์ธ ๋ฅผ ์ฃ์ง ์๋ฒ์ ์บ์ฑ" โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ โโโโโโโโโโโโโโโ โ โ
โ โ โ Origin โ โ โ
โ โ โ Server โ โ โ
โ โ โโโโโโโโฌโโโโโโโ โ โ
โ โ โ โ โ
โ โ โโโโโโโโโโโโโโผโโโโโโโโโโโโโ โ โ
โ โ โ โ โ โ โ
โ โ โผ โผ โผ โ โ
โ โ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โ โ
โ โ โ Edge โ โ Edge โ โ Edge โ โ โ
โ โ โ Seoul โ โ Tokyo โ โ NYC โ โ โ
โ โ โโโโโโฌโโโโโ โโโโโโฌโโโโโ โโโโโโฌโโโโโ โ โ
โ โ โ โ โ โ โ
โ โ โผ โผ โผ โ โ
โ โ ํ๊ตญ ์ฌ์ฉ์ ์ผ๋ณธ ์ฌ์ฉ์ ๋ฏธ๊ตญ ์ฌ์ฉ์ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ CDN ์บ์ฑ ๋์: โ
โ โข ์ด๋ฏธ์ง, CSS, JavaScript โ
โ โข ํฐํธ, ๋์์ โ
โ โข API ์๋ต (GET, ์บ์ ๊ฐ๋ฅํ ๊ฒ) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
5.2 Cache-Control ํค๋¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Cache-Control ํค๋ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ์ฃผ์ ๋๋ ํฐ๋ธ: โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ max-age=3600 โ โ
โ โ ๋ธ๋ผ์ฐ์ /CDN ์บ์ฑ ์๊ฐ (์ด) โ โ
โ โ โ โ
โ โ s-maxage=86400 โ โ
โ โ CDN/๊ณต์ ์บ์ ์ ์ฉ ์๊ฐ (max-age๋ณด๋ค ์ฐ์ ) โ โ
โ โ โ โ
โ โ public โ โ
โ โ ๋ชจ๋ ์บ์์์ ์ ์ฅ ๊ฐ๋ฅ โ โ
โ โ โ โ
โ โ private โ โ
โ โ ๋ธ๋ผ์ฐ์ ๋ง ์บ์ ๊ฐ๋ฅ (CDN ๋ถ๊ฐ) โ โ
โ โ โ โ
โ โ no-cache โ โ
โ โ ์บ์ ์ ์ ์๋ณธ์ ๊ฒ์ฆ ํ์ โ โ
โ โ โ โ
โ โ no-store โ โ
โ โ ์บ์ฑ ๊ธ์ง โ โ
โ โ โ โ
โ โ stale-while-revalidate=60 โ โ
โ โ ์ค๋๋ ์บ์ ์๋นํ๋ฉด์ ๋ฐฑ๊ทธ๋ผ์ด๋ ๊ฐฑ์ โ โ
โ โ โ โ
โ โ immutable โ โ
โ โ ์ฝํ
์ธ ๊ฐ ์ ๋ ๋ณํ์ง ์์ (๋ฒ์ ์ด URL์ ํฌํจ) โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ์์: โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ # ์ ์ ์์ฐ (1๋
) โ โ
โ โ Cache-Control: public, max-age=31536000, immutable โ โ
โ โ โ โ
โ โ # API ์๋ต (CDN 1์๊ฐ, ๋ธ๋ผ์ฐ์ 5๋ถ) โ โ
โ โ Cache-Control: public, max-age=300, s-maxage=3600 โ โ
โ โ โ โ
โ โ # ๊ฐ์ธ ๋ฐ์ดํฐ (๋ธ๋ผ์ฐ์ ๋ง) โ โ
โ โ Cache-Control: private, max-age=600 โ โ
โ โ โ โ
โ โ # ๋ฏผ๊ฐํ ๋ฐ์ดํฐ (์บ์ฑ ๊ธ์ง) โ โ
โ โ Cache-Control: no-store โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
6. ์ฐ์ต ๋ฌธ์ ¶
๋ฌธ์ 1: ์บ์ฑ ์ ๋ต ์ ํ¶
๋ค์ ์๋๋ฆฌ์ค์ ์ ํฉํ ์บ์ฑ ํจํด์ ์ ํํ๊ณ ์ด์ ๋ฅผ ์ค๋ช ํ์ธ์.
a) ์ฝ๊ธฐ ์์ฃผ ์๋น์ค (์ฝ๊ธฐ:์ฐ๊ธฐ = 100:1) b) ์ฐ๊ธฐ๊ฐ ๋ง์ ๋ก๊ทธ ์์คํ c) ๊ฐํ ์ผ๊ด์ฑ์ด ํ์ํ ์ฌ๊ณ ๊ด๋ฆฌ d) ๊ฐ๋จํ ์น ์ ํ๋ฆฌ์ผ์ด์
๋ฌธ์ 2: TTL ์ค์ ¶
๋ค์ ๋ฐ์ดํฐ์ ์ ์ ํ TTL์ ์ค์ ํ์ธ์.
a) ์ฌ์ฉ์ ํ๋กํ (ํ๋ฃจ์ ๋ช ๋ฒ ๋ณ๊ฒฝ) b) ์ํ ๊ฐ๊ฒฉ (์ค์๊ฐ ๋ณ๋) c) ๊ตญ๊ฐ ๋ชฉ๋ก (๊ฑฐ์ ๋ณํ์ง ์์) d) ์ค์๊ฐ ์ฃผ์ ๊ฐ๊ฒฉ
๋ฌธ์ 3: ์บ์ ๋ฌธ์ ํด๊ฒฐ¶
๋ค์ ์ํฉ์ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐ์ฑ ์ ์ ์ํ์ธ์.
์ํฉ: "๋งค์ผ ์์ ์ ์บ์๊ฐ ๋ชจ๋ ๋ง๋ฃ๋์ด ์๋ฒ๊ฐ ๋๋ ค์ง๋๋ค."
๋ฌธ์ 4: Cache-Control ์์ฑ¶
๋ค์ ์๊ตฌ์ฌํญ์ ๋ง๋ Cache-Control ํค๋๋ฅผ ์์ฑํ์ธ์.
a) ์ ์ ์ด๋ฏธ์ง (๋ฒ์ ํฌํจ URL, 1๋ ์บ์ฑ) b) API ์๋ต (CDN 10๋ถ, ๋ธ๋ผ์ฐ์ 1๋ถ) c) ๋ก๊ทธ์ธ ์ํ ํ์ธ API (์บ์ฑ ๊ธ์ง)
์ ๋ต¶
๋ฌธ์ 1 ์ ๋ต¶
a) ์ฝ๊ธฐ ์์ฃผ ์๋น์ค: Cache-Aside
- ์ฝ๊ธฐ ์ ์บ์ ์ฐ์ ์กฐํ
- ์บ์ ๋ฏธ์ค ์ DB ์กฐํ ํ ์บ์ฑ
- ์ฝ๊ธฐ ์ต์ ํ์ ์ ํฉ
b) ์ฐ๊ธฐ๊ฐ ๋ง์ ๋ก๊ทธ ์์คํ
: Write-Behind
- ์บ์์ ๋น ๋ฅด๊ฒ ์ฐ๊ณ ์๋ต
- ๋ฐฐ์น๋ก DB์ ์ ์ฅ
- ์ฐ๊ธฐ ์ฑ๋ฅ ๊ทน๋ํ
c) ๊ฐํ ์ผ๊ด์ฑ ์ฌ๊ณ ๊ด๋ฆฌ: Write-Through
- ์บ์์ DB ๋์ ์
๋ฐ์ดํธ
- ํญ์ ์ผ๊ด๋ ์ฌ๊ณ ์๋
- ๊ณผํ๋งค ๋ฐฉ์ง
d) ๊ฐ๋จํ ์น ์ ํ๋ฆฌ์ผ์ด์
: Cache-Aside
- ๊ตฌํ ๋จ์
- ์บ์ ์ฅ์ ์์๋ DB๋ก ๋์
- ๊ฐ์ฅ ๋ฒ์ฉ์
๋ฌธ์ 2 ์ ๋ต¶
a) ์ฌ์ฉ์ ํ๋กํ: 1-4์๊ฐ
- ๋ณ๊ฒฝ ๋น๋ ๋ฎ์
- ๋ช
์์ ๋ฌดํจํ์ ํจ๊ป ์ฌ์ฉ
b) ์ํ ๊ฐ๊ฒฉ: 1-5๋ถ ๋๋ ์บ์ฑ ์ ํจ
- ๊ฐ๊ฒฉ ์ ํ์ฑ ์ค์
- ์งง์ TTL ๋๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋ฌดํจํ
c) ๊ตญ๊ฐ ๋ชฉ๋ก: 24์๊ฐ ~ 7์ผ
- ๊ฑฐ์ ๋ณํ์ง ์์
- ๊ธด TTL๋ก ์บ์ ํจ์จ ๊ทน๋ํ
d) ์ค์๊ฐ ์ฃผ์ ๊ฐ๊ฒฉ: ์บ์ฑํ์ง ์์
- ์ค์๊ฐ์ฑ์ด ์ค์
- ์ค๋๋ ๋ฐ์ดํฐ๋ ์ํ
๋ฌธ์ 3 ์ ๋ต¶
๋ฌธ์ : ์บ์ ๋์ฌํ (Cache Avalanche)
๋ชจ๋ ์บ์๊ฐ ์์ ์ ๋์ ๋ง๋ฃ
ํด๊ฒฐ์ฑ
:
1. TTL Jitter
base_ttl = 86400 # 24์๊ฐ
jitter = random(-3600, 3600) # ยฑ1์๊ฐ
ttl = base_ttl + jitter
2. ์บ์ ์๋ฐ
- ์์ ์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๊ฐฑ์
- ๋ง๋ฃ 1์๊ฐ ์ ์ ๋ฏธ๋ฆฌ DB ์กฐํ
3. Stale-While-Revalidate
- ์ค๋๋ ์บ์ ์๋นํ๋ฉด์ ๋น๋๊ธฐ ๊ฐฑ์
4. ์บ์ ๊ฐฑ์ ๋ถ์ฐ
- ํญ๋ชฉ๋ณ๋ก ๋ค๋ฅธ ์๊ฐ์ ์บ์ฑ
๋ฌธ์ 4 ์ ๋ต¶
a) ์ ์ ์ด๋ฏธ์ง (๋ฒ์ ํฌํจ)
Cache-Control: public, max-age=31536000, immutable
b) API ์๋ต
Cache-Control: public, max-age=60, s-maxage=600
c) ๋ก๊ทธ์ธ ์ํ API
Cache-Control: no-store
(๋๋: Cache-Control: private, no-cache)
7. ๋ค์ ๋จ๊ณ¶
์บ์ฑ ์ ๋ต์ ์ดํดํ๋ค๋ฉด, ๋ถ์ฐ ์บ์ ์์คํ ์ ํ์ตํ์ธ์.
๋ค์ ๋ ์จ¶
๊ด๋ จ ๋ ์จ¶
- 05_Reverse_Proxy_API_Gateway.md - ํ๋ก์ ์บ์ฑ
์ถ์ฒ ์ค์ต¶
- Redis์์ ์บ์ ํจํด ๊ตฌํํด๋ณด๊ธฐ
- Nginx ์บ์ฑ ์ค์ ์ค์ต
- Cache-Control ํค๋ ํ ์คํธ
8. ์ฐธ๊ณ ์๋ฃ¶
๋ฌธ์¶
๋๊ตฌ¶
์ฐธ๊ณ ์๋ฃ¶
๋ฌธ์ ์ ๋ณด - ์ต์ข ์์ : 2024๋ - ๋์ด๋: โญโญโญ - ์์ ํ์ต ์๊ฐ: 2-3์๊ฐ