세션 저장소 마이그레이션: Redis → Postgres
Claude Code가 생성 · 2026-09-28 · 검토 대기 중
배경
세션 데이터는 영속성을 끈 단일 Redis 인스턴스에 있습니다. 지난주 두 차례 재시작할 때마다 로그인 세션이 약 4만 개씩 사라졌습니다. 이 계획은 세션을 기존 Postgres 클러스터로 옮기고, Redis는 읽기 캐시로 남깁니다.
방안 비교
| 방안 | 내구성 | 읽기 P95 | 작업량 |
|---|---|---|---|
| A: Redis AOF 활성화 | 초 단위 | 0.8 ms | 적음 |
| B: Postgres로 이전 | 트랜잭션 단위 | 2.4 ms | 보통 |
| C: B + Redis 읽기 캐시 | 트랜잭션 단위 | 0.9 ms | 보통 |
C 권장: 내구성은 B와 같고, 읽기 지연 시간은 지금과 비슷합니다.
진행 단계
sessions테이블 생성,user_id에 인덱스 추가- 이중 쓰기: 새 세션을 Redis와 Postgres에 동시에 기록
- 기존 세션 백필(약 120만 행)
- 읽기를 Postgres로 전환, Redis는 캐시로 사용
- 7일간 모니터링 후 Redis 영속성 의존성 제거
데이터 흐름
백필 스크립트
-- 만료되지 않은 세션만 백필
INSERT INTO sessions (id, user_id, data, expires_at)
SELECT id, user_id, data, expires_at
FROM staging_sessions
WHERE expires_at > now()
ON CONFLICT (id) DO NOTHING;
위험 요소
경고WARNING
백필 중 이중 쓰기가 충돌하면 Postgres를 우선합니다. 백필을 시작하기 전에 세션 스키마 변경을 동결합니다.
롤백
읽기 경로는 SESSION_READ_FROM_PG 플래그로 제어합니다. 플래그를 끄면 Redis로 돌아가며, 재배포는 필요 없습니다.