Gidhub BE Developer

Spring 프레임워크 핵심 기술 - 스프링 AOP : 적용하기

2019-09-06
goodGid

이 글의 코드 및 정보들은 강의를 들으며 정리한 내용을 토대로 작성하였습니다.

AOP : 적용 방법

컴파일 타임

  • 자바 파일을 클래스 파일로 만들 때

  • 그 타이밍에 바이트 코드들을 조작하여

  • 조작이된 바이트 코드를 생성해낸다.

  • 이게 컴파일 타임에 AOP를 적용하는 방법이다.

A라는 클래스에 foo()라는 메소드가 있다.
그리고 Hello를 출력하는 Aspect가 있다.
여기서 foo()를 호출하면 Hello가 먼저 출력이 되야한다.
  • 위와 같은 상황에 컴파일 타임에 AOP를 적용한다면

  • 클래스 파일에 Hello를 출력하는 메소드가 같이 들어있게 된다. 

컴파일 타임 시점에 AOP 적용 시 장단점

  • 장점

    • 로드 타임이나 런타임보다 시간이 단축된다.

  • 단점

    • 별도의 컴파일 과정이 필요하다.

로드 타임

  • 로드 타임은 A라는 클래스는 순수한 클래스로 컴파일이 된다.

  • foo() 메소드 또한 순수한 기능만 정의된다.

  • 그런데 A라는 클래스 파일을 로딩하는 시점에

  • 로딩하는 클래스 정보를 변경한다.

  • 이게 로드 타임에 AOP를 적용하는 방식이다.

  • 이 방식을 로드타임 위빙(=Load-time weaving)이라고도 한다.


  • A 클래스의 바이트 코드는 순수하게 있지만

  • JVM가 로딩을 하면서

  • JVM 메모리상에 foo()라는 메소드를 호출하기 전

  • Hello를 출력하는 Aspec가 포함되어 있는 상태로 로딩이 된다.

  • 즉 JVM에서 클래스를 로딩하는 시점에 AOP를 적용한다.

로드 타임 시점에 AOP 적용 시 장단점

  • 단점

    • 클래스 로딩 시 약간의 부하가 생길 수 있다.

    • 로드타임 위버를 위한 설정이 필요하다.


런타임

  • 스프링 AOP가 동작하는 방식이다.

  • 스프링 환경이기 때문에 A 클래스는 Bean이 된다.

  • A라는 Bean에 Aspect를 적용해야 함을 스프링이 알고있다.


  • A라는 클래스를 읽어와

  • A라는 클래스 타입의 빈을 만들때

  • A라는 타입의 Proxy Bean을 생성한다.

  • 이 Proxy Bean은 A라는 Bean을 감싼다.

  • 그리고 Proxy Bean이 실제 A가 갖고 있는 foo() 메소드를 실행하기 전에

  • Hello를 먼저 찍는 일을 하고

  • foo() 메소드를 호출한다.

  • 이게 스프링 AOP이다.

  • Proxy 기반의 AOP는 이 글을 참고하자.

런타임 시점에 AOP 적용 시 장단점

  • 장점
    • AOP를 위한 설정이 필요하지 않다.

    • 별도의 컴파일이 필요하지 않다.

    • 문법이 쉽다.

  • 단점

    • 초기 Bean 생성 시 부하가 생긴다.

    • 하지만 요청이 들어올 때 성능을 잡아먹는게 아니고 최초에만 추가 비용이 든다.


Reference


Recommend

Index