-
프로그래밍 방식의 트랜잭션 관리 ( Programmatic Transaction Management )
- 트랜잭션 매니저 또는 트랜잭션 템플릿 등을 사용해서 트랜잭션 관련 코드를 직접 작성하는 것을 프로그래밍 방식의 트랜잭션 관리라고 한다.
-
선언적 트랜잭션 관리 ( Declarative Transaction Management )
@Transactional
-
트랜잭션을 사용하기 위해서 반복적으로 나타나는 문제점을 해결하기 위해 나타난 Spring 의 트랜잭션 추상화 입니다.
- 트랜잭션 문제
- 트랜잭션을 적용하기 위해 데이터 접근 구현 기술이 서비스 계층에 누수
- 동일 트랜잭션을 유지하기 위해 Connection을 파라미터로 넘기면서 동일한 Connection을 사용하도록 해야 한다.
- 트랜잭션 적용 반복 문제
try, catch, finally…
- 예외 누수 문제
- 데이터 접근 계층의 데이터 접근 구현 기술 예외가 서비스 계층으로 전파되어 해당 예외를 처리해야 한다.
- 각 데이터 접근 기술 마다 발생하는 예외도 다르기 때문에 기술 변경 시 예외 처리도 수정 되어야 한다.
- 데이터 접근 기술 구현 반복 문제
- 데이터 접근 구현 반복 문제
try, catch, finally …
-
서비스 계층에서 트랜잭션을 사용하기 위해서 특정 데이터 접근 기술에 의존하고 있다.
향후 데이터 접근 기술이 다른 기술로 변경이 된다면, 서비스 계층의 트랜잭션 관련 코드도 모두 함께 수정되어야 하는 문제가 발생한다.
- 구현 기술에 따른 트랜잭션 사용법
- JDBC : con.setAutoCommit(false)
- JPA : transaction.begin()


-
이 문제를 해결하려면 트랜잭션 기능을 추상화 하면 됩니다.
각각의 데이터 접근 구현 기술의 구현체를 만들어서 상황에 맞게 DI 하여 주입하면 됩니다.
