반응형
1. 트랜잭션 적용이 필요한 시나리오
JDBC를 이용하는 환경에 맞게 스프링에서 제공하는 트랜잭션 기능을 통해 Service를 다음과 같이 구성했다고 하자.
하지만 만약 다른 회사는 JDBC가 아닌 여러개의 DB를 이용하여 JTA를, 다른 회사는 , JPA를 사용한다고 했을 때 이 서비스는 사용자들의 환경에 따라 수정이 필요한 서비스가 되어 버린다. 따라서 스프링에서 제공하는 트랜잭션 서비스를 추상화 하는 인터페이스(PlatformTransactionManager)를 통해 추상화 할 수 있다.
@Autowired
private DataSource dataSource;
public void setDataSource(DataSource dataSource){
this.dataSource = dataSource;
}
public void upgradeLevels() throws Exception {
TransactionSynchronizationManager.initSynchronization(); //트랜잭션 동기화 관리자를 이용해 초기화
Connection c = DataSourceUtils.getConnection(dataSource); //JDBC 커넥션을 시작함
c.setAutoCommit(false);
......
다음과 같이 추상화 할 수 있다. set방식은 기존 DI와 같은 방식이고 추상화를 이용하면 JDBC, JPA 등 다양한 트랜잭션을 getTransaction, commit 같은 메소드로 실행할 수 있다.
public class UserService {
...
private PlatformTransactionManager transactionManager;
public void setTransactionManager(PlatformTransactionManager transactionManager) {
this.transactionManager = transactionManager;
}
public void upgradeLevels() {
TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition());
...
}
반응형
'프로그래밍 > 시큐어코딩' 카테고리의 다른 글
[스프링 이해와 원리] 프록시패턴, 데코레이터패턴이란? (0) | 2020.07.09 |
---|---|
[스프링 이해와 원리] AOP란? (0) | 2020.07.09 |
[스프링 이해와 원리] 전략패턴 이란? 순서2 (0) | 2020.07.08 |
[스프링 이해와 원리] IOC와 DI 및 패턴 (순서 1) (0) | 2020.07.08 |
[스프링 이해와 원리] #5. 예외 관리 (0) | 2020.07.07 |