spring
AOP
by kcj3054
2021. 12. 29.
핵심 기능, 부가 기능
- 만약 orderService가 있다면 핵심 기능은 주문 하는 것, 여기서 부가 기능은 해당 기능의 로그를 찍어 볼 수 있다.
- 로그 추적 기능은 어떤 핵심기능이 호출 되었는지 로그를 남기기 위한 것이다.
- 이렇게 orderService에 핵심기능과, 부가기능이 같이 있다
- 일반적으로 부가기능은 여러 클래스에 걸쳐서 실행된다. 여러 어플리케이션 호출을 로깅해야한다면, 부가 기능은 횡단 관심사(여러 클래스에 걸쳐져있다)가 된다, -> 하나의 부가기능을 여러 곳에서 사용하는 것.
- 횡단 관심사에는 문제가 있다
-
- 여러 곳에 적용을 해야해서 노가다 적인 작업
-
- 로깅을 수정해야할 경우 이미 있는 부가기능을 다 제거해야한다 (반복적인 작업)
- 위의 문제를 해결하기 위해 변경 지점이 하나가 되도록 모듈하가 필요하다,
AOP - 애스펙트(Aspect)
- 부가기능을 핵심 기능에 묶으니 유지보수에서 문제가 많았다. 이러한 것을 방지하기 위해서 부가기능과, 부가기능을 어디에 적용할지 선택하는 기능을 합해서 모듈로 만든 것이 에스펙트이다.
- 스프링이 제공하는 어드바이저, 어드바이스. 포인트컷(적용 대상)을 가지고 있어서 하나의 에스펙트이다.
- 애스펙트는 OOP를 대체가 아니라 OOP의 부족한 점을 보충하기위 위한 것이다.
AspectJ프레임워크
- aop의 대표적인 구현이 AspectJ 프레임워크이다. 스프링이 사용하는 aop는 aspectj의 문법을 쓰면서 aspectj의 일부만 사용
- 횡단 관심사의 모듈화
- java언어의 완벽한 관점 지향 확장
- 성능 최적화(캐싱)
- 모니터링(logtrace) 및 로깅