- 게임 리스트 조회 시 Firestore 공유 캐시 대신 인스턴스 단위 인메모리 캐시를 사용하는 기술적 근거를 상세히 기록했습니다. - 실시간 경기 중 빈번한 데이터 변경으로 인한 Firestore 비용 부담과 레이턴시 문제를 해결하기 위한 결정임을 명시했습니다. - 향후 트래픽 증가나 외부 API의 일시적인 503 오류 등 서비스 안정성에 영향을 줄 수 있는 상황에 대비하여, 공유 캐시로의 격상 검토안을 TODO에 추가했습니다.
2.3 KiB
2.3 KiB
TODO
KBO 일정/라이브 머지 관련
남은 작업
-
클라이언트 쪽 점수 표시 이슈 조사
- 서버 머지는 정상 (로그 확인 완료: 5/5 매칭, 점수·상태 정상 반영)
- 브라우저 Network 탭에서 실제 응답 바디에
awayScore/homeScore값이 들어오는지 확인 - 값이 들어오는데 0으로 보이면 → 프런트 렌더링 로직 점검
- 값이 null/0으로 오면 → 응답 직렬화/DTO 매핑 레이어 점검 (
scheduleService.ts등)
-
parseGameId수정 (src/kbo/schedule.ts:151)- 현재 Schedule.aspx에서 모든 게임의
gameId가 null로 파싱됨 (로그에서gameId=null5건 확인) - 정규식
/gameId=([A-Za-z0-9]+)/가 실제 relay 셀 HTML 구조와 안 맞을 가능성 - 지금은
(awayTeamCode, homeTeamCode, time)폴백으로 매칭되고 있지만 더블헤더 발생 시 같은 카드 2경기가 섞일 위험 - KBO 응답의 relay 셀 실제 HTML을 확인하고 파서 보정 필요
- 현재 Schedule.aspx에서 모든 게임의
-
mergeLiveIntoSchedule진단 로그 제거 (src/repositories/kboRepository.ts)- 점수 이슈 해결 후
[kbo-merge]console.log 전부 제거
- 점수 이슈 해결 후
-
deploy 스크립트에 build 포함
package.json:10"deploy": "firebase deploy --only functions"→"tsc && firebase deploy --only functions"- 현재는
npm run build빠뜨리면 구버전lib/그대로 배포됨
향후 확장 여지
-
GameList 캐시를 Firestore 공유 캐시로 격상 검토
- 현재:
gameListService.ts의 10초 메모리 캐시 (인스턴스별) - 트래픽 증가 시 인스턴스 수 × (6회/분)로 KBO 호출 증가 → rate limit 리스크
- 격상안:
kboCacheRepository.getOrFetch사용, 키gameList_day__YYYYMMDD__series, TTL은 스케줄과 동일한 동적(라이브 30s, 종료 7d) 방식 - 지금은 불필요. 트래픽/에러율 지표 보고 결정
- 현재:
-
라이브 상세 필드 별도 엔드포인트로 노출
- 이닝/카운트/주자/현재 타자·투수는 "스케줄 파악" 목적에서 제외했으나, 라이브 상세 화면 필요 시
getGameList직접 노출하는 별도 핸들러 추가 고려
- 이닝/카운트/주자/현재 타자·투수는 "스케줄 파악" 목적에서 제외했으나, 라이브 상세 화면 필요 시
-
formatYmd(new Date())→todayKst()기반으로 통일- 현재 TZ=Asia/Seoul 의존. 환경 변경 시 취약