본문 바로가기
개발공부/JAVA Spring

Spring @Transactional 이란?

by bzerome240 2023. 1. 22.

 

스프링 트랜잭션 처리 @Transactional


스프링 AOP (관점 지향 프로그래밍) 기반 기능


1 @Transactional이 포함된 메소드가 호출되면

2 프록시 객체를 생성

3 트랜잭션 생성 및 커밋 또는 롤백 후 트랜잭션 닫는 작업을 프록시 객체에게 위임한다.

 

스프링 AOP 기반으로 하는 기능들 (@Transactional, @Cacheable, @Async) 사용시 self invocation 문제로 인하여 장애가 발생할 수 있다

 


self invocation 해결 방법

방법 1. 트랜잭션 위치를 외부에서 호출하는 bar() 으로 이동

방법 2. 객체의 책임을 최대한 분리하여 외부 호출 하도록 리팩토링

 

Spring Transactional 주의사항

@Transactional(readOnly = true)

트랜잭션을 읽기 전용으로 설정하면 JPA에서 스냅샷 저장 및 Dirty Checking 작업을 수행하지 않는다.
=> 성능적으로 도움이된다.

 

클래스보다 메소드가 우선순위가 높다.

SimpleJpaRepository - 클래스에 @Transactional(readOnly=true) 적용해놓고 업데이트가 발생하는 메소드에만 readOnly=false 우선 적용

728x90
반응형

댓글