본문 바로가기

Back-End/Java

@Transactional 간단한 정리

@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