| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
- Selection Sorting
- JSON
- coding test
- stream
- 메모리구조
- buffer
- Serialization
- 이스케이프 문자
- 혼자 공부하는 C언어
- list 컬렉션
- 알기쉬운 알고리즘
- s
- 이것이 자바다
- Stack
- Graph
- 윤성우의 열혈 자료구조
- C programming
- C 언어 코딩 도장
- R
- Algorithm
- insertion sort
- 윤성우 열혈자료구조
- datastructure
- Today
- Total
Engineering Note
[Spring] @Transactional 어노테이션과 Spring AOP의 관계 본문
[Spring] @Transactional 어노테이션과 Spring AOP의 관계
Software Engineer Kim 2025. 10. 7. 23:48본 글은 Spring의 핵심인 AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)를 학습하면서 @Transactional 어노테이션이 AOP의 대표적인 사례로 볼 수 있음을 알고 두 개념의 관계를 살펴보면서 각 개념을 더 깊이 이해하기 위한 목적으로 작성한 글입니다.
@Transactional 어노테이션과 Spring AOP의 관계
@Transactional은 **Spring AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍)** 개념이 적용된 대표적인 예시입니다.
Spring은 AOP를 활용하여 개발자가 **비즈니스 로직(핵심 관심사)**과 **트랜잭션 처리(Commit/Rollback 등 부가 기능, 횡단 관심사)**를 분리할 수 있도록 지원합니다.
Spring의 AOP 기능이 없었다면 transaction 처리가 필요한 서비스 메서드 코드에서 중복되는 코드가 매번 발생합니다.(DB 커넥션을 획득하고, 트랜잭션 시작을 알리고, 실패시 롤백처리하는 코드 중복)
1. AOP를 통한 @Transactional 동작 원리
@Transactional이 붙은 메서드가 호출되면, Spring AOP는 다음과 같은 단계로 트랜잭션을 처리합니다.
1) 프록시 객체 생성
Spring IoC 컨테이너는 @Transactional이 선언된 Bean에 대해 원본 객체를 감싸는 **프록시 객체(Proxy Object)**를 생성합니다.
이 프록시가 트랜잭션 처리를 위한 진입점 역할을 합니다.
2) 호출 가로채기 (Interception)
클라이언트가 실제 비즈니스 메서드(예: OrderService.saveOrder())를 호출하면,
실제 객체가 아니라 프록시 객체가 호출을 먼저 가로챕니다.
3) 트랜잭션 부가 로직 수행 (Advice)
프록시 객체는 호출 전후로 다음과 같은 **부가 기능(Advice)**을 삽입합니다.
| 시점 | 동작 | 설명 |
| @Before | 트랜잭션 시작 (Transaction Begin) | 트랜잭션 매니저를 통해 Connection을 획득하고 트랜잭션을 시작합니다. |
| @Around | 실제 비즈니스 로직 실행 | 핵심 로직(서비스 메서드)을 수행합니다. |
| @AfterReturning | 트랜잭션 커밋 (Commit) | 메서드가 정상적으로 종료되면 커밋합니다. |
| @AfterThrowing | 트랜잭션 롤백 (Rollback) | RuntimeException 또는 Error 발생 시 롤백합니다. |
이 과정을 통해 개발자는 try-catch 문을 직접 작성하지 않아도
단지 @Transactional 어노테이션 하나만으로 **선언적 트랜잭션(Declarative Transaction)**을 구현할 수 있습니다.
2. AOP 관점에서의 구성 요소 정리
| 역할 | AOP | 용어 설명 |
| 트랜잭션 처리 로직 | Aspect (관점) | 트랜잭션 관리라는 횡단 관심사 전체 |
| @Transactional이 붙은 메서드 | Pointcut (포인트컷) | 부가 기능(Advice)이 적용될 지점 |
| Commit/Rollback 로직 | Advice (어드바이스) | 트랜잭션 시작, 커밋, 롤백을 수행하는 코드 |
| Service 클래스 | Target (타겟) | 실제 트랜잭션 부가 기능이 적용될 대상 객체 |
3. 동작 구조 요약 (흐름도)
Client
↓ (메서드 호출)
Proxy Object (@Transactional 감지)
↓
[AOP Advice]
├─ Transaction Begin
├─ Actual Service Logic 실행
├─ Commit (성공 시)
└─ Rollback (예외 시)
이처럼 Spring은 AOP 프록시 기반의 트랜잭션 처리 구조를 통해 트랜잭션 관리 코드를 비즈니스 로직으로부터 분리시켜, 보다 명확하고 유지보수성 높은 코드를 구현할 수 있게 합니다.
'Server > Spring' 카테고리의 다른 글
| [Spring] CommandLineRunner (0) | 2025.10.22 |
|---|---|
| [Spring] Spring Boot 프로젝트 생성시 사용 되는 개념 (0) | 2025.10.08 |
| [Spring] 의존성 주입(DI)과 테스트의 관계 (0) | 2025.10.01 |
| [Spring] Static Resource 경로 설정하기 (0) | 2025.09.15 |
| [Spring] @RequestParam (0) | 2025.09.15 |