Skip to main content
Sonamu๋Š” BentoCache๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์บ์‹ฑ ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ, Redis ๋“ฑ ๋‹ค์–‘ํ•œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ๋‹ค์ธต ์บ์‹œ(L1/L2)์™€ ๋ถ„์‚ฐ ๋ฌดํšจํ™”๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ตฌ์กฐ

default

๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•  ์บ์‹œ ์Šคํ† ์–ด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž…: string

stores

์‚ฌ์šฉํ•  ์บ์‹œ ์Šคํ† ์–ด๋“ค์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž…: Record<string, BentoCacheStore>

๋‹จ์ผ ๋ ˆ์ด์–ด: ๋ฉ”๋ชจ๋ฆฌ

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์„ค์ •์œผ๋กœ, ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ์บ์‹œ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
์žฅ์ : ๋น ๋ฅธ ์†๋„, ์„ค์ • ๊ฐ„๋‹จ
๋‹จ์ : ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์‹œ ์บ์‹œ ์†์‹ค, ๋‹ค์ค‘ ์„œ๋ฒ„ ๊ฐ„ ๊ณต์œ  ๋ถˆ๊ฐ€

๋‹ค์ธต ์บ์‹œ: L1 (๋ฉ”๋ชจ๋ฆฌ) + L2 (Redis)

L1์€ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋น ๋ฅด๊ฒŒ, L2๋Š” Redis๋กœ ์˜๊ตฌ์ ์œผ๋กœ ์บ์‹ฑํ•ฉ๋‹ˆ๋‹ค.
๋™์ž‘ ๋ฐฉ์‹:
  1. ์บ์‹œ ์กฐํšŒ ์‹œ L1(๋ฉ”๋ชจ๋ฆฌ) ๋จผ์ € ํ™•์ธ
  2. L1์— ์—†์œผ๋ฉด L2(Redis) ํ™•์ธ
  3. L2์—์„œ ์ฐพ์œผ๋ฉด L1์—๋„ ์ €์žฅ
  4. ๋‘˜ ๋‹ค ์—†์œผ๋ฉด ์›๋ณธ ๋ฐ์ดํ„ฐ ์กฐํšŒ ํ›„ L1, L2์— ์ €์žฅ

๋ถ„์‚ฐ ์บ์‹œ: L1 + L2 + Bus

์—ฌ๋Ÿฌ ์„œ๋ฒ„ ๊ฐ„ ์บ์‹œ ๋ฌดํšจํ™”๋ฅผ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
๋™์ž‘ ๋ฐฉ์‹:
  • ํ•œ ์„œ๋ฒ„์—์„œ ์บ์‹œ๋ฅผ ๋ฌดํšจํ™”ํ•˜๋ฉด
  • Bus๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ๋ชจ๋“  ์„œ๋ฒ„์— ์ „ํŒŒ
  • ๋ชจ๋“  ์„œ๋ฒ„์˜ L1 ์บ์‹œ๋„ ์ž๋™ ๋ฌดํšจํ™”
๋‹ค์ค‘ ์„œ๋ฒ„(๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ๋’ค)๋ฅผ ์šด์˜ํ•œ๋‹ค๋ฉด Bus๋ฅผ ํ™œ์„ฑํ™”ํ•˜์„ธ์š”. ์บ์‹œ ์ผ๊ด€์„ฑ์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค.

ttl

์บ์‹œ์˜ ๊ธฐ๋ณธ ์œ ํšจ ์‹œ๊ฐ„(Time To Live)์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž…: string (์„ ํƒ์ ) ๊ธฐ๋ณธ๊ฐ’: "5m" (5๋ถ„)
์‹œ๊ฐ„ ํ˜•์‹:
  • "5s" - 5์ดˆ
  • "1m" - 1๋ถ„
  • "1h" - 1์‹œ๊ฐ„
  • "1d" - 1์ผ
API๋ณ„๋กœ ๋‹ค๋ฅธ TTL ์‚ฌ์šฉ:

prefix

๋ชจ๋“  ์บ์‹œ ํ‚ค์— ์ถ”๊ฐ€๋  ์ ‘๋‘์‚ฌ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž…: string (์„ ํƒ์ ) ๊ธฐ๋ณธ๊ฐ’: ""
์˜ˆ์‹œ:
๊ฐ™์€ Redis ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ์•ฑ์ด ๊ณต์œ ํ•œ๋‹ค๋ฉด prefix๋ฅผ ์„ค์ •ํ•˜์—ฌ ํ‚ค ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜์„ธ์š”.

๋“œ๋ผ์ด๋ฒ„ ์˜ต์…˜

memory ๋“œ๋ผ์ด๋ฒ„

๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹œ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
์˜ต์…˜:
  • maxSize: ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ("50mb", "100mb", "1gb" ๋“ฑ)

redis ๋“œ๋ผ์ด๋ฒ„

Redis์— ์บ์‹œ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
connection ์„ค์ •:

redisBus ๋“œ๋ผ์ด๋ฒ„

Redis Pub/Sub์„ ์‚ฌ์šฉํ•˜์—ฌ ์บ์‹œ ๋ฌดํšจํ™”๋ฅผ ์ „ํŒŒํ•ฉ๋‹ˆ๋‹ค.
redisBus๋Š” redis ๋“œ๋ผ์ด๋ฒ„์™€ ๊ฐ™์€ ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ „ ์˜ˆ์‹œ

๋‹จ์ผ ์„œ๋ฒ„: ๋ฉ”๋ชจ๋ฆฌ๋งŒ ์‚ฌ์šฉ

์šฉ๋„: ์†Œ๊ทœ๋ชจ ์•ฑ, ๋‹จ์ผ ์„œ๋ฒ„

๋‹ค์ธต ์บ์‹œ: ๋ฉ”๋ชจ๋ฆฌ + Redis

์šฉ๋„: ์ค‘๊ทœ๋ชจ ์•ฑ, ๋‹จ์ผ ์„œ๋ฒ„, ์˜๊ตฌ ์บ์‹œ ํ•„์š”

๋ถ„์‚ฐ ํ™˜๊ฒฝ: ๋ฉ”๋ชจ๋ฆฌ + Redis + Bus

์šฉ๋„: ๋Œ€๊ทœ๋ชจ ์•ฑ, ๋‹ค์ค‘ ์„œ๋ฒ„(๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ), ์บ์‹œ ์ผ๊ด€์„ฑ ํ•„์š”

๋‹ค์ค‘ ์Šคํ† ์–ด: ์šฉ๋„๋ณ„ ๋ถ„๋ฆฌ

์‚ฌ์šฉ ์˜ˆ์‹œ:

์บ์‹œ ์‚ฌ์šฉ

์„ค์ • ํ›„ API์—์„œ @cache ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
โ†’ ์บ์‹œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์‚ฌ์šฉ๋ฒ•

Redis ์„ค์น˜

Redis๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € ์„ค์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Docker

macOS

Linux

์—ฐ๊ฒฐ ํ™•์ธ

์ฃผ์˜์‚ฌํ•ญ

1. Redis ์—ฐ๊ฒฐ ๊ด€๋ฆฌ

2. ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ์„ค์ •

3. TTL ์„ ํƒ

๋‹ค์Œ ๋‹จ๊ณ„

์บ์‹œ ์„ค์ •์„ ์™„๋ฃŒํ–ˆ๋‹ค๋ฉด: