트랜잭션을 관리해주는 기능입니다.선언적 트랜잭션 처리라고 부르며 반대로 프로그래밍을 통해 트랜잭션을 처리하는 프로그래밍적 트랜잭션 처리가 있습니다.스프링 컨테이너와 스프링 AOP를 사용하지 않아도 되지만 선언적 트랜잭션 처리가 훨씬 간편하고 실용적이어서 저는 선언적 트랜잭션 처리를 사용하고 있습니다.
프록시 객체로 관리됩니다.클라이언트들은 프록시 객체를 주입받고 사용하게 됩니다.트랜잭션 매니저를 호출합니다.커넥션을 생성한 다음 트랜잭션을 시작(auto commit = false)하고 생성한 커넥션을 트랜잭션 동기화 매니저에 보관하게 되는데요, DB에 접근이 필요한 경우 트랜잭션 동기화 매니저에 보관된 커넥션을 꺼내서 사용하게 됩니다.ThreadLocal을 사용하여 커넥션을 관리합니다.동일한 스레드가 ThreadLocal에 담긴 데이터를 꺼낸다면 동일한 데이터를 반환합니다.동일한 스레드에서 커넥션을 조회하면 동일한 커넥션을 반환하도록 구현되어 있습니다.