일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 카프카
- Axon framework
- Kafka
- JPA공부
- 코테공부
- Flutter
- 코테준비
- 프로그래머스
- querydsl
- 스프링공부
- K8S
- JPA예제
- JPA 공부
- 기술공부
- DDD
- JPA
- 자료구조공부
- 플러터 개발
- 스프링부트공부
- 플러터 공부
- nestjs
- 스프링부트
- 스프링
- 자바공부
- nestjs스터디
- 기술면접공부
- nestjs공부
- 스프링 공부
- 알고리즘공부
- JPA스터디
- Today
- Total
DevBoi
[Spring] Transactional 본문
1. 정의
비즈니스 로직이 트랜잭션 처리를 필요로 할때 트랜잭션 처리 코드가 비즈니스 로직과 공존한다면,
코드 중복이 발생, 비즈니스 로직에 집중 또한 힘들어진다.
@Transactional은 이러한 문제를 해결해주는 Spring이 제공하는 어노테이션으로 트랜잭션을 메서드 또는 클래스에
명시하게 되면, 특정 메서드 또는 클래스가 제공하는 모든 메서드에 대해 내부적으로 AOP를 통해 트랜잭션 처리코드가 전후로 수행된다.
Transactional은 두가지 방식으로 처리가된다
-Jdk dynamic Proxy (interface 구현 필요, 해당 인터페이스를 추상메서드로 오버라이딩해서 프록시 객체를 런타임시, dynamic하게 생성)
-CGLIB (인터페이스없는 타겟을 상속받아서, 프록시 객체를 만든다. 바이트코드 조작 라이브러리이다.)
스프링 부트는 타겟 프록시가 디폴트로 true이기때문에 전부 CGLIB형태로 프록시 객체를 생성한다.
작동원리
Transactional은 Spring AOp 기반으로 동작한다. 프록시 객체를 통해 기능을 수행한다.
트랜잭션 작동원리를 알려면,
JDBC가 트랜잭션을 다루는 방법에 대해서 먼저 알아야한다.
데이터베이스를 쓰려면 연결부터 해야한다.
연결을 하고, autoCommit을 세팅해주거나, 안해주거나 commit을 하거나 등등을 설정할 수있다.
스프링에서 Transactional에 대한 동작 과정은 이렇다
-우선 Transactional은 Spring Aop기반으로 동작한다.
-해당 어노테이션이 적용되면, 트랜잭션 처리를 프록시 객체에 위임한다.
-타겟 객체를 상속하여 내부적으로 target메소드 전후로 트랜잭션 처리를 수행한다.
(커넥션을 가져와서, 트랜잭션을 맺고, 커밋을 하던 롤백을 하던한다.)
-같은 클래스 내에서, 내부 메소드 호출시 트랜잭션 관리가 되지않는다.
-private 메소드에는 사용 불가하다
'Develop > [Spring]' 카테고리의 다른 글
[Spring] Dao와 repository 차이 (0) | 2022.03.28 |
---|---|
[Spring] Hikari란 (0) | 2022.03.28 |
[Spring] RequestBody, RequestParam, ModelAttribute (0) | 2022.03.28 |
[Spring] root, servlet context, web.xml (0) | 2022.03.28 |
[Spring] Maven 이란 (0) | 2022.03.28 |