인프런 커뮤니티 질문&답변

요니님의 프로필 이미지
요니

작성한 질문수

재고시스템으로 알아보는 동시성이슈 해결방법

Named Lock 활용해보기

강의의 NamedLockStockFacade의 decrease()에서 @Transactional을 붙인 이유 질문

작성

·

365

0

안녕하세요 강사님.
제가 gpt를 통해 확인한 결과는,
MySQL의 getLock(), releaseLock()은 트랜잭션 상태와는 무관하게 동작할 수 있다는 것이었습니다.

 

또한 NamedLockStockFacade에서 호출하는
StockService.decrease()는 REQUIRES_NEW에 의해
별도의 트랜잭션으로 관리되고 커밋 됩니다.

따라서 StockService.decrease()에 의해 재고가 감소한 후,
NamedLockStockService에서 releaseLock()으로 락을 반환할 때 예외가 터져도,
이미 커밋된 재고감소는 롤백되지 않을 것 같습니다.

그럼에도 NamedLockStockFacade에서 @Transactional을 붙이신 별도의 의도가 있는지 궁금합니다.

답변 2

0

안녕하세요
저는 @Transactional을 붙이지 않아야 테스트 케이스가 성공되더라고요. 오히려 @Transactional 어노테이션을 사용 시 release_lock이 실행되지 않는 모습을 보이고 있어요,
현재 Spring boot 3.x, Mysql 8.x 버전을 사용하고 있습니다.

0

최상용님의 프로필 이미지
최상용
지식공유자

요니님 안녕하세요.
mysql 의 named lock 의 습득과 해제는 동일한 세션에서 이루어져야 합니다.
동일한 세션을 유지하고자 NamedLockStockFacade 에 @Transactional 어노테이션을 붙였습니다.

감사합니다.

요니님의 프로필 이미지
요니

작성한 질문수

질문하기