F1 Portal — 2026년 3월 10일
1 files+27-71 AI sessions (50 KB)
# F1 Portal 성능 최적화: 메모리 문제 해결과 캐시 전략 개선
F1 Portal의 리플레이 프레임 처리 과정에서 심각한 성능 문제들을 발견하고 해결했습니다. 가장 긴급했던 것은 R2 객체 저장소에서 gzip 압축 파일을 다운로드할 때 전체 파일(155MB)을 메모리에 로드한 후 압축 해제하는 방식이었는데, 이것이 Railway 환경에서 OOM(Out of Memory) 에러를 유발하고 있었습니다. Claude와의 협업을 통해 스트리밍 방식으로 변경하여 메모리 사용량을 획기적으로 줄일 수 있었습니다. 동시에 세션 이름 정규화(Race→R, Sprint→S) 처리로 데이터 일관성도 개선했습니다.
두 번째 개선사항은 대역폭 비용 최적화입니다. 기존에는 모든 R2 캐시 히트가 Railway 서버를 거쳐 전달되어 불필요한 아웃바운드 대역폭을 소비하고 있었습니다. 이를 해결하기 위해 캐시된 파일에 대해 R2 presigned URL로 직접 리다이렉트하는 방식으로 변경했습니다. 이제 사용자는 Railway를 거치지 않고 R2에서 직접 파일을 받을 수 있어, 서버 부하와 대역폭 비용을 동시에 줄일 수 있게 되었습니다.
작은 변경이지만 스트리밍, 캐시 전략, 리다이렉트라는 세 가지 최적화 기법이 결합된 의미 있는 개선입니다. 특히 메모리 압박이 있는 환경에서 대용량 파일을 안정적으로 처리하는 방식으로의 전환이 F1 Portal의 안정성을 한 단계 올려줄 것으로 기대합니다.
커밋 기록
perf: redirect R2 cache hits to presigned URL (bypass Railway bandwidth)
21:06fix: stream R2 gzip directly to avoid 155MB RAM decompression (OOM fix)
20:46fix: normalize session name in replay-frames (Race→R, Sprint→S)
20:36