Spring AOP 개념

Spring AOP 개념

백기선님의 강의인 Spring 프레임워크 핵심 기술 편의 AOP를 학습한 내용을 정리한 글

AOP란?

Aspect-oriented Programming (AOP, 관점지향 프로그래밍)는 OOP를 보완하는 수단으로, 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법이다.

Crosscuttting Concerns (흩어진 관심사)

Concerns은 각각의 클래스마다 수행되는 동일한 작업이다.

가령 DB에 접근한다고 한다면 메인 로직이 실행되기 이전, 이후에 트랜잭션 처리가 들어야할 것이다.

AOP의 주요 개념

994AA3335C1B8C9D28

Aspect는 수행되는 작업들을 모듈화 해둔 것이다.

이 모듈에는 AdvicePointcut이 들어간다.

Advice는 해야할 일들이며

Pointcut은 어디에 적용해야하는지에 대한 정보를 갖고 있다.

Target은 Class A,B,C 이다. 즉 적용이 되는 대상이다.

Join Point는 합류점이라고 부른다. Join Point의 가장 흔한 시점은 메소드 실행 시점이다.

Join PointAdvice가 끼어들 수 있는 합류 지점들의 집합이며 PointcutJoin Point의 Subset으로써 구체적으로 어디에 끼어들 것인지에 대한 명세이다.

AOP 구현체

굉장히 많다.

Java 진영에서는 일반적으로 AspectJ가 있다.

AspectJ는 굉장히 많은 Join Point와 다양한 기능들을 제공한다. (그 말은 그만큼 배우기 어렵다는 것이겠지…)

Spring에서는 Spring AOP를 제공하는데 AspecJ에 비해서 한정된 기능만 제공해주고 있다.

AOP 적용 방법

컴파일

Hello()라는 메서드의 Aspect가 있다고 가정하자

Class A의 foo() 메서드가 실행되기 이전 Aspect가 실행되어야 한다면 자바 코드가 바이트 코드로 변환될 때 조작하여 Hello가 같이 바이트 코드에 들어가게 된다.

이렇게 컴파일 타임에 AOP를 구현하는 것이 가능하다.

장점

  • 바이트 코드를 만들때 이미 AOP를 구현했기 때문에 로드 타임이나 런타임 보다는 성능적 부하가 없다.
  • AspectJ를 사용할 수 있기 때문에 다양한 기능 사용 가능

단점

  • 별도의 컴파일 과정을 거쳐야함.

로드 타임

Class A를 컴파일 후, A 클래스를 로딩하는 시점에 코드를 바꿔치기 할 수 있다.

이러한 기술을 Load Time에 Weaving 한다고 표현한다.

Weaving은 Aspect를 끼워서 넣는 기술을 의미한다.

장점

  • AspectJ를 사용할 수 있기 때문에 다양한 기능 사용 가능

단점

  • 클래스 로딩할때 약간의 부하가 생길 수 있다.
  • Load Time Weaver를 따로 설정해주어야한다.

런타임

Spring AOP는 이 방법을 사용한다.

A라는 빈에다가 Aspect를 적용해야하는 것을 스프링은 알고 있다.

Class A 타입의 빈을 만들 때 A라는 빈을 감싼 Proxy Bean을 만든다.

이 Proxy Bean이 이 foo()라는 메소드를 찍기 이전에 Hello() 메서드를 수행하고 foo() 메소드를 호출한다.

장점

  • 아무런 설정이 필요없다.
  • 문법이 매우 쉬움
  • 별도의 AOP 공부를 많이 안해도 된다.
  • Spring AOP 짱짱맨

단점

  • 최초의 빈을 만드는데 성능 부하가 있을 수 있다.

Reference

인프런 백기선님의 스프링 프레임워크 핵심 기술 강좌



© 2022. by minkuk

Powered by minkuk