-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
먼저 슬랙에서 제가 말했던 것처럼,
- 동시에 여러 유저가 댓글에 좋아요하면 각자 트랜잭션 시작하고나서 다른 트랜잭션에서 좋아요 개수 바뀐건 자신의 트랜잭션 내에서 모르기때문에 발생하는 이슈
- MySQL의 기본 Transaction Isolation Level이
READ REPEATABLE이니까
- MySQL의 기본 Transaction Isolation Level이
예를 들어 아래와 같은 상황이 일어날 수 있다.
유저가 10명이라고 치면 좋아요를 10명이했으니까 likeCount가 10이어야하는데
- likeCount가 0일때 유저가 다 좋아요 누름
- 여러 유저가 각자의 request 안에서 좋아요 처리해야하니까, 각자의 transaction이 시작됨
- 자신의 transaction에선 likeCount가 0이니까 likeCount를 1로 하고 저장
- 결론적으로 10개의 쿼리가 다 likeCount를 0 → 1로 업데이트하는 쿼리
- likeCount는 1로 남게됨
이를 위한 테스트 작성하고 likeCount가 있는 Comment를 조회할 때 비관적 락을 이용하니까 문제는 발생하지 않는 걸 확인.
하지만 비관적 락 사용시에 데드락 문제는 없는지 등 점검 필요하므로 더 확인해보고 테스트 커밋하겠습니다.
Metadata
Metadata
Assignees
Labels
No labels