개발공부/JAVA Spring
Spring @Transactional 이란?
bzerome240
2023. 1. 22. 12:48
스프링 트랜잭션 처리 @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
반응형