작성
·
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 어노테이션을 붙였습니다.
감사합니다.