스프링 DB 1편
스프링과 문제 해결 - 트랜잭션
서비스 계층은 특정 기술에 종속되지 않는 순수한 상태로 유지해야 함 -> DB 접근 기술이 바뀌어도 변경이 전파되지 않음
서비스 계층에 트랜잭션을 적용하면서 발생하는 문제
- 서비스 계층에 DB 구현 기술 의존성이 생김
- 같은 트랜잭션을 유지하기 위해 커넥션을 매번 DB 쪽으로 넘겨야 함, 커넥션 유무에 따라 메서드를 중복해서 만들어야 함
- 트랜잭션 적용 코드의 반복
스프링의 문제 해결
PlatformTransactionManager
인터페이스를 통해 트랜잭션 기능을 추상화
트랜잭션 매니저는 트랜잭션 추상화
, 리소스 동기화
역할을 함
리소스 동기화 : 트랜잭션이 진행되는 동안 동일한 커넥션을 사용할 수 있도록 함
- 트랜잭션 매니저는 데이터 소스를 통해 커넥션을 만들고 트랜잭션을 시작함
- 트랜잭션 매니저는 트랜잭션이 시작된 커넥션을
트랜잭션 동기화 매니저
에 보관 (쓰레드 로컬
사용)
- 리포지토리는 트랜잭션 동기화 매니저에 보관된 커넥션을 사용
- 트랜잭션 종료(커밋, 롤백) 시 트랜잭션 매니저는 트랜잭션 동기화 매니저에 보관된 커넥션을 통해 트랜잭션을 종료하고 커넥션을 닫음