Correct CACHING.md gameListCache drift (doc)
- CACHING.md의 gameListCache 관련 잘못된 내용 정정 - 사이즈 cap(100개) 및 RTDB 메트릭 카운터 항목을 실제 코드 동작에 맞게 수정
This commit is contained in:
parent
571c894278
commit
14fd893ad4
@ -61,14 +61,16 @@ KBO 외부 API 호출을 줄이기 위한 3계층 캐시 구조를 정리한다.
|
|||||||
## 2. 게임센터 — 메모리 캐시 (10초)
|
## 2. 게임센터 — 메모리 캐시 (10초)
|
||||||
|
|
||||||
### 저장
|
### 저장
|
||||||
Functions 인스턴스의 `Map<string, { data, expiresAt }>`.
|
Functions 인스턴스의 `Map<string, { data, expiresAt }>` (`lib/memCache.ts`의 `MemCache`).
|
||||||
- 키: `${date}|${series}|${league}`
|
- 키: `${date}|${series}|${league}`
|
||||||
- TTL: 10초
|
- TTL: 10초
|
||||||
- 사이즈 cap: 100개 (초과 시 가장 오래된 항목 evict)
|
- 사이즈 cap: **미설정**. `gameListService`는 `new MemCache(10_000)`로 `maxSize`를 주지 않는다.
|
||||||
|
만료 항목은 `set()` 시 정리되지만 동시 보관 개수 상한은 없다(키 카디널리티 = 날짜×시리즈×리그로 작아 사실상 무해).
|
||||||
|
상한이 필요하면 `MemCache` 생성자 2번째 인자로 `maxSize`를 전달하면 LRU-ish evict가 켜진다.
|
||||||
|
|
||||||
### 조회 흐름
|
### 조회 흐름
|
||||||
1. `memGet(key)` — TTL 이내면 즉시 반환 (Firestore/외부 API 호출 0)
|
1. `get(key)` — TTL 이내면 즉시 반환 (Firestore/외부 API 호출 0)
|
||||||
2. 미스 → `fetchGameList()` 호출 → `memSet()`
|
2. 미스 → `fetchGameList()` 호출 → `set()` (`getOrFetch`가 동일 키 동시호출도 coalesce)
|
||||||
|
|
||||||
### 특성
|
### 특성
|
||||||
- **라이브 데이터 특성에 맞춘 짧은 TTL**. 10초 이내 재요청은 외부 호출 안 나감.
|
- **라이브 데이터 특성에 맞춘 짧은 TTL**. 10초 이내 재요청은 외부 호출 안 나감.
|
||||||
@ -76,8 +78,8 @@ Functions 인스턴스의 `Map<string, { data, expiresAt }>`.
|
|||||||
- CLI는 서비스 레이어를 우회하므로 캐시 적용 안 됨 (HTTP `/kbo/games`만 적용).
|
- CLI는 서비스 레이어를 우회하므로 캐시 적용 안 됨 (HTTP `/kbo/games`만 적용).
|
||||||
|
|
||||||
### 메트릭
|
### 메트릭
|
||||||
`/metrics/gameListCache/{YYYYMMDD}/{hit|miss}` (RTDB).
|
현재 hit/miss 메트릭은 구현되어 있지 않다(`/metrics/gameListCache/...` 미구현).
|
||||||
`ServerValue.increment(1)`로 원자적 증가, fire-and-forget (오류 무시).
|
도입한다면 `ServerValue.increment(1)` 기반 fire-and-forget RTDB 카운터를 권장.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user