Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Tracked by #190
melonturtle opened this issue Mar 10, 2024 · 0 comments
Open
Tracked by #190

Comments

@melonturtle
Copy link
Contributor

melonturtle commented Mar 10, 2024

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

  • 동시에 여러 유저가 댓글에 좋아요하면 각자 트랜잭션 시작하고나서 다른 트랜잭션에서 좋아요 개수 바뀐건 자신의 트랜잭션 내에서 모르기때문에 발생하는 이슈
    • 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를 조회할 때 비관적 락을 이용하니까 문제는 발생하지 않는 걸 확인.

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant