[ 2022.10.30 TIL-Spring AOP ]

Coosla·2022년 10월 30일
0

TIL

목록 보기
7/29
post-thumbnail

AOP

✏️ AOP(Aspect Oriented Programming)란?

  • 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 그 관점을 기준으로 각각 모듈화하는 것
  • 소스 코드에서 계속 반복해서 쓰는 코드들을 흩어진 관심사(Crosscutting Concerns)라 부름
  • Aspect로 모둘화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지
  • 중복 코드, 프록시 클래스 작성의 번거로움 등에 대한 해결책을 제시하는 것이 목적

✏️ AOP 특징

  • Spring Bean 에서만 AOP가 적용 가능
  • JoinPoint로만 지원
  • 프록시가 호출을 가로채 핵심기능 로직 전/후로 부가기능 로직을 수행

✏️ AOP 장점

  • 중복된 코드를 최대한 제외하고 기능이 필요할 때만 호출하여 사용하여 재사용성이 높음
  • 비슷한 코드를 별도로 분리하여 관리하기 때문에 코드가 깔끔해짐

✏️ AOP 주요 용어

  • Aspect
    • 부가기능을 정의한 코드인 Advice와 Advice를 어디에 적용할지를 결정하는 PointCut을 합친 개념
    • Advice + PointCut = Ascpct
    • 부가기능들을 독립적인 Aspect로 구분 가능
    • 런타임 시 필요한 위치에 동적으로 사용 가능
    • 싱글톤 형태로 존재
  • Target
    • 핵심 기능을 담고 있는 모듈로 부가기능을 부여할 대상이 됨.
  • Advice
    • 타켓에 재공할 부가기능을 담고 있는 모듈
    • Advice 종류
      • Before Advice : 대상 객체의 메소드 호출 전에 공통 기능을 실행
      • After Advice : 익셉션 발생 여부에 상관없이 대상 객체의 메소드 실행 후 공통 기능을 실행
      • After Returning Advice : 객체의 메소드가 익셉션 없이 정상적으로 실행된 이후 공통 기능을 실행
      • After Throwing Advice : 객체의 메소드를 실행하는 도중 예외가 발생한 경우 공통 기능을 실행
      • Around Advice : 객체의 메소드 실행 전/후 또는 예외 발생 시점에 공통 기능을 실행
  • Joint Point
    • Advice가 적용될 수 있는 위치
    • Target 객체가 구현한 인터페이스의 모든 메소드는 Join Point가 됨
  • Pointcut
    • Joint Point의 상세한 스펙을 정의
    • Advice를 적용할 타겟의 메소드를 선별하는 정규표현식
    • Pointcut 표현식
  • Advisor
    • Advice + Pointcut = Advisor
    • Spring AOP에서만 사용되는 특별한 용어
  • Weaving
    • Pointcut에 의해 결정된 타겟의 Joint Point에 부가기능을 삽입하는 과정을 의미
    • Compile-time Weaving
      • Load-time에 대한 절차가 없어 성능 하락 없이 구성 가능
      • Lombok과 같이 컴파일시 간섭하는 플러그인들과 충돌
    • Class Load-time Weaving
      • applicationContext에 로드된 객체들을 불러온 뒤, AspectJ weaver에 의해 객체들을 weaving함
      • 객체를 전부 불러온 뒤 weaving 하기 때문에 약간의 성능 하락이 존재
    • Run-time Weaving
      • Spring AOP에서 사용하는 방식
      • 소스코드나 클래스 정보를 변경하지 않고 프록시 객체를 사용해 AOP 적용

✏️ AOP 동작과정

✏️ AOP 예제 코드

  • AOP 예제 코드 참고 사이트 입니다.

    예제 코드는 추후 추가 예정입니다.


참고

AOP

profile
프로그래밍 언어 공부 정리

0개의 댓글