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

홈베이스 예약 비관적 락 적용 #240

Merged
merged 15 commits into from
Mar 28, 2024

Conversation

JuuuuHong
Copy link
Contributor

@JuuuuHong JuuuuHong commented Mar 28, 2024

💡 개요

홈베이스 예약 비관적 락 적용

synchronized (암시적 락)

  1. 한 유저가 syncronized 메서드를 사용 중이면, 다른 유저가 접근하려는 레코드가 다르더라도 대기해야한다.

  2. 여러대의 프로세스가 접근하는 것은 막을 수 없다. 즉 서버가 여러대일 때, 여러대의 프로세스가 접근하는 것은 막을 수 없다는 것이다. Syncronized 키워드는 자바 코드 레벨에 존재하는 것이기 때문에, 여러 서버에 Syncronized 키워드가 각각 존재하게 될 것이다. 각 Syncronized 키워드는 그 서버 안에서만 여러 스레드가 접근하는 것을 막아줄 수 있는 것이다.

  3. Transactional annotation과 같이 사용 시, 데이터 정합성을 보장 할 수 없다.

    1. 트랜잭션 시작
    2. ReserveHomeBaseUseCase 클래스의 execute 메서드 실행 (다른 스레드 접근 불가)
    3. reservation 값 변경
    4. execute 메서드 종료 (다른 스레드 접근 가능)
    5. 트랜잭션 종료 및 커밋

    이 때 execute 메서드가 종료되고 트랜잭션이 커밋하기 전 시점에(5 ~ 6 사이에), 대기하고 있던 다른 스레드가 execute 메서드에 들어와서 작업을 진행해버릴 수도 있기 때문이다.

낙관적 락

데이터 경합이 별로 발생하지 않을 것이라고 볼 때 사용하는 락이다. 만약 경합이 많이 발생하는 기능이라면, 그만큼 불필요한 rollback이 자주 일어날 것이다. 이는 곧 성능 저하로 이어진다.

결론

위와 같은 이유로 비관적 락을 채택하여 동시성 제어를 하였습니다.

@JuuuuHong JuuuuHong self-assigned this Mar 28, 2024
@JuuuuHong JuuuuHong linked an issue Mar 28, 2024 that may be closed by this pull request
@JuuuuHong JuuuuHong merged commit f47da35 into master Mar 28, 2024
1 check passed
@JuuuuHong JuuuuHong deleted the 213-add/reserve-home-base-concurrency branch March 28, 2024 23:03
@JuuuuHong JuuuuHong changed the title 213 홈베이스 예약 비관적 락 적용 홈베이스 예약 비관적 락 적용 Sep 14, 2024
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

Successfully merging this pull request may close these issues.

홈베이스 예약 동시성 제어
1 participant