위 사진을 올린건 트랜잭션을 사용하기위해선 트랜잭션 매니저가 필요한데 DataSourceTransactionManager를 주입 받으면 만약 JpaTransactionManager나 다른 TransactionManager로 갈아끼우게 될때 코드를 수정해야한다. 하지만 스프링에서 제공하는 PlatformTransactionManager를 사용하면 다른 TransactionManager로 바뀌어도 코드를 수정하지 않아도 된다. OCP를 지킬수 있다. 그러면 어떻게 PlatformTransactionManager를 사용할 수 있을까?
선언적 트랜잭션 관리와 프로그래밍 방식 트랜잭션 관리가 있다.
프로그래밍 방식의 트랜잭션 관리는 트랜잭션 매니저 또는 트랜잭션 템플릿 등을 사용해서 트랜잭션 관련 코드를 직접 작성한다.
그런데 이방식은 잘 사용하지 않는다고 해서 자세히 보진 않았다.
대부분 선언적 트랜잭션을 사용하는데 필요한 클래스나 메소드레벨에 @Transactional을 붙여주면 된다.
그럼 기본적으로 프록시 방식의 AOP가 적용된다.
프록시가 적용된 모습이다.
클라이언트에서 요청이 들어오면(@Transactional이 걸려있는 메소드를 호출하면) 프록시가 호출되고 트랜잭션 매니저가 실행되면서 트랜잭션이 시작되고 트랜잭션 동기화 매니저에 커넥션을 보관한다. 그리고 실제 서비스를 호출하고 repository.save(member)같은 데이터 접근 로직이 실행되면 트랜잭션 동기화 매니저에 있는 커넥션을 획득한다.
작업이 끝나게 되면 획득한 커넥션을 커넥션풀에 반납하게 된다.
'스프링DB' 카테고리의 다른 글
스프링 트랜잭션 내부 호출시 발생하는 문제 (0) | 2023.06.01 |
---|---|
트랜잭션 전파 (0) | 2022.09.16 |
트랜잭션 AOP 주의 사항 (0) | 2022.09.14 |
트랜잭션 매니저 선택 (0) | 2022.09.14 |
JPQL (0) | 2022.09.01 |