• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

24.03.14 18:18 작성 조회수 146

0

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

 

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

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

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

답변 2

·

답변을 작성해보세요.

0

yb__char님의 프로필

yb__char

2024.04.11

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

0

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

감사합니다.