두 게시글의 공통점은 리액션이 존재하지만, 좋아요 수가 actions_summary의 카운트로 표시되지 않는다는 것입니다.
게시글에 직접 리액션을 했는지 여부에 따라 id: 2가 actions_summary에서 누락되거나, 리액션을 하지 않은 경우 카운트가 누락된 것을 볼 수 있습니다. 제 이해가 맞다면, id: 2는 사용자가 리액션을 할 수 있는 경우(can_act) 또는 count가 0보다 큰 경우에 포함됩니다.
Meta에서 이 문제로 인해 영향을 받는 게시글이 얼마나 되는지, 또는 다른 포럼도 영향을 받는지는 알 수 없습니다. 또한 데이터가 누락되는 이유에 대한 단계적인 설명을 제공할 수도 없습니다. 단지 일부 게시글에서 모바일 폰에서는 리액션이 표시되지 않고 노트북에서는 부분적으로만 표시되며, 그 원인이 누락된 데이터와 관련이 있는 것으로 보인다는 것만 보고할 수 있습니다.
이 문제가 어떻게 발생했는지 파악할 수 있었나요? 저는 2023년과 2024년 초의 예시만 찾았습니다. 그래서 모든 리액션이 좋아요로 집계되기 전의 데이터와 그 변경 이후의 데이터 사이에 차이가 있는지 궁금해졌습니다.
그래서 좋아요 집계에서 제외되는 리액션을 사용해 보았지만, current_user_reaction의 "can_undo"가 false여도 "can_act"는 여전히 true로 나타났습니다.
discourse_reactions_like_sync_enabled이 **false**로 설정되어 있기 때문입니다. 이는 2024년 5월 마이그레이션을 통해 기존 데이터를 교란하지 않기 위해 의도적으로 수행되었습니다.
이 설정이 비활성화되면 ReactionLikeSynchronizer가 실행되지 않습니다. 이 동기화기는 다음 역할을 담당합니다:
리액션에 대한 PostAction(좋아요) 레코드를 생성합니다.
리액션을 반영하도록 posts.like_count를 업데이트합니다.
동기화가 실행되지 않으면:
리액션은 discourse_reactions_reaction_users에 존재합니다.
그러나 이에 해당하는 PostAction 레코드는 없습니다.
그리고 posts.like_count는 0으로 유지됩니다.
타이밍에 대한 직관이 정확합니다. 2023년/2024년 초 게시글에는 이 동기화가 활성화되지 않았을 때 리액션이 추가되었기 때문에, 해당 게시글의 like_count는 업데이트되지 않았습니다. 이후 구버전 직렬화기 로직은 count = 0이면서 can_act = false(취소 창 만료)인 경우 좋아요 액션을 완전히 생략했습니다.
해결 방법은 근본적인 데이터 불일치를 수정하는 것이 아니라, PostAction/like_count 데이터가 동기화되지 않았더라도 UI가 리액션을 올바르게 표시하도록 보장하는 것입니다. discourse_reactions_like_sync_enabled = false인 사이트에서는 PostAction 레코드와 독립적으로 리액션이 존재하는 것이 예상되는 동작입니다.