data - LRU cache

๐Ÿง What is caching

์บ์‹ฑ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š”๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ฑฐ๋‚˜, ์‹คํ–‰ํ•˜๋Š”๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜์—ฌ ํ•„์š”ํ•  ๋•Œ ์ตœ์ดˆ๋กœ ํ•œ๋ฒˆ๋งŒ ๊ณ„์‚ฐํ•˜์—ฌ ์ €์žฅํ•ด๋†“๊ณ  ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก ํŠธ์•ค๋“œ์—์„œ๋Š” ํด๋ฆฌ์ด์–ธํŠธ ์ปดํ“จํ„ฐ์— ์บ์‹œ๋ฅผ ๋‘๊ณ , ์ด ์บ์‹œ์— ์ „์— ๋ฐฉ๋ฌธํ–ˆ๋˜ ์›นํŽ˜์ด์ง€์˜ ๋‚ด์šฉ์„ ์ €์žฅํ•ด๋†“๊ณ  ๋™์ผํ•œ ํŽ˜์ด์ง€๋ฅผ ์žฌ๋ฐฉ๋ฌธ์‹œ ์ด ์ €์žฅํ•ด๋†“์€ ์‚ฌ๋ณธ์˜ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์„ ์ทจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฑ์—”๋“œ์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐ›์€ ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œ์— ์ €์žฅํ•ด๋‘๊ณ , ๋‚˜์ค‘์— ๋™์ผํ•œ ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ, ์ €์žฅํ•ด๋‘” ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋Œ€๋กœ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜์—ฌ ์กฐํšŒ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , ์„œ๋ฒ„ ๋‹จ์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ์—์„œ๋Š” ํ”„๋ก์‹œ ์„œ๋ฒ„๋‚˜ CDN์„ ๋Œ€ํ‘œ์ ์ธ ์บ์‹ฑ ์‚ฌ๋ก€๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์บ์‹ฑ ์ „๋žต์ด๋ž€?

์ผ๋ฐ˜์ ์œผ๋กœ ์บ์‹ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ €์žฅ ๋งค์ฒด๋Š” ๊ฐ€๊ฒฉ์ด ๋น„์Œ‰๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์ €์žฅ ๋ฉ”์ฒด์˜ ์šฉ๋Ÿ‰์„ ์ œํ•œํ•˜์—ฌ ์ตœ๋Œ€ํ•œ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ „๋žต์„ ์ทจํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์บ์‹ฑ ์ „๋žต์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์บ์‹ฑ ์ „๋žต์€ ์บ์‹œ ์šฉ๋Ÿ‰์ด ๊ฝ‰ ์ฐผ์„ ๋•Œ, ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋‚จ๊ฒจ๋‘๊ณ , ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์›Œ์•ผํ• ์ง€์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. ์บ์‹ฑ ์ „๋žต์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ข…๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • LRU(Least Recently Used) cache

  • MRU(Most Recently Used) cache

  • LFU(Least Frequently Used) cache

์บ์‹ฑ ์ „๋žต - LRU cache(Least Recently Used)

์—ฌ๊ธฐ์„œ๋Š” LRU cache ์ „๋žต์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

LRU cache ์ „๋žต์€ ์ตœ๊ทผ์— ์‚ฌ์šฉ๋œ ๋ฐ์ดํ„ฐ์ผ์ˆ˜๋ก ์•ž์œผ๋กœ๋„ ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๋ผ๋Š” ๊ฐ€์„ค์„ ๋ฐ”ํƒ•์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ด ์ „๋žต์€ ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์ฐธ์กฐ(์‚ฌ์šฉ)๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜์—ฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ณ , ์กฐํšŒํ•œ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ€์žฅ ์ตœ๊ทผ์— ์‚ฌ์šฉ๋œ ๋ฐ์ดํ„ฐ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ œํ•œ๋˜์–ด์žˆ๊ณ  ์ž์ฃผ ์—‘์„ธ์Šคํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ๋น ๋ฅด๊ฒŒ ์—‘์„ธ์Šค ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

LRU cache์˜ ์„ธ๋ถ€ ๋™์ž‘๋ฐฉ์‹์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋  ๊ฒฝ์šฐ,

    • ์บ์‹œ์˜ ๊ณต๊ฐ„์ด ๊ฐ€๋“์ฐจ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ์ตœ๊ทผ ์œ„์น˜๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.

    • ์บ์‹œ์˜ ๊ณต๊ฐ„์ด ๊ฐ€๋“์ฐฌ ๊ฒฝ์šฐ, ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ์ตœ๊ทผ ์œ„์น˜๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.

  • ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๊ฒฝ์šฐ,

    • ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ์ตœ๊ทผ ์œ„์น˜๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.

๐Ÿ“š ์šฉ์–ด๋„ ์•Œ์•„๋‘๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

  • Cache Hit: ์บ์‹œ์— ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์–ด, ๋””์Šคํฌ์— ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ

  • Cache Miss: ์บ์‹œ์— ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒƒ

  • Eviction: ์บ์‹œ ๊ณต๊ฐ„์ด ๊ฝ‰์ฐจ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ

LRU cache ๋™์ž‘๋ฐฉ์‹ ์•Œ์•„๋ณด๊ธฐ

์•„๋ž˜์˜ ์˜ˆ์‹œ์—์„œ๋Š” ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ์ตœ์‹ ์— [์กฐํšŒ/์‚ฝ์ž…] ๋ฐ์ดํ„ฐ๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

Python์—์„œ LRU ์บ์‹œ ์‚ฌ์šฉ

functools ๋ชจ๋“ˆ์˜ lru_cache ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ LRU ์บ์‹œ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

maxsize ์˜ ์˜๋ฏธ

lru_cache ๋ฐ์ฝ”๋ ˆ์ด์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ maxsize๋Š” ์บ์‹œ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํ•ญ๋ชฉ ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์บ์‹œ๊ฐ€ ์ด ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ์ตœ๊ทผ์— ๊ฐ€์žฅ ์ ๊ฒŒ ์‚ฌ์šฉ๋œ ํ•ญ๋ชฉ์€ ์ƒˆ ํ•ญ๋ชฉ์„ ์œ„ํ•œ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ maxsize์˜ ๊ธฐ๋ณธ ๊ฐ’์€ 128์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ None์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์บ์‹œ๊ฐ€ ์ œํ•œ ์—†์ด ์ปค์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

LRU ์บ์‹œ ํด๋ž˜์Šค ๊ตฌํ˜„

Last updated