본문 바로가기
spring

AOP

by kcj3054 2021. 12. 29.

핵심 기능, 부가 기능

  • 만약 orderService가 있다면 핵심 기능은 주문 하는 것, 여기서 부가 기능은 해당 기능의 로그를 찍어 볼 수 있다.
  • 로그 추적 기능은 어떤 핵심기능이 호출 되었는지 로그를 남기기 위한 것이다.
  • 이렇게 orderService에 핵심기능과, 부가기능이 같이 있다
    • 일반적으로 부가기능은 여러 클래스에 걸쳐서 실행된다. 여러 어플리케이션 호출을 로깅해야한다면, 부가 기능은 횡단 관심사(여러 클래스에 걸쳐져있다)가 된다, -> 하나의 부가기능을 여러 곳에서 사용하는 것.
    • 횡단 관심사에는 문제가 있다
      1. 여러 곳에 적용을 해야해서 노가다 적인 작업
      1. 로깅을 수정해야할 경우 이미 있는 부가기능을 다 제거해야한다 (반복적인 작업)
- 위의 문제를 해결하기 위해 변경 지점이 하나가 되도록 모듈하가 필요하다, 

AOP - 애스펙트(Aspect)

  • 부가기능을 핵심 기능에 묶으니 유지보수에서 문제가 많았다. 이러한 것을 방지하기 위해서 부가기능과, 부가기능을 어디에 적용할지 선택하는 기능을 합해서 모듈로 만든 것이 에스펙트이다.
  • 스프링이 제공하는 어드바이저, 어드바이스. 포인트컷(적용 대상)을 가지고 있어서 하나의 에스펙트이다.
  • 애스펙트는 OOP를 대체가 아니라 OOP의 부족한 점을 보충하기위 위한 것이다.

AspectJ프레임워크

  • aop의 대표적인 구현이 AspectJ 프레임워크이다. 스프링이 사용하는 aop는 aspectj의 문법을 쓰면서 aspectj의 일부만 사용
  • 횡단 관심사의 모듈화
    • java언어의 완벽한 관점 지향 확장
    • 성능 최적화(캐싱)
    • 모니터링(logtrace) 및 로깅

'spring' 카테고리의 다른 글

스프링, 바이트코드 조작, Configuration, 다이나믹 프록시  (0) 2021.12.29
빈 lifecycle, PrototypeBean  (0) 2021.12.29
dto , mvc layerd architecture, Timestamped  (0) 2021.12.02
ocp, di, srp  (0) 2021.12.02
spring,... intellij 디버그  (2) 2021.11.30