-
Notifications
You must be signed in to change notification settings - Fork 1
[의사결정] 좋아요 데이터 영속성을 어떻게 보장할 것 인가? #102
Copy link
Copy link
Open
Labels
기능구현This will not be worked onThis will not be worked on
Description
좋아요 데이터 영속성 문제
문제 정의
현재 좋아요 카운트는 Redis ZSet(like:ranking)에만 저장됩니다.
Redis는 인메모리 저장소이기 때문에 아래 상황에서 데이터가 소멸합니다.
- Redis 프로세스 재시작
- Redis 서버 장애
- OOM으로 인한 데이터 eviction
현재 서버 기동 시 BoothLikeWarmupRunner가 모든 부스를 score 0으로 초기화하고 있으나, 이는 기존 좋아요 수를 복구하지 못합니다. Redis가 재시작되면 모든 좋아요 수가 0으로 리셋됩니다.
영향 범위
GET /api/v1/booths/{booth-id}— likeCount 0으로 표시GET /api/v1/booths/ranking— 모든 부스 동점(0) 처리
해결 방향
DB 동기화 스케줄러 도입
Redis의 좋아요 카운트를 주기적으로 DB에 flush하여 영속성 확보.
서버 기동 시 Warmup을 DB 기반으로 변경하여 Redis 재시작 후에도 복구 가능하도록 구성.
[현재]
like 요청 → Redis ZINCRBY → (끝)
[목표]
like 요청 → Redis ZINCRBY → (주기적) → DB flush
서버 기동 → DB 조회 → Redis 초기화 (score 복구)
구현 계획
| 순서 | 작업 | 비고 |
|---|---|---|
| 1 | DB에 like_count 컬럼 추가 (booth 테이블) |
Flyway 마이그레이션 |
| 2 | @Scheduled 스케줄러 구현 |
Redis → DB 주기적 동기화 |
| 3 | BoothLikeWarmupRunner 수정 |
DB 값으로 Redis 초기화 |
논의 필요 사항
- 동기화 주기: 얼마나 자주 flush할지 (1분, 5분, 10분?)
- 장애 허용 범위: Redis 장애 시 최대 몇 분치 데이터 손실까지 허용할지
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
기능구현This will not be worked onThis will not be worked on