generated from GSM-MSG/MSG-Repository-Generator
-
Notifications
You must be signed in to change notification settings - Fork 0
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
홈베이스 예약 비관적 락 적용 #240
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Closed
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
💡 개요
홈베이스 예약 비관적 락 적용
synchronized (암시적 락)
한 유저가 syncronized 메서드를 사용 중이면, 다른 유저가 접근하려는 레코드가 다르더라도 대기해야한다.
여러대의 프로세스가 접근하는 것은 막을 수 없다. 즉 서버가 여러대일 때, 여러대의 프로세스가 접근하는 것은 막을 수 없다는 것이다. Syncronized 키워드는 자바 코드 레벨에 존재하는 것이기 때문에, 여러 서버에 Syncronized 키워드가 각각 존재하게 될 것이다. 각 Syncronized 키워드는 그 서버 안에서만 여러 스레드가 접근하는 것을 막아줄 수 있는 것이다.
Transactional annotation과 같이 사용 시, 데이터 정합성을 보장 할 수 없다.
이 때 execute 메서드가 종료되고 트랜잭션이 커밋하기 전 시점에(5 ~ 6 사이에), 대기하고 있던 다른 스레드가 execute 메서드에 들어와서 작업을 진행해버릴 수도 있기 때문이다.
낙관적 락
데이터 경합이 별로 발생하지 않을 것이라고 볼 때 사용하는 락이다. 만약 경합이 많이 발생하는 기능이라면, 그만큼 불필요한 rollback이 자주 일어날 것이다. 이는 곧 성능 저하로 이어진다.
결론
위와 같은 이유로 비관적 락을 채택하여 동시성 제어를 하였습니다.