트랜잭션을 서비스 계층에 적용하면 여러거자 문제가 있었다.
jdbc에서 다른 데이터 접근 기술을 사용할 때, jdbc -> jpa 모든 트랜잭션 코드를 수정하는 것이 아닌, interface를 만들어서 부품을 교체하듯이 기술을 교체하면 된다.
spring은 이런 개발자의 고민을 해결해주는 interface를 구현해 놓았다.
public interface platformTfansactionManager extends TransactionManger
스프링에서는 platformTfansactionManager를 만들고 TransactionManager를 상속받아 구현체만(데이터 접근 기술) 갈아끼면 된다.
트랜잭션을 유지하기 위해서 같은 connection를 우리는 파라미터로 계속 전달해 주었다. 파라미터로 전달하지 않고 해결하는 방법을 스프링에서 트랜잭션 동기화 매니저라는 것을 제공한다. 트랜잭션 동기화 매니저란 무엇인가? 우선 트랜잭션 동기화 동작 방식에 대해서 설명하겠다.
트랜잭션이 시작될려면 커넥션이 필요하다. 트랜잭션 매니져는 Connection를 만들고 트랜잭션을 시작한다. 그리고 트랜잭션 매니져는 시작된 connection를 동기화 매니져에게 보관시킨다. db는 트랜잭션 동기화 매니져에 보관된 connection를 사용하기에, 비지니스 로직에서 connection를 파라미터로 전해줄 필요가 없어졌다.
트랜잭션이 종료되면 트랜잭션 매니져는 동기화 매니져에 보관된 connection를 종료하고 닫는다.