AOP

박찬호·2022년 4월 20일
0

Spring

목록 보기
5/6
post-thumbnail

목적은 비즈니스 로직(핵심 기능)과 인프라 로직(부가 기능)의 분리!

인프라 로직은 애플리케이션의 전 영역에서 나타난다.

  • 코드 중복이 횡단으로 나타나기 때문에 cross-cutting concern(횡단 관심사)이라고 한다.

  • 예시
    권한체크, 성능검사, 로깅, 보안, 트랜젝션 등

  • 문제점
    중복 코드 발생 가능성이 있어서 유지보수의 어려움이 있다.
    비즈니스 로직과 함께 있으면 비즈니스 로직을 이해하기 어렵다.

  • 해결책
    인프라 로직과 비즈니스 로직의 분리
    핵심 애플리케이션은 인프라 로직의 존재도 알지 못한다. 즉, 인프라 로직이 핵심 코드에 나타나지 않도록 캡슐화 하는 것이다.

AOP(Aspect-Oriented Programming)

'관점 지향 프로그래밍' 이란 횡단 관심사에 따라 프로그래밍 하는 것

AOP는 부가 기능이기 때문에 '어떤 부가기능'을 '어디'에 적용할 것인가? 가 중요하다.

용어

  • Target
    부가 기능의 부여 대상
  • Advice
    어떤 부가 기능? 언제? Before, AfterReturning(정상 종료), AfterThrowing(비정상 종료), After, Around
  • Join point
    어디에 적용할 것인가? 스프링 AOP에서는 메서드 실행 될 때만으로 한정
  • Point cut
    advice가 적용될 지점, 스프링 AOP에서는 어떤 메서드(execution 시점)
    정규표현식 을 사용할 수 있다.
  • Aspect
    advice와 pointcut을 합친 것, advisor라고도 한다.
  • Proxy
    advice를 타겟 객체에 적용하면 생성되는 객체이다.
    클라이언트 객체 관점에서 보면 타겟 객체와 프록시 객체의 차이는 없다.
  • Weaving
    타겟 객체에 aspect를 적용해서 새로운 프록시 객체를 생성하는 절차

구현 방법

  • 프록시 패턴
    부가기능을 제공하는 프록시로 감싼다. 스프링이 IOC/DI 기반이기 때문에 가능하다.
profile
Develop for Fun

0개의 댓글