AOP란

younk·2023년 9월 18일
0

AOP (Aspect-Oriented Programming)

관점지향 프로그래밍
관점을 기준으로 다양한 기능을 분리하여 보는 프로그래밍이다. 여기서 관점이란, 공통 관심사(모듈) 정도로 스스로 해석했다.


웹 어플리케이션은 핵심 비즈니스 로직과 그 애플리케이션 전체를 관통하는 부가 기능 로직이 있다. (예를 들어 로깅, 보안, 트랜젝션 등이 있음)
이를 횡단 관심사라고 한다. 횡단 관심사의 코드는 비즈니스 로직의 코드와 분리하여, 각 코드의 변경과 확장에 유연함을 주도록 하는것이 AOP의 목적이다.

AOP 관련 용어

  • Aspect : 흩어진 관심사를 모듈화한 것
  • Target : Aspect를 적용하는 곳 (클래스, 메소드 등)
  • Advice : 실질적으로 어떤 일을 해야할 지에 대한 것. 실질적 부가기능을 담은 구현체
  • Join Point : Advice가 적용될 위치 혹은 끼어들 수 있는 시점. (스프링에서 Join Point는 언제나 메소드 실행 시점을 의미)
  • Point Cut : 특정 조건에 의해 필터링된 조인 포인트. 수 많은 조인포인트 중 특정 메소드에서만 advice를 수행시키기 위해서 사용되는 곳
  • Weaving : 포인트컷에 의해 결정된 타겟의 조인포인트에 Advice를 삽입하는 과정

Advice의 동작시점

  • Before : 메소드 실행 전 동작
  • After : 메소드 실행 후 동작
  • After-returning : 메소드 정상 실행 후 동작
  • After-throwing : 예외 발생 후 동작
  • Around : 메소드 호출 이전, 이후, 예외발생 등 모든 시점에서 동작

AOP 적용 방식

컴파일 시점 적용

컴파일 시점 적용방식은 AspectJ 컴파일러가 .java파일을 컴파일 할때 부가기능을 넣어서 .class 파일로 컴파일 해주는 것을 의미한다.

클래스 로딩 시점 적용

JVM내 클래스로더에 .class 파일을 올리는 시점에 바이트 코드를 조작해 부가기능 로직을 추가하는 방식이다.

런타임 시점 적용

컴파일, 클래스 로딩, main() 메소드 실행 이후에 자바가 제공하는 범위내에 부가 기능을 적용하는 방식이다.
스프링 AOP가 주로 사용하는 방법. (A라는 클래스 타입의 Bean을 만들때 A타입의 Proxy Bean을 만들어 Proxy Bean이 Aspect코드를 추가하여 동작하게한다)

스프링 AOP

스프링 AOP는 프록시 가반의 AOP구현체이다.
스프링 Bean에만 적용가능하다. 스프링 AOP는 순수 자바로 구현되어 있어, 특별한 컴파일 과정이 필요하지 않다.

스프링은 빈을 등록할때, 빈 후처리기에서 모든 Advisor 빈을 조회한 뒤, 포인트컷으로 매칭해보면서 프록시 적용 대상인지 판단하고, 대상이라면 프록시를 빈으로 등록한다. 이때, 스프링에 AOP 의존성을 추가하게 된다면, 자동 프록시 생성기를 사용해 Advisor를 쉽게 구현할 수 있게 된다. 이는 Advisor기반으로 프록시를 생성한다. 또한 @Aspect를 보고 Advisor로 변환해서 저장하는 작업을 수행한다.

0개의 댓글