TIL 231006

geon·2023년 10월 6일
0

스프링 DB 1편

스프링과 문제 해결 - 트랜잭션

서비스 계층은 특정 기술에 종속되지 않는 순수한 상태로 유지해야 함 -> DB 접근 기술이 바뀌어도 변경이 전파되지 않음

서비스 계층에 트랜잭션을 적용하면서 발생하는 문제

  • 서비스 계층에 DB 구현 기술 의존성이 생김
  • 같은 트랜잭션을 유지하기 위해 커넥션을 매번 DB 쪽으로 넘겨야 함, 커넥션 유무에 따라 메서드를 중복해서 만들어야 함
  • 트랜잭션 적용 코드의 반복

스프링의 문제 해결

PlatformTransactionManager 인터페이스를 통해 트랜잭션 기능을 추상화

트랜잭션 매니저는 트랜잭션 추상화, 리소스 동기화 역할을 함
리소스 동기화 : 트랜잭션이 진행되는 동안 동일한 커넥션을 사용할 수 있도록 함

  • 동작 과정
  1. 트랜잭션 매니저는 데이터 소스를 통해 커넥션을 만들고 트랜잭션을 시작함
  2. 트랜잭션 매니저는 트랜잭션이 시작된 커넥션을 트랜잭션 동기화 매니저에 보관 (쓰레드 로컬 사용)
  3. 리포지토리는 트랜잭션 동기화 매니저에 보관된 커넥션을 사용
  4. 트랜잭션 종료(커밋, 롤백) 시 트랜잭션 매니저는 트랜잭션 동기화 매니저에 보관된 커넥션을 통해 트랜잭션을 종료하고 커넥션을 닫음
profile
뭐라도 적기

0개의 댓글