Correct CACHING.md gameListCache drift (doc)

- CACHING.md의 gameListCache 관련 잘못된 내용 정정
- 사이즈 cap(100개) 및 RTDB 메트릭 카운터 항목을 실제 코드 동작에 맞게 수정
This commit is contained in:
윤정민 2026-05-28 17:35:15 +09:00
parent 571c894278
commit 14fd893ad4

View File

@ -61,14 +61,16 @@ KBO 외부 API 호출을 줄이기 위한 3계층 캐시 구조를 정리한다.
## 2. 게임센터 — 메모리 캐시 (10초)
### 저장
Functions 인스턴스의 `Map<string, { data, expiresAt }>`.
Functions 인스턴스의 `Map<string, { data, expiresAt }>` (`lib/memCache.ts``MemCache`).
- 키: `${date}|${series}|${league}`
- 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)
2. 미스 → `fetchGameList()` 호출 → `memSet()`
1. `get(key)` — TTL 이내면 즉시 반환 (Firestore/외부 API 호출 0)
2. 미스 → `fetchGameList()` 호출 → `set()` (`getOrFetch`가 동일 키 동시호출도 coalesce)
### 특성
- **라이브 데이터 특성에 맞춘 짧은 TTL**. 10초 이내 재요청은 외부 호출 안 나감.
@ -76,8 +78,8 @@ Functions 인스턴스의 `Map<string, { data, expiresAt }>`.
- CLI는 서비스 레이어를 우회하므로 캐시 적용 안 됨 (HTTP `/kbo/games`만 적용).
### 메트릭
`/metrics/gameListCache/{YYYYMMDD}/{hit|miss}` (RTDB).
`ServerValue.increment(1)`로 원자적 증가, fire-and-forget (오류 무시).
현재 hit/miss 메트릭은 구현되어 있지 않다(`/metrics/gameListCache/...` 미구현).
도입한다면 `ServerValue.increment(1)` 기반 fire-and-forget RTDB 카운터를 권장.
---