이전에 살펴본 것처럼 현재 문제는 서비스 계층이 트랜잭션을 사용하기 위해 JDBC라는 기술에 의존하고 있는 것이 문제였다.
만약 향후 JDBC에서 JPA같은 다른 데이터 접근 기술로 변경하면 서비스 계층의 트랜잭션 관련 코드도 모두 함께 수정되어야 하는 문제가 있다.
이런 문제가 생긴 근본적인 이유는 추상화에 의존하지 않았기 때문이다…! 그래서 해결 방법도 추상화에 의존하는 것이다..
가장 단순한 해결책은 트랜잭션을 추상화한 인터페이스를 만들고 여기에만 의존하는 것이다.
예를들면…
public interface TxManager {
begin();
commit();
rollback();
}
이런 인터페이스를 만들고, JDBC는 JdbcTxManager
, JPA는 JpaTxManager
이런식으로 구현체를 만들면 된다…
이러면 이제 서비스 로직은 추상화된 인터페이스에만 의존하므로 코드 수정이 필요없다. 즉, 변경에 열려있다.
이는 OCP와 DI를 이용한 방법임..
이미 스프링은 위와같은 인터페이스를 다 만들어놨다. 스프링이 이미 트랜잭션 추상화 기술을 제공하고 있단 말임.