스프링 AOP - 핵심기능과 부가기능

애플리케이션 기능은 AOP관점에서 핵심 기능과 부가 기능으로 나뉜다.

핵심 기능은 어떤 클래스가 제공하는 고유의 기능이다. 예를들어 OrderSerivce의 핵심 기능은 주문 로직임.

부가 기능은 핵심 기능을 보조하기 위해 제공되는 기능이다. 로그 추적, 트랜잭션 기능 등임. 이런 부가 기능의 특징은 핵심기능없이는 의미가 없다는 것.

주문 로직을 실행하기 직전에 로그 추적기능을 사용해야 하면 핵심 기능인 주문 로직과 부가 기능인 로그 추적 로직이 하나의 클래스안에 섞여버린다.

그런데 로그 추적같은 부가 기능은 여러 곳에서 함께 같이 쓰인다. 횡단 관심사라고 불리는 이유는 다음의 도식을 통해 바로 이해될 것임.

image.png

부가 기능 문제

이런 부가 기능을 여러 로직에 걸쳐서 적용하려면 굉장히 번거로움. 예를들어 부가 기능을 적용해야 하는 클래스가 100개면? 100개 모두에 동일한 코드를 추가해야 한다.

가장 큰 문제는 부가기능의 수정임. 항상 애플리케이션 개발의 설계는 수정과 변경때문에 골치가 아파진다… 100개 로직을 모두 수정할 것인가?

문제를 정리하면 다음과 같다.

  1. 부가 기능 적용하는 것도 힘듦