# 스프링 트랜잭션 AOP의 동작 흐름
# AOP

- Aspect Oriented Programming
- 어떤 로직을 핵심, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화
# @Transactional
- 요청이 들어오면 트랜잭션 AOP 프록시가 트랜잭션 매니저 획득
- 트랜잭션을 시작하기 위해 트랜잭션 매니저에게 요청
- 데이터 소스를 통해 커넥션을 받아오고 트랜잭션 시작
- 트랜잭션 매니저는 트랜잭션이 시작된 커넥션을 트랜잭션 동기화 매니저에 저장
- 트랜잭션이 종료되는 경우 트랜잭션 매니저는 트랜잭션 동기화 매니저에 보관한 커넥션을 가져와 종료하고 커넥션을 반환하거나 종료
# 트랜잭션 매니저
- JDBC를 사용할 때와 JPA를 사용할 때의 트랜잭션은 서로 다른 양상을 가짐
- 스프링은 개발자가 이를 신경쓰지 않도록 하기 위해 트랜잭션 추상화인
PlatformTransactionManager사용 - 개발자는 상황에 맞게 DataSourceTransactionManager, JpaTransactionManager를 사용 가능
# 트랜잭션 동기화 매니저
- 특정 트랜잭션을 시작한 커넥션이 여러 코드에 걸쳐 사용되어도 이를 유지시켜주기 위함
- 만약 트랜잭션 동기화 매니저가 없다면 다른 코드의 메서드를 실행할 때 마다 커넥션을 인자로 넘겨줘야 함
← 의존성 주입 1. 도메인 모델 시작하기 →