스프링이 제공하는 트랜잭션 매니저는 크게 2가지 역할을 한다. 1) 트랜잭션 추상화 2) 리소스 동기화
리소스 동기화
트랜잭션을 유지하려면 트랜잭션의 시작부터 끝까지 같은 데이터베이스 커넥션을 유지해아한다. 결국 같은 커넥션을 동 기화(맞추어 사용)하기 위해서 이전에는 파라미터로 커넥션을 전달하는 방법을 사용했다. 파라미터로 커넥션을 전달하는 방법은 코드가 지저분해지는 것은 물론이고, 커넥션을 넘기는 메서드와 넘기지 않는 메 서드를 중복해서 만들어야 하는 등 여러가지 단점들이 많다.
커넥션과 세션
트랜잭션 매니저와 트랜잭션 동기화 매니저
- 스프링은 트랜잭션 동기화 매니저를 제공한다. 이것은 쓰레드 로컬(`ThreadLocal` )을 사용해서 커넥션을 동기화해준다. 트랜잭션 매니저는 내부에서 이 트랜잭션 동기화 매니저를 사용한다.
- 트랜잭션 동기화 매니저는 쓰레드 로컬을 사용하기 때문에 멀티쓰레드 상황에 안전하게 커넥션을 동기화 할 수 있다. 따라서 커넥션이 필요하면 트랜잭션 동기화 매니저를 통해 커넥션을 획득하면 된다. 따라서 이전처럼 파라미터로 커넥션을 전달하지 않아도 된다.
동작 방식
1. 트랜잭션을시작하려면커넥션이필요하다. 트랜잭션매니저는데이터소스를통해커넥션을만들고트랜잭션을 시작한다.