Skip to content

[REFACTOR] 락 사용을 필요한 곳으로 한정 #147

@persi0815

Description

@persi0815

Issue 타입

  • 리펙토링

상세 내용

현재 findByUserAndRound 메소드에 비관적 락을 걸고 있는데, 이 메소드가 여러 군데에서 호출되고 있다. 그러나 실제로 값을 수정하는 로직은 한 군데 뿐이라, 모든 호출 지점에서 비관적 락을 사용하는 것은 불필요한 락 경합을 초래할 수 있다 판단.

=> 이에 대한 해결방안으로 락 사용을 필요한 곳으로 한정하도록 함.
모든 findByUserAndRound 호출에 비관적 락을 적용하는 대신, 실제로 데이터를 수정하는 메소드에서만 락을 적용하도록 변경하여 락 경합을 피하고, 필요한 경우에만 락을 사용하여 성능을 최적화할 수 있다 생각.

추가적으로, 증복 엔티티 생성이라는 동시성 문제가 생길 우려가 있는 부분을 예방하기 위해 uniqueConstraints(고유 제약 조건)로 데이터베이스 레벨에서 중복 방지.

즉, 비관적 락을 사용하면서 uniqueConstraints를 설정하고, 중복 생성 시 예외를 단순히 로그로만 처리하려는 접근 방식은 데이터 무결성을 유지하면서 동시성 문제를 효과적으로 관리하려고 함.

비관적 락 설명

비관적 락은 데이터에 대한 접근 시 락을 걸어 다른 트랜잭션이 해당 데이터에 접근하거나 수정하지 못하게 한다. 이는 데이터의 일관성을 보장하지만, 동시에 락 경합 증가, 트랜잭션 지연, 리소스 소모 등의 요인들로 인해 성능 저하를 초래할 수 있다.

일정

  • 추정 시간: 1 day

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