Skip to content

likeCount 관련 동시성 이슈 - count가 정확하게 반영되지 않음 #191

@melonturtle

Description

@melonturtle

먼저 슬랙에서 제가 말했던 것처럼,

  • 동시에 여러 유저가 댓글에 좋아요하면 각자 트랜잭션 시작하고나서 다른 트랜잭션에서 좋아요 개수 바뀐건 자신의 트랜잭션 내에서 모르기때문에 발생하는 이슈
    • MySQL의 기본 Transaction Isolation Level이 READ REPEATABLE 이니까

예를 들어 아래와 같은 상황이 일어날 수 있다.

유저가 10명이라고 치면 좋아요를 10명이했으니까 likeCount가 10이어야하는데

  1. likeCount가 0일때 유저가 다 좋아요 누름
  2. 여러 유저가 각자의 request 안에서 좋아요 처리해야하니까, 각자의 transaction이 시작됨
  3. 자신의 transaction에선 likeCount가 0이니까 likeCount를 1로 하고 저장
  4. 결론적으로 10개의 쿼리가 다 likeCount를 0 → 1로 업데이트하는 쿼리
  5. likeCount는 1로 남게됨

이를 위한 테스트 작성하고 likeCount가 있는 Comment를 조회할 때 비관적 락을 이용하니까 문제는 발생하지 않는 걸 확인.

하지만 비관적 락 사용시에 데드락 문제는 없는지 등 점검 필요하므로 더 확인해보고 테스트 커밋하겠습니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions