트랜잭션 추상화
- DB 관련 기술마다 트랜잭션을 관리하는 기능이 다르기 때문에 기술이 바뀔 때 마다 코드의 변경이 일어나게 된다
- 예) JDBC 를 쓰다가 JPA로 바꾸면 코드 변경이 일어남
- 이러한 문제 해결을 위해서는 트랜잭션을 인터페이스로 만들고 인터페이스를 기술들마다 인터페이스를 구현하면 된다
스프링의 트랜잭션 추상화

- 스프링은 트랜잭션 인터페이스 뿐만 아니라 데이터 접근 기술에 따른 트랜잭션 구현체도 대부분 만들어 놓아서 가져다 쓰기만 하면 된다
- 스프링 트랜잭션 추상화의 핵심은
PlatformTransactionManager 인터페이스이다
org.springframework.transaction.PlatformTransactionManager
- 스프링 5.3 부터는
DataSourceTransactionManager 를 상속받아서 약간의 기능을 확장한JdbcTransactionManager 를 제공함(둘은 크게 다르지 않음)
package org.springframework.transaction;
public interface PlatformTransactionManager extends TransactionManager {
TransactionStatus getTransaction(@Nullable TransactionDefinition definition)
throws TransactionException;
void commit(TransactionStatus status) throws TransactionException;
void rollback(TransactionStatus status) throws TransactionException;
}
getTransaction() : 트랜잭션을 시작한다. 이름이 getTransaction() 인 이유는 기존에 이미 진행중인 트랜잭션이 있는 경우 해당 트랜잭션에 참 여할 수 있기 때문이다. 참고로 트랜잭션 참여, 전파에 대한 부분은 뒤에서 설명한다. 지금은 단순히 트랜잭션을 시작하는 것으로 이해하면 된다.
commit() : 트랜잭션을 커밋한다.
rollback() : 트랜잭션을 롤백한다