본문 바로가기
백엔드/Spring

[Spring] AOP 개념 및 용어 정리

by 작은소행성 2024. 5. 13.

AOP란

Aspect-Oriented Programming , 관점 지향 프로그래밍이란 뜻으로 어떤 로직을 핵심적인 관점과 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하는 것이다. 

부가 기능과 부가 기능을 어디에 적용할 지 선택하는 기능을 합해서 하나의 모듈로 만든 것을 Aspect라고 한다. 

이 Aspect 를 사용한 프로그래밍 방식을 AOP 라고 한다. 

AOP는 OOP를 대체하기 위한 것이 아닌 횡단 관심사(하나의 부가 기능이 여러 곳에 동일하게 사용됨)를 깔끔하게 처리하기 어려운 OOP의 부족한 부분을 보조하는 목적으로 개발되었다. 

AOP 의 대표적인 구현으로는 AspectJ 프레임워크가 있다. 

 

AOP 적용 방식

적용 방식에는 크게  3가지 방식이 있다. 

  • 컴파일 시점
  • 클래스 로딩 시점
  • 런타임 시점(프록시) 

컴파일 시점과 클래스 로딩 시점 방식은 AspectJ 프레임워크를 직접 사용해야 하고 이 AspectJ를 학습하기 위해선 엄청난 분량과 설정의 번거로움이 있어 주로 런타임 시점 적용 방식을 사용하는 스프링 AOP 를 사용한다. 

런타임 시점은 컴파일도 다 끝나고 클래스 로더에 클래스도 다 올라가서 이미 자바가 실행되고 난 다음을 말한다. (main 메서드가 실행된 다음) 

프록시를 사용하기 때문에 AOP 기능에 일부 제약이 있지만 특별한 컴파일러나 자바를 실행할 때 복잡한 옵션과 클래스 로더 조작기를 설정하지 않아도 스프링이 알아서 자동으로 설정해주기 때문에 훨씬 편리하다. 

 

런타임 시점

 

AOP 적용 위치

AOP 는 메서드 실행 위치 뿐만 아니라 다양한 위치에 적용할 수 있다. 

  • 조인포인트 지점 : 생성자, 필드 값 접근, static 메서드 접근, 메서드 실행
  • AspectJ를 사용해서 컴파일 시점과 클래스 로딩 시점에 적용하는 모든 시점 
  • 스프링 AOP의 조인포인트는 메서드 실행 지점
  • 프록시 방식을 사용하는 스프링 AOP는 @Aspect를 빈 등록한 시점

 

AOP 용어 정리 

  • 조인 포인트(Join point)
    어드바이스가 적용될 수 있는 위치, 메소드 실행, 생성자 호출, 필드 값 접근, static 메서드 접근 같은 프로그램 실행 중 지점들은 대부분 조인 포인트이다.
    추상적인 개념으로 AOP를 적용할 수 있는 모든 지점이라 생각하면 된다.
    스프링 AOP는 프록시 방식을 사용하므로 조인 포인트는 항상 메소드 실행 지점으로 제한된다.
  • 포인트컷(Pointcut)
    조인 포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능으로 주로 AspectJ 표현식을 사용해서 지정한다.
    프록시를 사용하는 스프링 AOP는 메서드 실행 지점만 포인트컷으로 선별이 가능하다.
  • 타켓(Target)
    어드바이스(부가 기능)를 받는 객체, 포인트컷으로 결정한다.
  • 어드바이스(Advice)
    부가 기능으로 특정 조인 포인트에서 Aspect에 의해 취해지는 조치로 Around(주변), Before(전), After(후)와 같은 다양한 종류의 어드바이스가 있다.
  • 애스펙트(Aspect)
    어드바이스 + 포인트컷을 모듈화 한 것으로 @Aspect 를 생각하면 된다.
    여러 어드바이스와 포인트 컷이 함께 존재한다.
  • 어드바이저(Advisor)
    하나의 어드바이스와 하나의 포인트 컷으로 구성된 스프링 AOP에서만 사용되는 특별한 용어이다.
  • 위빙(Weaving)
    AOP 적용을 위해 Aspect를 객체에 연결한 상태이다.
    포인트컷으로 결정한 타켓의 조인 포인트에 어드바이스를 적용하는 것으로 위빙을 통해 핵심 기능 코드에 영향을 주지 않고 부가 기능을 추가 할 수 있다.
    • 컴파일 타임(AspectJ compiler)
    • 로드 타임
    • 런타임, 스프링 AOP는 런타임, 프록시 방식
  • AOP 프록시
    AOP 기능을 구현하기 위해 만든 프록시 객체, 스프링에서 AOP 프록시는 JDK 동적 프록시 또는 CGLIB 프록시이다.

 

반응형