-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Description
Issue 타입
- 리펙토링
상세 내용
현재 findByUserAndRound 메소드에 비관적 락을 걸고 있는데, 이 메소드가 여러 군데에서 호출되고 있다. 그러나 실제로 값을 수정하는 로직은 한 군데 뿐이라, 모든 호출 지점에서 비관적 락을 사용하는 것은 불필요한 락 경합을 초래할 수 있다 판단.
=> 이에 대한 해결방안으로 락 사용을 필요한 곳으로 한정하도록 함.
모든 findByUserAndRound 호출에 비관적 락을 적용하는 대신, 실제로 데이터를 수정하는 메소드에서만 락을 적용하도록 변경하여 락 경합을 피하고, 필요한 경우에만 락을 사용하여 성능을 최적화할 수 있다 생각.
추가적으로, 증복 엔티티 생성이라는 동시성 문제가 생길 우려가 있는 부분을 예방하기 위해 uniqueConstraints(고유 제약 조건)로 데이터베이스 레벨에서 중복 방지.
즉, 비관적 락을 사용하면서 uniqueConstraints를 설정하고, 중복 생성 시 예외를 단순히 로그로만 처리하려는 접근 방식은 데이터 무결성을 유지하면서 동시성 문제를 효과적으로 관리하려고 함.
비관적 락 설명
비관적 락은 데이터에 대한 접근 시 락을 걸어 다른 트랜잭션이 해당 데이터에 접근하거나 수정하지 못하게 한다. 이는 데이터의 일관성을 보장하지만, 동시에 락 경합 증가, 트랜잭션 지연, 리소스 소모 등의 요인들로 인해 성능 저하를 초래할 수 있다.
일정
- 추정 시간: 1 day
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels