Jdbc, JPA 모두 트랜잭션 처리를 따로 하고있다.
Jdbc로 구현된 소스를 JPA로 변경하고 싶다면, 변경해야 하는 코드가 많아진다.
스프링에서는 트랜잭션 처리를 추상화하여 TransactionManager라는 것을 만들고 Jdbc, JPA 등등 이를 활용해 처리할 수 있게 되었다.
또 트랜잭션을 동기화 해서 처리할 수 있도록 TransactionSynchronizationManager 라는 것이 있다. ThreadLocal을 사용해 구현되었다.
트랜잭션을 release()
했을 때 TransactionSynchronizationManager가 관리하고 있으면 close()
하지 않는다.