스프링 핵심 원리(고급편)

Ch03. 템플릿 메서드 패턴과 콜백 패턴 - 템플릿 메서드 패턴(시작)

webmaster 2022. 4. 9. 22:00
728x90

V3 메서드를 실제 운영 중인 애플리케이션에 베포 하려니 개발자들의 반대가 심하다( 로그를 출력해야 하는 부가 기능 코드가 핵심기능보다 훨씬 더 많고 복잡하다)

핵심 기능 vs 부가 기능

  • 핵심 기능은 해당 객체가 제공하는 고유의 기능이다. 예를 들어서 orderService의 핵심 기능은 주문 로직이다. 메서드 단위로 보면 orderService.orderItem()의 핵심 기능은 주문 데이터를 저장하기 위해 리포지토리를 호출하는 orderRepository.save(itemId) 코드가 핵심 기능이다.
  • 부가 기능은 핵심 기능을 보조하기 위해 제공되는 기능이다. 예를 들어서 로그 추적 로직, 트랜잭션 기능이 있다. 이러한 부가 기능은 단독으로 사용되지는 않고, 핵심 기능과 함께 사용된다. 예를 들어서 로그 추적 기능은 어떤 핵심 기능이 호출되었는지 로그를 남기기 위해 사용한다. 그러니까 핵심 기능을 보조하기 위해 존재한다
TraceStatus status = null;
try{
    status = trace.begin("OrderController.request()");
	// 핵심 기능 코드
    trace.end(status);
    return "ok";
}catch (Exception e){
    trace.exception(status, e);
    throw e; //예외를 꼭 다시 던져주어야 한다.
}

변하는 것과 변하지 않는 것을 분리

  • 핵심 기능 부분은 변하고, 로그 추적기를 사용하는 부분은 변하지 않는 부분이다.
  • 이 둘을 분리해서 모듈화해야 한다.
  • 템플릿 메서드 패턴(Template Method Pattern)은 이런 문제를 해결하는 디자인 패턴이다.

 

728x90