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