스프링,스프링부트

@Transactional

JUN0126 2023. 8. 26. 17:58

@Transactional 이란?

- 서비스에서 사용되는 DB접근 기술 마다 Transaction을 관리해주는 방법이 다른데 이를 추상화하여 Spring AOP 기능을 통하여 

Transaction을 관리하는 Spring의 트랜잭션 통합 관리 기능 

- Transaction 관리 방법을 Bean으로 등록하여서 AOP를 이용하여 DB접근 기술에 Transaction을 지정해주는 방법을 최상단에서 관리하는 것을 선언적 트랜잭션 (declarative transction) 이라고 한다. 이와 반대로 개별적으로 DB접근 기술을 직접 코드 안에서 사용하는 방법은 프로그램에 의한 트랜잭션 ( programmatic transaction) 이라고 한다.

 

@Transactional 사용 방법

- DB 접근 방법에 따른 TransactionManager를 Bean으로 등록하고 사용해야 한다

     -  @EnableTransactionManagement를 Config Class에 선언하여주고 해당 클래스 내부에 TransactionManager 가 구현된

          구현체를 선언하여 Bean으로 등록해야 선언한 Transaction 정책에 대한 @Transactional을 사용할 수 있다

 

DB 접근별 사용되는 TransactionManager 인터페이스의 구현체

PlatformTransactionManager (명령형 트랜잭션)

  • JPA
  • JDBC

ReactiveTransactionManager (반응형 트랜잭션)

  • R2DBC

 

 

@Transactionl 동작 과정

- @Transactional을 메소드 또는 클래스에 명시하면, AOP를 통해 타겟이 상속하고 있는 인터페이스 또는 타겟을 상속한 프록시 객체가 생성된다. 이때 프록시 객체의 메소드를 호출하면 타겟 메소드 전 후로 트랜잭션 처리를 수행한다.

 

Read, Write DB를 사용하는데 TransactionManager를 사용하면서 DB별 TransactionManager 설정 방법??? 

 

 

Transaction 이란 무엇인가?

https://jun0126.tistory.com/152

 

[DB] 트랜잭션 및 트랜잭션의 격리 수준

많은 데이터를 다루고 싶어 했던 내가 막상 트랜잭션의 원리만 이해하고 더 깊게 파보지 못했던 트랜잭션의 격리 수준을 공부하거나 생각해본 경험이 없기에 이러한 용어들을 알게 되어 글을

jun0126.tistory.com

 

 

 

 

참고: https://mangkyu.tistory.com/170

'스프링,스프링부트' 카테고리의 다른 글

Servlet의 이해  (0) 2021.12.05
람다식 (Lambda)  (0) 2021.07.10
DAO, DTO, VO, Entity  (0) 2021.06.30
SpringBoot를 이용한 Rest API -1  (0) 2020.07.02
6/7 스프링가이드 정리  (0) 2020.06.07