정의

멀티쓰레드 상황에서도 안전하게 커넥션을 동기화해주는 매니저

TransactionSynchronizationManager

목적 및 특징

목적

Transaction을 유지하려면 Transaction의 시작부터 끝까지 같은 데이터베이스 커넥션을 유지해야한다.

이에, 같은 커넥션을 동기화(맞추어 사용)하기 위해서 이전에는 파라미터로 커넥션을 전달하는 방법을 사용했다.

하지만, 파라미터로 커넥션을 전달하는 방법은 코드가 지저분해지는 것은 물론이고, 커넥션을 넘기는 메서드와 넘기지 않는 메서드를 중복해서 만들어야 하는 등 여러가지 단점들이 많다.

Transaction 동기화 매니저를 통해 위의 단점들을 해결했으며, 추가적으로 ThreadLocal을 활용해 멀티쓰레드 상황에 안전하게 커넥션을 동기화할 수 있다.

특징

예시

동작 방식

  1. Transaction을 시작하려면 커넥션이 필요하다. Transaction 매니저는 DataSource를 통해 커넥션을 만들고 Transaction을 시작한다.
  2. Transaction 매니저는 Transaction이 시작된 커넥션을 Transaction 동기화 매니저에 보관한다.
  3. Repository는 Transaction 동기화 매니저에 보관된 커넥션을 꺼내서 사용한다. 따라서 파라미터로 커넥션을 전달하지 않아도 된다.
  4. Transaction이 종료되면 Transaction 매니저는 Transaction 동기화 매니저에 보관된 커넥션을 통해 Transaction을 종료하고, Connection을 반환한다.

장점

단점

단점 극복 방법

비교군과의 차이

질문