Skip to main content
Sonamu๋Š” BentoCache๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ•๋ ฅํ•œ ์บ์‹ฑ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” sonamu.config.ts์—์„œ ์บ์‹œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

BentoCache๋ž€?

BentoCache๋Š” Multi-tier ์บ์‹ฑ์„ ์ง€์›ํ•˜๋Š” TypeScript ์บ์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ฃผ์š” ํŠน์ง•:
  • L1/L2 ๋ ˆ์ด์–ด: ๋ฉ”๋ชจ๋ฆฌ(๋น ๋ฆ„) + ์˜๊ตฌ ์ €์žฅ์†Œ(๋А๋ฆผํ•˜์ง€๋งŒ ๊ณต์œ  ๊ฐ€๋Šฅ)
  • ๋‹ค์–‘ํ•œ ๋“œ๋ผ์ด๋ฒ„: Memory, Redis, File, Knex ์ง€์›
  • Bus ์‹œ์Šคํ…œ: ๋ถ„์‚ฐ ์บ์‹œ ๋ฌดํšจํ™”
  • Tag ๊ธฐ๋ฐ˜ ๋ฌดํšจํ™”: ์—ฌ๋Ÿฌ ์บ์‹œ๋ฅผ ๊ทธ๋ฃน์œผ๋กœ ๊ด€๋ฆฌ
  • TTL & Grace Period: ๋งŒ๋ฃŒ ๋ฐ Stale-While-Revalidate

๊ธฐ๋ณธ ์„ค์ •

sonamu.config.ts

sonamu.config.ts์˜ server.cache ํ•„๋“œ์— ์บ์‹œ ์„ค์ •์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:
ํ•„์ˆ˜ ํ•„๋“œ:
  • default: ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•  ์Šคํ† ์–ด ์ด๋ฆ„
  • stores: ์Šคํ† ์–ด ์„ค์ • ๊ฐ์ฒด (์ตœ์†Œ 1๊ฐœ ์ด์ƒ ํ•„์š”)

๋“œ๋ผ์ด๋ฒ„ ์ข…๋ฅ˜

Sonamu๋Š” 5๊ฐ€์ง€ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

memory

๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ์บ์‹œ (๋น ๋ฅด์ง€๋งŒ ํ”„๋กœ์„ธ์Šค ์žฌ์‹œ์ž‘ ์‹œ ์‚ญ์ œ)

redis

Redis ๊ธฐ๋ฐ˜ ์บ์‹œ (์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๊ณต์œ  ๊ฐ€๋Šฅ)

file

ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ธฐ๋ฐ˜ ์บ์‹œ (์˜๊ตฌ ์ €์žฅ)

knex

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ฐ˜ ์บ์‹œ (๊ธฐ์กด DB ํ™œ์šฉ)

redisBus

๋ถ„์‚ฐ ์บ์‹œ ๋ฌดํšจํ™” ๋ฒ„์Šค (์—ฌ๋Ÿฌ ์„œ๋ฒ„ ๊ฐ„ ๋™๊ธฐํ™”)

Import ๋ฐฉ๋ฒ•

Store ๊ตฌ์„ฑ

L1 ๋ ˆ์ด์–ด (๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ)

L1์€ ๋กœ์ปฌ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜์–ด ๊ฐ€์žฅ ๋น ๋ฆ…๋‹ˆ๋‹ค.
ํŠน์ง•:
  • ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ๋งŒ ์œ ํšจ
  • ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์‹œ ์‚ญ์ œ๋จ
  • ๋„คํŠธ์›Œํฌ I/O ์—†์Œ (๊ฐ€์žฅ ๋น ๋ฆ„)

L2 ๋ ˆ์ด์–ด (์˜๊ตฌ ์ €์žฅ์†Œ)

L2๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค/์„œ๋ฒ„ ๊ฐ„ ๊ณต์œ  ๊ฐ€๋Šฅํ•œ ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค.
Redis ์žฅ์ :
  • ์—ฌ๋Ÿฌ ์„œ๋ฒ„ ๊ฐ„ ์บ์‹œ ๊ณต์œ 
  • ์˜๊ตฌ ์ €์žฅ (์žฌ์‹œ์ž‘ ํ›„์—๋„ ์œ ์ง€)
  • ๋น ๋ฅธ ๋„คํŠธ์›Œํฌ ์•ก์„ธ์Šค

