Community

๐Ÿ›ก ์บ์‹œ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ - DB ๊ณผ๋ถ€ํ•˜ ๋ฐฉ์ง€ ์‹ค์ „ ํŒ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠนํžˆ RDBMS ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค์— ๋Œ€๋Ÿ‰์˜ ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆฐ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋Œ€์‘ํ•ด์•ผํ• ๊นŒ์š”? ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ง‘์ค‘๋˜๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์ „๋žต์„ ๊ณ ๋ฏผํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ Redis ๋‚˜ Memcached ์™€ ๊ฐ™์€ ์บ์‹œ ์‹œ์Šคํ…œ์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹น์—ฐํ•œ ์–˜๊ธฐ๊ฒ ์ง€๋งŒ ์ด๋Ÿฌํ•œ ์บ์‹œ ์‹œ์Šคํ…œ์„ ๋„์ž…ํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋Œ€๋Ÿ‰์˜ ํŠธ๋ž˜ํ”ฝ์„ ๋ฌด์กฐ๊ฑด ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜๋Š”๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค ์บ์‹œ๋ฅผ ๋„์ž…ํ•œ๊ฒƒ ๋•Œ๋ฌธ์— ๊ธฐ์กด์— ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ๋˜ ๋‹ค์–‘ํ•œ ์ด์Šˆ๋ฅผ ์ฒดํ—˜ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”, ํ† ์Šค ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ์— ์ด๋Ÿฌํ•œ ์ผ€์ด์Šค๋“ค์„ ์ •๋ฆฌํ•œ ๊ธ€์ด ์žˆ์–ด ๊ณต์œ ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์บ์‹œ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์•  ์œ ํ˜•์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ์บ์‹œ ์‡„๋„ (Cache Stampede) ์บ์‹œ ์‹œ์Šคํ…œ์— ์ €์žฅ๋˜์–ด์žˆ๋˜ ๋‹ค๋Ÿ‰์˜ ์บ์‹œ๊ฐ€ ๋งŒ๋ฃŒ๋˜์–ด ์ˆœ๊ฐ„์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆฌ๋Š” ์ผ€์ด์Šค๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋™์‹œ์— ๋Œ€๋Ÿ‰์˜ ์บ์‹œ๊ฐ€ ๋งŒ๋ฃŒ๋˜์ง€ ์•Š๊ฒŒ ๊ฐ ์บ์‹œ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์„ ๋ฌด์ž‘์œ„๋กœ ์•ฝ๊ฐ„์”ฉ ์ง€์—ฐ์‹œํ‚ค๋Š” ์ง€ํ„ฐ(jitter) ๊ฐœ๋…์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ์บ์‹œ ๊ด€ํ†ต (Cache Penetration) ์กฐํšŒํ•œ ์บ์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ Null ๊ฐ’์ผ ๊ฒฝ์šฐ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐํšŒํ•ด์„œ ์บ์‹œ๋ฅผ ์ฑ„์šฐ๋Š” ์ „๋žต์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ์š”, ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋„ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ Null ๊ฐ’์ผ ๊ฒฝ์šฐ ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ณ„์† ์กฐํšŒํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋ฅผ ์บ์‹œ ๊ด€ํ†ต์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” '๊ฐ’์ด ์—†์Œ' ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋œปํ•˜๋Š” Null Object Pattern ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ์บ์‹œ ์‹œ์Šคํ…œ ์žฅ์•  ๋‹น์—ฐํ•˜๊ฒŒ๋„ ์บ์‹œ ์‹œ์Šคํ…œ๋„ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿด ๊ฒฝ์šฐ ๊ธฐ์กด์— ์บ์‹œ ์‹œ์Šคํ…œ์ด ๊ฐ๋‹นํ–ˆ๋˜ ํŠธ๋ž˜ํ”ฝ์ด ํ•œ์ˆœ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ชฐ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์บ์‹œ ์‹œ์Šคํ…œ์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•จ์„ ๊ฐ์ง€ํ•˜๊ณ  Fail Over ๋ฅผ ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰ํ• ์ง€ ์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋น„์Šค์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ๊ธฐ์กด๊ณผ ๋™์ผํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ๋ฅผ ํ†ตํ•ด ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ, ์„œ๋น„์Šค์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ด ์•„๋‹Œ ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์€ Fast Fail ํ˜น์€ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” UI ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ํ–ฅํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ค„์ด๋Š” ์ „๋žต์„ ์ทจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ํ•ซํ‚ค (hotkey) ๋งŒ๋ฃŒ ๋™์‹œ์— ํ•˜๋‚˜์˜ ์บ์‹œ ๋ฐ์ดํ„ฐ ํ˜น์€ ํ‚ค๋กœ ๋งŽ์€ ์š”์ฒญ์ด ์ง‘์ค‘๋˜๋Š” ๊ฒƒ์„ ํ•ซํ‚ค๋ผ๊ณ  ํ•˜๋Š”๋ฐ์š”, ํ•ซํ‚ค๊ฐ€ ๋งŒ๋ฃŒ๋˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€Œ๋Š” ์ˆœ๊ฐ„, ์—ฌ๋Ÿฌ ์š”์ฒญ์ด ๋™์‹œ์— ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์กฐํšŒ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์–ด ๋ถˆํ•„์š”ํ•œ ํŠธ๋ž˜ํ”ฝ์ด ์œ ๋ฐœ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ถ„์‚ฐ ๋ฝ(Distributed Lock) ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ ํ•œ๋ฒˆ์˜ ์“ฐ๊ธฐ ์ž‘์—…๋งŒ ํ—ˆ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ข€๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ณต์œ ๋“œ๋ฆฐ ์›๋ฌธ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”. ๐Ÿ“š ์›๋ฌธ https://toss.tech/article/cache-traffic-tip

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค