์บ์‹ฑ ์ „๋žต

์บ์‹ฑ ์ „๋žต

๊ฐœ์š”

์ด ๋ฌธ์„œ์—์„œ๋Š” ์บ์‹ฑ์˜ ํ•ต์‹ฌ ์ „๋žต๊ณผ ํŒจํ„ด์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. Cache-Aside, Read-Through, Write-Through, Write-Behind ํŒจํ„ด์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๊ณ , ์บ์‹œ ๋ฌดํšจํ™”, TTL ์„ค์ •, ๊ทธ๋ฆฌ๊ณ  ์บ์‹œ ์นจํˆฌ/๋ˆˆ์‚ฌํƒœ/ํ•ซํ‚ค ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ์ฑ…์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

๋‚œ์ด๋„: โญโญโญ ์˜ˆ์ƒ ํ•™์Šต ์‹œ๊ฐ„: 2-3์‹œ๊ฐ„ ์„ ์ˆ˜ ์ง€์‹: 05_Reverse_Proxy_API_Gateway.md


๋ชฉ์ฐจ

  1. ์บ์‹ฑ์ด๋ž€?
  2. ์บ์‹ฑ ์ „๋žต ํŒจํ„ด
  3. ์บ์‹œ ๋ฌดํšจํ™”
  4. ์บ์‹œ ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ์ฑ…
  5. CDN ์บ์‹ฑ
  6. ์—ฐ์Šต ๋ฌธ์ œ
  7. ๋‹ค์Œ ๋‹จ๊ณ„
  8. ์ฐธ๊ณ  ์ž๋ฃŒ

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. ๋‹ค์Œ ๋‹จ๊ณ„

์บ์‹ฑ ์ „๋žต์„ ์ดํ•ดํ–ˆ๋‹ค๋ฉด, ๋ถ„์‚ฐ ์บ์‹œ ์‹œ์Šคํ…œ์„ ํ•™์Šตํ•˜์„ธ์š”.

๋‹ค์Œ ๋ ˆ์Šจ

๊ด€๋ จ ๋ ˆ์Šจ

์ถ”์ฒœ ์‹ค์Šต

  1. Redis์—์„œ ์บ์‹œ ํŒจํ„ด ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ
  2. Nginx ์บ์‹ฑ ์„ค์ • ์‹ค์Šต
  3. Cache-Control ํ—ค๋” ํ…Œ์ŠคํŠธ

8. ์ฐธ๊ณ  ์ž๋ฃŒ

๋ฌธ์„œ

๋„๊ตฌ

์ฐธ๊ณ  ์ž๋ฃŒ


๋ฌธ์„œ ์ •๋ณด - ์ตœ์ข… ์ˆ˜์ •: 2024๋…„ - ๋‚œ์ด๋„: โญโญโญ - ์˜ˆ์ƒ ํ•™์Šต ์‹œ๊ฐ„: 2-3์‹œ๊ฐ„

to navigate between lessons