스프링 트랜잭션은 단일 트랜잭션의 atomic(원자성)을 유지하기 위해 하나의 퍼사드 객체를 사용한다고 하여, 퍼사드 객체(패턴)에 대해 알아보고 있었다.
공부하면서 스프링에서 트랜잭션을 위해 사용하는 패턴과 객체 개념으로 접근하다 보니 이해하기 어려운 부분이 많았는데, 이번에 의존성 및 도메인 분리 개념으로 접근하였을때 개념이해가 용이하여 공부한 내용을 기록한다.
사실 프록시 패턴이라기 보다는 하나의 방법으로 보는게 더 맞지 않을까 싶은데,
Class ServiceClass{
public void logic(){
Service serviceA;
Service serviceB;
serviceA.service();
serviceB.service();
}
}
이렇게 서비스 클래스에서 다수의 서비스를 복잡하게 사용해야 할 경우,
Class FacadeClass {
Service serviceA;
Service serviceB;
serviceA.service();
serviceB.service();
}
Class ServiceClass{
FacadeClass facadeClass;
facadeClass.logic();
}
하나의 퍼서드 클래스를 통해 유연하고 간결하게 정의할 수 있다.
이와 같이 복잡한 서비스로 하나의 트랜잭션 혹은 서비스 로직을 구성하고자 할 때 하나의 인터페이스, 인터페이스라 하니까 이해하기 어려운데 하나의 클래스 혹은 서비스 로직을 제공하기 위해 활용하는 접근 방법이라 할 수 있겠다.
퍼서드는 복잡하고 하위 시스템이 많은 로직을 하나로 구성해준다는 의미로 볼 수 있겠지만, 숨은 의미는 하나의 객체로의 접근을 의미한다.
이 하나의 객체로 접근한다는 것은 서비스 내부의 로직이 어떤지는 관심이 없고, 객체 하나를 사용하여 로직 구성의 의존성을 줄이고 시스템 효율성이 높아진다는 의미도 유의해야 한다.