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

fix: 분산락 동시성 문제 해결 #107

Merged
merged 8 commits into from
Dec 15, 2024
Merged

Conversation

kimyu0218
Copy link
Collaborator

@kimyu0218 kimyu0218 commented Dec 12, 2024

Issue Number

close: #

작업 개요

하루에 여러 번 미션 인증 방지 (#96)

+) MissionJoinEvent 수정

작업 사항

  • 지난 번에 분산락을 이용해서 INSERT가 여러 번 일어나는 것을 막고자 했지만 같은 오류가 발생했습니다.
  • 로그를 확인한 결과, 분산락 획득/습득은 순차적으로 이루어지고 있었습니다.
  • 트랜잭션 로그를 활성화 시켰더니 트랜잭션 시작 - 분산락 획득 - 분산락 반환 - 트랜잭션 커밋 순서로 이루어졌습니다.
  • 다음 그림과 같은 상황이 발생할 수 있다고 판단하여 @Order를 통해 분산락 획득 - 트랜잭션 시작 - 트랜잭션 커밋 - 분산락 반환이 이루어지도록 만들었습니다.

image

고민한 점들(필수 X)

분산락을 위한 트랜잭션을 하나 더 만들까 했다가 지금도 미션 인증할 때 시간이 많이 소요되어서 (뺑글이 많이 돌아감) 지양하는 것이 좋다고 판단했습니다....!

스크린샷(필수 X)

여기에 작성하세요

@kimyu0218 kimyu0218 requested a review from songyi00 as a code owner December 12, 2024 14:58
@kimyu0218 kimyu0218 changed the title fix: 분산락 동시성 문제 수정 fix: 분산락 동시성 문제 해결 Dec 12, 2024
import org.springframework.stereotype.Component;

@Order(Ordered.HIGHEST_PRECEDENCE)
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

명시적으로 락을 반환하려고 TransactionSynchronization을 활용하려고 했는데 순서가 보장되는 것 같아 @Order 어노테이션만 추가했습니다...!

joinPoint.proceed() 전후에 afterCompletion을 구현해봤는데 다음 문제들이 발생했습니다.

  • 전 : 시작된 트랜잭션이 없어서 에러 발생
  • 후 : 이미 joinPoint.proceed()에서 트랜잭션이 끝났기 때문에 afterCompletion 내부의 락 반환 로직을 타지 않음

Copy link
Member

@songyi00 songyi00 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생했숩니당

@kimyu0218 kimyu0218 merged commit f20a492 into develop Dec 15, 2024
1 check passed
@kimyu0218 kimyu0218 deleted the fix/#96-distributed-lock branch December 15, 2024 04:43
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.

2 participants