Spring 의 핵심 개념 중 하나인 AOP
기술을 활용한 예 중 하나로, Spring에선 Spring AOP
방식으로 동작한다.
메서드나 클래스에 어노테이션을 붙이면 해당 메서드 또는 클래스의 작업들을 하나의 트랜잭션으로 관리하겠다는 의미이다.
그렇다면 AOP 가 무엇일까? AOP 에 대해 잠시 알아보자.
Aspect Object Programming
으로 관점 지향 프로그래밍 방법이다. 관심사의 분리라고도 말하며, 기존 OOP의 단점을 보완한 방식이다. 여러 클래스 사이에 공통적으로 포함되어있는 로그, 트랜잭션, 예외 처리 코드등 부가 기능을 비지니스 로직과 분리하여 관리하는 방식이다. 그로 인해 비지니스 로직은 비지니스 로직에 초점을 맞출 수 있고, 코드의 중복을 줄일 수 있으며, 유지 보수를 원활하게 할 수 있다.
AOP 에 대해 간단히 알아보았으니 본격적으로 @Transactional 의 동작 과정
에 대해 알아보자
@Transactional 은 Spring AOP
방식으로 동작한다. 그리고 Spring AOP 방식은 프록시 패턴을 활용한다. 프록시 패턴
을 활용하는 이유는 Target 에 코드를 추가하지 않고, 부가 기능을 추가할 수 있기 때문이다.
동적 프록시 생성 방법 : JDK Proxy 와 CGLIB (아래 참고)
위 설명을 그림으로 표현하면 아래 그림과 같다고 볼 수 있다.
JDBC 에서 트랜잭션을 실행하는 코드이다. @Transactional 도 내부적으론 아래와 같은 코드를 실행한다.
Connection connection = dataSource.getConnection();
try (connection) {
connection.setAutoCommit(false);
// DB 작업
connection.commit();
} catch (SQLException e) {
connection.rollback();
}
동적 프록시 객체를 생성하는 방법은 2가지가 있다. Spring 은 JDK Proxy 를 기본으로 사용하고, Spring Boot 는 CGLib 방식을 기본으로 사용한다.
Target 의 상위 인터페이스를 상속 받아 프록시를 생성하며 다음과 같은 특징을 가진다.
Target 을 상속 받아 프록시를 생성하며 다음과 같은 특징을 가진다.
https://blogshine.tistory.com/291
https://jeong-pro.tistory.com/228
https://minkukjo.github.io/framework/2021/05/23/Spring
이런 유용한 정보를 나눠주셔서 감사합니다.