Repository navigation
fix: 조회수 반영 시 유실 및 재처리 중복 방지 - #854
Conversation
|
No actionable comments were generated in the recent review.
|
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Hexeong
left a comment
There was a problem hiding this comment.
고생하셨습니다!
Stream 도입 과정에 명확한 이유가 있네요..! 단순 카운터 방식은 증가분을 먼저 삭제하면 DB 반영 실패 시 유실되고, DB 반영 후 삭제하면 그 사이 들어온 새 조회수까지 지울 수 있다는 점 확인했습니다.
이번 PR은 Lua로 증가분을 Stream 이벤트에 옮긴 뒤 카운터를 제거해 배치 인계 구간의 유실 가능성을 막고, 처리 ID로 재처리 시 중복 반영도 방지하는 걸로 보여요! 이 점에서 Stream 도입 이유가 납득됩니다~
관련 이슈
작업 내용
Redis에서 조회수를 가져와 삭제한 뒤 DB 반영에 실패하면 증가분이 유실됐습니다. DB 커밋 후 완료 확인 전에 작업이 중단된 경우에도 안전하게 재처리할 수 있도록, 반영할 이벤트와 DB 처리 기록을 각각 남깁니다.
flushId, 게시글 ID, 증가분을 기록합니다. DB의flush_idUNIQUE 제약과 트랜잭션으로 처리 기록 저장 및 조회수 증가를 묶어 신규 이벤트만 반영합니다.XACK하고, 완료된 이벤트를 Stream에서 제거합니다. 미완료 이벤트는XAUTOCLAIM으로 인계받아 같은 처리 번호로 재처리합니다.검증
게시글 150개 중 50개에 각 100회씩 총 5,000회를 증가시키고, 반영 이벤트 50개 중 5개에 DB 업데이트 실패를 주입했습니다.
compileTestJava flywayValidate통과.특이 사항
V63__create_view_count_flush.sql로 처리 기록 테이블을 추가합니다.HRANDFIELD,XAUTOCLAIM을 사용하므로 Redis 6.2 이상이 필요합니다.post:view:<postId>카운터를 DB에 반영해야 합니다. 새 Hash로 자동 이관하지 않으므로 기존 버전과 새 버전의 조회수 처리 작업이 겹치지 않도록 전환해야 합니다.리뷰 요구사항 (선택)