본문 바로가기
Spring/DB연동

@Transactional 붙은 메소드

by doriver 2025. 4. 15.

 

1. @Transactional이 붙은 메소드를 호출하면
2. 스프링 AOP 프록시가 메소드를 가로챔
3. 트랜잭션 매니저(PlatformTransactionManager)를 통해 DB 커넥션을 얻고 begin()을 호출해서 트랜잭션을 시작
4. 메소드가 정상적으로 완료되면 commit()을 호출하여 트랜잭션을 커밋
5. 예외(Exception)가 발생하면 rollback()을 호출하여 트랜잭션을 롤백
rollbackFor, noRollbackFor 등으로 어떤 예외에 롤백할지 지정할 수 있다.

 


스프링은 @Transactional을 적용할 때, 해당 클래스에 **프록시 객체(대리 객체)**를 만들어서 트랜잭션을 처리
스프링의 트랜잭션은 프록시 객체를 통해 작동하므로, 프록시를 거쳐야만 동작

같은 클래스 내부에서 메소드를 호출하면 트랜잭션이 적용되지 않을 수 있다
이를 피하려면 트랜잭션이 필요한 메소드를 별도 서비스 클래스로 분리하는 게 가장 일반적인 방법