Skip to content

Conversation

@sgh002400
Copy link
Contributor

변경사항

  • 트랜잭션이 락 임대 시간보다 길게 수행되는 경우 해당 트랜잭션을 롤백 처리하도록 수정

상세내용

  • 최초에는 트랜잭션 처리 중 분산락 만료 시 연장을 통해 롤백 시점까지 유지하려 했으나, Redisson에서는 락 만료 이벤트를 직접 감지할 수 없었습니다. 따라서 Spring의 트랜잭션 timeout 기능을 활용하여, 지정된 시간이 초과되면 트랜잭션을 롤백하고 롤백 완료 후 락을 해제하도록 개선했습니다.
    • WatchDog 기능을 활용하여 분산락 지속 연장
    • AopForTransaction@Transactional 어노테이션 대신 PlatformTransactionManager를 직접 사용함으로써 트랜잭션이 LeaseTime보다 길게 수행되는 경우 해당 트랜잭션을 롤백하고 롤백 완료 시 락을 해제하도록 개선

예시

기존 : A 트랜잭션 수행 도중 분산락 임대 시간 초과로 락 해제되면 B 트랜잭션에서 분산락 획득 및 Dirty Read 발생 가능
현재 : A 트랜잭션 수행 도중 임대 시간 초과되면 분산락을 유지한 상태로 트랜잭션 롤백 수행 -> B 트랜잭션은 락 획득 대기

연관 이슈

@sgh002400 sgh002400 self-assigned this Oct 3, 2025
@sgh002400 sgh002400 merged commit 8c87515 into dev Oct 3, 2025
1 check failed
@sgh002400 sgh002400 deleted the feat/#45-락-만료시-트랜잭션-롤백 branch October 3, 2025 13:39
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.

[FEAT] 락 만료 시 트랜잭션 롤백 처리

2 participants