트랜잭션 동기화 매니저의 역할은 무엇인가요?
트랜잭션을 유지하려면 트랜잭션의 시작부터 끝까지 같은 DB 커넥션을 유지해야 하는데, 스프링이 제공하는 트랜잭션 동기화 매니저가 이런 역할을 한다.
트랜잭션 동기화 매니저는 쓰레드 로컬을 사용하기 때문에 멀티 쓰레드 상황에서 안전하게 커넥션을 동기화할 수 있다.
동작 방식
서비스 로직에서 트랜잭션을 시작하면 트랜잭션 매니저는
DataSource에서 커넥션을 획득하고,autoCommit = false로 세팅한 뒤 트랜잭션 동기화 매니저에 보관한다.레포지토리 계층에서는 트랜잭션 동기화 매니저에 보관된 커넥션을 꺼내서 사용한다.
서비스 로직에서 트랜잭션을 종료할 때는 트랜잭션 동기화 매니저에서 해당 커넥션을 가져와 커밋 또는 롤백을 수행한 후, 리소스를 정리하고 커넥션을 커넥션 풀에 반환한다.
Last updated