Skip to main content
@cache λ°μ½”λ ˆμ΄ν„°λŠ” λ©”μ„œλ“œμ˜ μ‹€ν–‰ κ²°κ³Όλ₯Ό μΊμ‹œν•˜μ—¬ μ„±λŠ₯을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€. BentoCacheλ₯Ό 기반으둜 λ©”λͺ¨λ¦¬, Redis, DynamoDB λ“± λ‹€μ–‘ν•œ μŠ€ν† λ¦¬μ§€λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.

κΈ°λ³Έ μ‚¬μš©λ²•

μ„€μ • (sonamu.config.ts)

μΊμ‹œλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ sonamu.config.tsμ—μ„œ 섀정이 ν•„μš”ν•©λ‹ˆλ‹€.
μΊμ‹œ 섀정이 μ—†μœΌλ©΄ @cache μ‚¬μš© μ‹œ μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.

μ˜΅μ…˜

ttl

μΊμ‹œ 유효 μ‹œκ°„μ„ μ§€μ •ν•©λ‹ˆλ‹€.
λ¬Έμžμ—΄ ν˜•μ‹μ„ μ‚¬μš©ν•˜λ©΄ 가독성이 μ’‹μŠ΅λ‹ˆλ‹€: "10s", "5m", "1h", "1d"

key

μΊμ‹œ ν‚€λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. κΈ°λ³Έκ°’: "{ModelName}.{methodName}:{serializedArgs}"

store

μ‚¬μš©ν•  μΊμ‹œ μŠ€ν† μ–΄λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. κΈ°λ³Έκ°’: sonamu.config.ts의 default μŠ€ν† μ–΄

tags

μΊμ‹œ νƒœκ·Έλ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. νƒœκ·Έλ³„λ‘œ μΊμ‹œλ₯Ό 일괄 λ¬΄νš¨ν™”ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

grace

grace, timeouts λ“±μ˜ κ³ κΈ‰ μ˜΅μ…˜μ€ BentoCache의 RawCommonOptionsμ—μ„œ μ œκ³΅λ©λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ BentoCache λ¬Έμ„œλ₯Ό μ°Έκ³ ν•˜μ„Έμš”.
μΊμ‹œκ°€ 만료된 후에도 일정 μ‹œκ°„ λ™μ•ˆ 이전 κ°’(Stale)을 λ°˜ν™˜ν•˜λŠ” 유예 κΈ°κ°„μž…λ‹ˆλ‹€ (Stale-While-Revalidate νŒ¨ν„΄).
μž‘λ™ 방식:
  • TTL λ‚΄: μ‹ μ„ ν•œ μΊμ‹œ λ°˜ν™˜
  • TTL 만료 ν›„ grace κΈ°κ°„ λ‚΄: Stale μΊμ‹œ μ¦‰μ‹œ λ°˜ν™˜, λ°±κ·ΈλΌμš΄λ“œμ—μ„œ κ°±μ‹ 
  • grace κΈ°κ°„ κ²½κ³Ό ν›„: μΊμ‹œ 미슀
Stale-While-RevalidateλŠ” μ‚¬μš©μžμ—κ²Œ λΉ λ₯Έ 응닡(Stale이라도 μ¦‰μ‹œ)을 μ œκ³΅ν•˜λ©΄μ„œ, λ°±κ·ΈλΌμš΄λ“œμ—μ„œ κ°±μ‹ ν•˜μ—¬ λ‹€μŒ μ‚¬μš©μžλŠ” μ‹ μ„ ν•œ 데이터λ₯Ό λ°›κ²Œ ν•˜λŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€.

timeouts

μΊμ‹œ μž‘μ—…μ˜ νƒ€μž„μ•„μ›ƒμ„ μ„€μ •ν•©λ‹ˆλ‹€.

μΊμ‹œ λ¬΄νš¨ν™”

νƒœκ·Έλ‘œ λ¬΄νš¨ν™”

ν‚€λ‘œ λ¬΄νš¨ν™”

전체 λ¬΄νš¨ν™”

λ‹€λ₯Έ λ°μ½”λ ˆμ΄ν„°μ™€ ν•¨κ»˜ μ‚¬μš©

@api와 ν•¨κ»˜

@transactionalκ³Ό ν•¨κ»˜

λ°μ½”λ ˆμ΄ν„° μˆœμ„œ: @api β†’ @cache β†’ @transactional

μΊμ‹œ μž‘λ™ 방식

1. μΊμ‹œ 히트

2. μΊμ‹œ 미슀

3. μΊμ‹œ κ°±μ‹ 

μ£Όμ˜μ‚¬ν•­

1. CacheManager μ΄ˆκΈ°ν™” ν•„μš”

ν•΄κ²°: sonamu.config.tsμ—μ„œ cache μ„€μ • μΆ”κ°€

2. 인자 직렬화

λ³΅μž‘ν•œ κ°μ²΄λŠ” μžλ™μœΌλ‘œ JSON μ§λ ¬ν™”λ©λ‹ˆλ‹€:
직렬화가 μ–΄λ €μš΄ κ°μ²΄λŠ” key ν•¨μˆ˜λ‘œ 직접 ν‚€λ₯Ό μƒμ„±ν•˜μ„Έμš”.

3. null/undefined 캐싱

nullκ³Ό undefined도 μΊμ‹œλ©λ‹ˆλ‹€:

4. λΆ€μž‘μš©μ΄ μžˆλŠ” λ©”μ„œλ“œ

μΊμ‹œλŠ” 순수 ν•¨μˆ˜μ—λ§Œ μ‚¬μš©ν•˜μ„Έμš”:

μ„±λŠ₯ μ΅œμ ν™”

Multi-tier 캐싱

λΉ λ₯Έ λ©”λͺ¨λ¦¬ μΊμ‹œ + μ˜μ†μ μΈ Redis μΊμ‹œ:

μΊμ‹œ μ›œμ—…

미리 μΊμ‹œλ₯Ό μ±„μ›Œλ‘κΈ°:

λ‘œκΉ…

μΊμ‹œ 히트/미슀λ₯Ό λ‘œκΉ…ν•˜λ €λ©΄ BentoCache μ„€μ • μ‚¬μš©:

μ˜ˆμ‹œ λͺ¨μŒ

λ‹€μŒ 단계

@api

API μ—”λ“œν¬μΈνŠΈ λ§Œλ“€κΈ°

@transactional

νŠΈλžœμž­μ…˜ μ‚¬μš©ν•˜κΈ°

BentoCache

BentoCache 곡식 λ¬Έμ„œ

μ„±λŠ₯ μ΅œμ ν™”

μ„±λŠ₯ μ΅œμ ν™” κ°€μ΄λ“œ