트랜잭션 추상화 인터페이스
public interface TxManager {
begin();
commit();
rollback();
}
- 트랜잭션은 사실 단순하다.
트랜잭션을 시작하고 비즈니스 로직의 수행이 끝나면 커밋하거나 롤백하면 된다.
- 그리고 TxManager 인터페이스를 기반으로 각각의 기술에 맞는 구현체를 만들면 된다.
- JdbcTxManager : JDBC 트랜잭션 기능을 제공하는 구현체
- JpaTxManager : JPA 트랜잭션 기능을 제공하는 구현체
트랜잭션 추상화와 의존관계
- 서비스는 특정 트랜잭션 기술에 직접 의존하는 것이 아니라, TxManager라는 추상화된 인터페이스에 의존한다.
이제 원하는 구현체를 DI를 통해서 주입하면 된다.
- 클라이언트인 서비스는 인터페이스에 의존하고 DI를 사용한 덕분에 OCP 원칙을 지키게 되었다.
이제 트랜잭션을 사용하는 서비스 코드를 전혀 변경하지 않고 트랜잭션 기술을 마음껏 변경할 수 있다.
스프링의 트랜잭션 추상화
- 심지어 데이터 접근 기술에 따른 트랜잭션 구현체도 대부분 만들어두어서 가져다 사용하기만 하면 된다.
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;
}
- getTranscation() : 트랜잭션을 시작한다.