일어날 수 있는 두 개의 케이스
(경기 정보를 수정할 때, end가 들어가면 게임이 끝난 처리가 됨, 점수도 경기 정보 수정 프로세스에서 처리)
케이스 A: 동시 점수 수정
- 트랜잭션 A: homeScore = 2 , awayScore = 3
- 트랜잭션 B: homeScore = 3, awayScore = 1
- 마지막 커밋이 이김 → lost update
- 이 될 경우, 마지막 커밋이 이기는 문제가 발생했으며, 이를 막기 위해 락을 적용하고, 어떤 Lock을 적용하는 것인지 테스팅 및 이론적 비교로 선택했습니다.
케이스 B: 동시 END 전환
- A, B 둘 다
prevStatus = PROGRESS
- 둘 다
status = END
- 둘 다
!prevStatus.isEnded() 조건 통과
- 이 경우, Kafka 이벤트 2번 발행 가능
현재 직면한 문제 : 락이 없어서 “과거 상태를 동시에 봄”
결과 ⇒ 비관적 락을 적용함