Skip to content

[의사결정] 좋아요 데이터 영속성을 어떻게 보장할 것 인가? #102

@wlgns12370

Description

@wlgns12370

좋아요 데이터 영속성 문제


문제 정의

현재 좋아요 카운트는 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 장애 시 최대 몇 분치 데이터 손실까지 허용할지

Metadata

Metadata

Assignees

No one assigned

    Labels

    기능구현This will not be worked on

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions