티스토리 뷰

Web/정리글

스프링 AOP 정리

구름뭉치 2021. 9. 8. 16:43

AOP : Aspect Orioented Programming

  • Aspect를 중심으로 프로그래밍하는 기법이다.
  • OOP를 보완하는 기술로 흩어진 Aspect를 모듈화 할 수 있도록 한다.

즉, 여러곳에서 사용되는 공통기능을 모듈화 하고 쓰이는 곳에 필요할 때 연결함으로서 유지보수 및 재사용성을 높일 수 있다.

 

예를들어 상품을 구매하거나, 글을 쓰거나, 댓글을 쓰는 등 다양한 기능에서 회원 검증을 하는 로직이 존재할 수 있다. 이러한 [회원 검증]로직을 Aspect로서 하나의 모듈화하여 사용할 수 있다.

위를 아래와 같이 기능별 Aspect로 볼 수 있다.

 

AOP 주요 용어

Aspect

  • 여러곳에서 쓰이는 공통기능(코드)를 모듈화 한것

Target

  • Aspect가 적용되는 클래스 또는 메소드
  • Aspect가 갖고 있는 Advice를 적용해야 하는 대상

Advice

  • What to do
  • Advice에서 실질적인 기능에 대한 구현체

Join Point

  • AdviceTarget에 적용되는 시점
  • 메서드 실행할 때, 생성자 호출할 때, 필드에서 값을 꺼낼 때 등
  • Join Point에 Advice를 끼워 넣는 것

Point Cut

  • 어디에 Advice를 적용해야 하는지에 대한 정보
  • A클래스의 B메소드에 적용한다면
    • Target : A class, Point Cut : B 메소드

AOP 적용 방법

  • 컴파일 타임
  • 로드 타임
  • 런타임

컴파일 타임 (Aspect J 방식)

자바 파일을 클래스 파일로 만들 때 그 순간 바이트 코드들을 조작하여 Advice가 적용된 조작된 바이트 코드를 만든다.

이렇게 AOP를 적용한다.

 

로드타임 (Load-time Weaving, 로드타임 위빙, Aspect J 방식)

A 자바 클래스파일을 조작하지 않고 순수한 A자바 클래스파일을 컴파일 하여 클래스 파일을 생성한다.

이때 A라는 클래스 파일을 로딩하는 시점에 로딩하는 클래스 정보를 수정한다.

 

즉, A라는 자바 클래스의 바이트 코드는 순수하게 있고 JVM에 해당 A 클래스를 로딩하는 순간에 Advice가 포함된 상태로 로딩이 된다.

-> JVM으로 로딩될 때 AOP가 적용된다.

 

런타임 (스프링 AOP가 동작하는 방식)

  • 기본적으로 Bean에만 적용이 가능하다.
  • 스프링 환경이므로 A 클래스는 Bean으로 등록되어 있고, A Bean에 Aspect를 적용해야함을 스프링이 알고 있다.

작동방식

  1. A 클래스를 읽어와서 A 클래스 타입의 Bean을 생성할 때 A 클래스 타입의 Proxy Bean을 생성한다.
  2. 생성된 ProxyBean은 A 클래스 Bean을 감싼다.
  3. 클라이언트에서 A 클래스를 호출하면 이 프록시 빈이 호출되고,
    • A 클래스의 Target을 수행하기 전에 공통 기능 부분을 프록시 빈에서 수행하고,
    • 이후 실제 A클래스의 Bean에서 Target인 실제 구현 부분을 수행하고,
    • 다시 프록시 빈으로 돌아가서 A클래스의 Target 이후 공통 기능 부분을 수행한다.

장점

- 문법이 쉽고 컴파일을 위한 별도의 과정이 필요하지 않다.

- AOP를 위한 추가적인 설정이 필요없다.

 

단점

- 초기 Bean 생성시 프록시 Bean도 같이 생성해야하는 비용이 든다. (최초에만)

 


Reference

https://goodgid.github.io/Spring-Framework-Apply-AOP/

https://dailyheumsi.tistory.com/202

https://bboglebbogle.tistory.com/26

https://logical-code.tistory.com/118

반응형
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday