AOP

박찬우·2024년 2월 16일

스프링

목록 보기
57/88

핵심 기능과 부가 기능

  • 핵심 기능은 해당 객체가 제공하는 고유의 기능이다. 예를 들어서 상품 주문 로직이다.
  • 부가 기능은 핵심 기능을 보조하기 위해 제공되는 기능이다. 예를 들어서 로그 추적 로직, 트랜잭션 기능이 있다. 이러한 부가 기능은 단독으로 사용되지 않고, 핵심 기능과 함께 사용된다. 예를 들어서 로그 추적 기능은 어떤 핵심 기능이 호출되었는지 로그를 남기기 위해 사용한다. 그러니까 부가 기능은 이름 그대로 핵심 기능을 보조하기위해 존재한다.
  • 여러 곳에서 사용하는 부가기능 적용 문제
    • 부가 기능을 적용할 때 아주 많은 반복이 필요하다.
    • 부가 기능이 여러 곳에 퍼져서 중복 코드를 만들어낸다.
    • 부가 기능을 변경할 때 중복 때문에 많은 수정이 필요하다.
    • 부가 기능의 적용 대상을 변경할 때 많은 수정이 필요하다.

애스펙트

  • 부가 기능과 부가 기능을 어디에 적용할지 선택하는 기능을 합해서 하나의 모듈로 만들었는데 이것이 바로 애스펙트(aspect)이다
  • @Aspect 바로 이것이다
  • 스프링이 제공하는 어드바이저도 어드바이스(부가 기능)과 포인트컷(적용 대상)을 가지고 있어서 개념상 하나의 애스펙트
  • 이름 그대로 애플리케이션을 바라보는 관점을 하나하나의 기능에서
    횡단 관심사(cross-cutting concerns) 관점으로 달리 보는 것
  • 애스펙트를 사용한 프로그래밍 방식을 관점 지향 프로그래밍 AOP(Aspect-Oriented Programming)이라 한다.
  • AOP는 OOP를 대체하기 위한 것이 아니라 횡단 관심사를 깔끔하게 처리하기 어려운 OOP의 부족한 부분을 보조하는 목적
  • AspectJ 프레임워크
    • AOP의 대표적인 구현으로 프레임워크
    • 스프링도 AOP를 지원하지만 대부분 AspectJ의 문법을 차용하고, AspectJ가 제공하는 기능의 일부만 제공
    • 자바 프로그래밍 언어에 대한 완벽한 관점 지향 확장
    • 횡단 관심사의 깔끔한 모듈화
      • 오류 검사 및 처리
      • 동기화
      • 성능 최적화(캐싱)
      • 모니터링 및 로깅
profile
진짜 개발자가 되어보자

0개의 댓글