[Spring 3대 요소] 3. AOP

namkun·2023년 6월 1일
0

T-I-L

목록 보기
12/20

AOP (Aspect Oriented Programming)

  • 공통 관심 기능을 분리해서 반복되는 부분을 추출, 핵심 로직에 영향을 미치지 않고 중복을 줄이는 방법이다.
  • 기존 OOP 에서 공통되는 기능을 여러 모듈에 적용해서 발생하는 중복된 코드 양산의 한계를 극복하기위해 등장했다.
  • 소스 코드 상에서 다른 부분에 계속 반복되어 쓰이는 코드를 흩어진 관심사 라고 하는데, 이런 것들을 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리해서 재 사용하겠다는 것이 AOP의 취지이다.

용어

  • Aspect
    • 위에서 말했듯 흩어진 관심사를 모듈화 한 것이다.
    • 주로 부가기능이 모듈화된다.
    • Advice + PointCut
  • Advisor
    • Spring AOP에서만 사용
    • Advice + PointCut
  • Target
    • Aspect를 적용하는 곳을 말한다. (class, method..)
  • Advice
    • 실질적으로 어떤 일을 해야할지에 대한 것을 말한다.
    • 실질적 부가기능을 담은 구현체이다.
  • JoinPoint
    • Advice가 적용될 위치를 말한다.
    • 예를 들면 메서지 진입지점, 생성자 호출시점등등 다양하다.
  • PointCut
    • JoinPoint 중에서 Advice가 적용될 위치를 선별한다.
  • Weaving
    • PointCut으로 결정된 타켓의 JoinPoint에 Advice를 적용
  • AOP Proxy
    • AOP 기능을 구현하기 위해 만든 프록시 객체
    • 스프링에서 AOP 프록시는 JDK 동적 프록시 또는 CGLIB 프록시
    • 스프링에서 기본값은 CGLIB 프록시

AOP 적용 시점

AOP의 적용시점은 3가지로 나뉜다.

  • Compile
    • .java 파일이 컴파일 되는 시점에 부가 기능 로직을 추가하는 방식
    • 모든 시점에 적용 가능
    • AspectJ가 제공하는 컴파일러를 사용해야하고, 복잡함.
  • Class Loading
    • class 파일이 JVM 내부 Class Loader에 보관되기 전에 조작해서 부가기능 로직을 추가하는 방식
    • 모든 시점 적용 가능
    • 옵션 및 클래스 로더를 조작해야하기에 운영이 어렵다.
  • Runtime 시점
    • Spring 에서 사용
    • 컴파일, 클래스 로더 적재가 모두 끝난 뒤에 자바가 실행할 때 동작한다.
    • 실제 대상 코드는 그대로 유지, 프록시를 통해 부가기능이 적용된다.
    • 프록시는 메서드 오버라이딩 개념으로 동작하기에 메서드에만 적용이 가능하다. (Spring Bean에만 AOP를 적용할 수 있다.)
    • Spring 만 있으면 사용가능하다.

Spring AOP

사용방법

  • 클래스에 @Aspect 어노테이션을 붙여 해당 클래스가 Aspect를 나타내는 Class 임을 명시한다.
  • 그 뒤에 @Component 어노테이션으로 Spring Bean 에 등록한다.
  • 해당 클래스 내에 공통 기능을 구현한다. (@Around 또는 실행시점 어노테이션 (@After, @Before,@AfterRunning..) 을 메서드에 붙여주면 된다.)

특징

  • Proxy 패턴 기반의 AOP 구현체

  • Proxy 객체를 쓰는 이유는, 접근 제어 및 부가기능을 추가하기 위함

  • Spirng Bean 에만 AOP를 적용할 수 있다.


    참고

  • Spring - AOP 총정리

profile
개발하는 중국학과 사람

0개의 댓글