Bus ๋ ˆ์ด์–ด (๋ถ„์‚ฐ ๋ฌดํšจํ™”)

์—ฌ๋Ÿฌ ์„œ๋ฒ„๊ฐ€ ์žˆ์„ ๋•Œ, ํ•œ ์„œ๋ฒ„์—์„œ ์บ์‹œ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋‹ค๋ฅธ ์„œ๋ฒ„์—๋„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.
Bus ์—†์ด:
Bus ์‚ฌ์šฉ:

๋ฉ€ํ‹ฐ ์Šคํ† ์–ด ์„ค์ •

์šฉ๋„์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์Šคํ† ์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

์Šคํ† ์–ด ์‚ฌ์šฉํ•˜๊ธฐ

๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์—์„œ๋„ ์Šคํ† ์–ด ์ง€์ • ๊ฐ€๋Šฅ:

์‹ค์ „ ์˜ˆ์ œ

1. ๋‹จ์ผ ์„œ๋ฒ„ (๋ฉ”๋ชจ๋ฆฌ๋งŒ)

์ ํ•ฉํ•œ ๊ฒฝ์šฐ:
  • ๋‹จ์ผ ์„œ๋ฒ„ ์šด์˜
  • ์บ์‹œ ์žฌ์ƒ์„ฑ์ด ๋น ๋ฆ„
  • ์„œ๋ฒ„ ์žฌ์‹œ์ž‘์ด ๋“œ๋ฌผ์Œ

2. ๋‹ค์ค‘ ์„œ๋ฒ„ (Redis ๊ณต์œ )

์ ํ•ฉํ•œ ๊ฒฝ์šฐ:
  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ + ์—ฌ๋Ÿฌ ์„œ๋ฒ„
  • ์„œ๋ฒ„ ๊ฐ„ ์บ์‹œ ๊ณต์œ  ํ•„์š”
  • ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ํ›„์—๋„ ์บ์‹œ ์œ ์ง€

3. ๊ณ„์ธต๋ณ„ ์„ค์ • (์„ฑ๋Šฅ ์ตœ์ ํ™”)

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

Memory Driver

ํฌ๊ธฐ ๋‹จ์œ„: "10kb", "5mb", "1gb" ๋˜๋Š” ๋ฐ”์ดํŠธ ์ˆ˜(1024)

Redis Driver

File Driver

Knex Driver

ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ (์ž๋™ ์ƒ์„ฑ):

Redis Bus Driver

ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ

ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋Š” ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค:
๋‚ด๋ถ€ ๊ตฌํ˜„:

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

์บ์‹œ ์„ค์ • ์‹œ ์ฃผ์˜์‚ฌํ•ญ:
  1. ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ: maxSize๋ฅผ ๋„ˆ๋ฌด ํฌ๊ฒŒ ์„ค์ •ํ•˜๋ฉด OOM(Out of Memory) ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  2. Redis ์—ฐ๊ฒฐ ๊ณต์œ : Redis ์ธ์Šคํ„ด์Šค๋Š” driver์™€ bus์—์„œ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉ
  3. ์Šคํ† ์–ด ์ด๋ฆ„ ์ผ์น˜: ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์˜ store ์˜ต์…˜์€ ์„ค์ •์— ์ •์˜๋œ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•จ
  4. Bus ์—†์ด L2๋งŒ ์‚ฌ์šฉ: ์—ฌ๋Ÿฌ ์„œ๋ฒ„์—์„œ L2(Redis)๋งŒ ์‚ฌ์šฉํ•˜๋ฉด L1์ด ๋™๊ธฐํ™”๋˜์ง€ ์•Š์Œ

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

@cache ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ

๋ฉ”์„œ๋“œ์— ์บ์‹œ ์ ์šฉํ•˜๊ธฐ

์บ์‹œ ๋ฌดํšจํ™”

Tag ๊ธฐ๋ฐ˜ ์บ์‹œ ๋ฌดํšจํ™”

์บ์‹œ ์ „๋žต

TTL, Grace, Namespace ํ™œ์šฉ