@Transaction 은?
스프링에서 제공하는 트랜잭션 중 하나로
내부적으로는 Spring AOP를 사용하며 선언적 트랜잭션 이라고도 한다.
사용된 디자인 패턴은?
프록시 패턴 (Proxy Pattern)
어떤 객체에 대한 기능을 대신 수행하는 대리 객체를 사용하는 개발 패턴이다.
AOP 핵심만!
- Dynamic Proxy
- Java 리플렉션을 사용하고 proxy 클래스를 통해 프록시 객체를 생성 (트랜잭션 전 처리 -> 비즈니스 로직 실행 -> 트랜잭션 후 처리)를 위임하고 프록시 객체는 런타임 시점에 동적으로 생성된다.
- CGLib
- 리플랙션 대신에 바이트코드를 생성 프레임워크를 사용하여 런타임 시점에 프록시 객체를 만든다.
- Dynamic Proxy 와 다른 방법을 사용하여 인터페이스가 없으면 프록시 객체 생성을 하지 못하는 문제를 해결함
주의할 점!
- private 메소드에는 사용불가
- 객체를 상속 받을 수 없기 때문에 프록시 객체를 사용할 수 없어 트랜잭션 적용되지 않음
- 트랜잭션이 선언되지 않는 메소드에서 트랜잭션이 선언된 메소드 호출
- 트랜잭션 범위에서 실행이 되지 않기 때문에 트랜잭션이 적용 되지 않음
알게 된 것!
리플랙션이란? (객체 구조 탐색)
구체적인 클래스 타입을 알지 못해도, 컴파일된 자바 바이트 코드를 이용하여 역으로 클래스에 대한 정보를 알아내어, 클래스를 사용할 수 있는 기법을 말한다.
참조
https://velog.io/@pond1029/transactional
@Transactional
Spring annotation @Transactional
velog.io
https://www.youtube.com/watch?v=n85UzIReFjY
https://hwannny.tistory.com/98
@Transactional 동작 원리
들어가며 해당 포스팅은 Spring boot 2.2.0.RELEASE 환경에서 진행됐다. @Transactional이란? 비즈니스로직이 트랜잭션 처리를 필요로할 때 트랜잭션 처리 코드가 비즈니스 로직과 공존한다면 코드 중복이
hwannny.tistory.com
'Back-End > Java' 카테고리의 다른 글
JAVA 9 ~ JAVA16 달라진점 (0) | 2021.09.11 |
---|