Skip to content

soobinJung/Spring-AOP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 

Repository files navigation

AOP (Aspect-Oriented Programming) 란

AOP는 관점(Aspect)지향 프로그래밍으로, 관점을 기준으로 다양한 기능을 분리하여 보는 프로그래밍이다. 관점(Aspect)이란, 부가 기능과 그 적용처를 정의하고 합쳐서 모듈로 만든 것이다.



AOP 적용 방식

AOP(Aspect-Oriented Programming)를 적용하는 방식은 주로 코드의 다양한 지점에 부가적인 기능을 통합하는 방법에 따라 분류됩니다. 이러한 기능을 통합하는 과정을 "위빙(Weaving)"이라고 부르며, 이는 AOP의 핵심적인 작업으로, 코드에 부가 기능을 삽입하는 과정을 의미합니다. AOP 적용 방식은 크게 컴파일 시점, 클래스 로딩 시점, 런타임 시점 적용으로 나눌 수 있습니다.



🔊 컴파일 시점 적용

컴파일 시점에 적용하는 방식은 소스 코드가 컴파일되는 단계에서 부가 기능을 삽입하는 것을 의미합니다. AspectJ와 같은 특수한 컴파일러를 사용하여, 소스 파일(.java)을 컴파일하는 과정에서 부가 기능이 포함된 클래스 파일(.class)을 생성합니다. 이 방식은 코드가 실행되기 전에 모든 위빙이 완료되므로, 실행 시간에는 추가적인 처리가 필요 없습니다.



🔊 클래스 로딩 시점 적용

클래스 로딩 시점에 적용하는 방식은 Java 가상 머신(JVM) 내에서 클래스가 메모리에 로딩되는 시점에 바이트 코드를 조작하여 부가 기능을 추가하는 방법입니다. 이는 JVM의 클래스 로더가 .class 파일을 읽어들일 때, 바이트 코드 조작 라이브러리를 활용해 실시간으로 코드에 변형을 가하는 것을 포함합니다. 이 방식은 컴파일 후, 런타임 이전의 중간 단계에서 위빙을 수행합니다.



🔊 런타임 시점 적용

런타임 시점에 적용하는 방식은 애플리케이션이 실행 중일 때 부가 기능을 적용하는 것을 의미합니다. 이 방법은 Spring AOP와 같은 프레임워크를 사용하여 구현되며, 대부분 프록시 기반으로 작동합니다. 프록시는 실제 객체를 감싸는 래퍼(wrapper) 역할을 하며, 객체의 메서드 호출을 가로채 부가 기능을 수행한 후 실제 객체의 메서드를 호출합니다. 런타임 시점에 적용되기 때문에, 메서드 실행 지점에서만 부가 기능을 적용할 수 있으며, 이는 프록시가 메서드 호출에만 개입할 수 있기 때문입니다.



각각의 AOP 적용 방식은 개발 환경, 요구 사항, 성능 고려 사항 등에 따라 선택할 수 있습니다. 컴파일 시점 적용은 높은 성능과 함께 컴파일 단계에서 모든 위빙을 완료하는 장점이 있습니다. 클래스 로딩 시점 적용은 런타임 이전에 바이트 코드를 조작함으로써 유연성을 제공합니다. 런타임 시점 적용은 실행 중인 애플리케이션에 동적으로 부가 기능을 추가할 수 있지만, 이 방식은 프록시를 통한 메서드 실행 지점에만 적용됩니다.



AOP 용어 정리

🔊 Join Point

AOP에서 Join Point는 Advice가 적용될 수 있는 프로그램 실행의 특정 지점을 의미합니다. 예를 들어, 메서드의 실행 시작 또는 종료, 객체의 생성, 필드에 대한 접근 등이 여기에 해당합니다. Spring AOP에서는 프록시 기반의 구현을 사용하기 때문에, 조인 포인트는 실질적으로 메서드 실행 시점에 한정됩니다.



🔊 Pointcut

Pointcut은 Join Points 중에서 실제로 Advice가 적용될 위치를 선별하는 표현식이나 패턴입니다. 즉, 어떤 메서드에 Advice를 적용할지 결정하는 규칙을 정의합니다. Spring AOP는 프록시 기반으로 동작하기 때문에 Pointcut 역시 메서드 실행 시점에 관련된 패턴으로 제한됩니다.



🔊 Target

Target은 Advice가 적용되는 대상 객체를 의미합니다. Pointcut에 의해 선별된 대상 객체에 대한 참조입니다. 이 객체는 AOP 프록시를 통해 감싸져 Advice의 적용을 받게 됩니다.



🔊 Advice

Advice는 Join Point에 적용되어 실행될 실질적인 부가 기능의 로직을 담고 있습니다. Advice는 특정 시점(메서드 호출 전, 호출 후, 예외 발생 시 등)에 실행되도록 정의될 수 있으며, Aspect의 핵심 기능을 구현합니다.



🔊 Aspect

Aspect는 Advice와 Pointcut을 결합한 모듈화된 관점을 의미합니다. 하나의 Aspect는 하나 이상의 Advice와 이들이 적용될 Pointcut을 포함할 수 있으며, 특정한 관점(로깅, 보안 등)의 구현을 담당합니다.



🔊 Advisor

Advisor는 Spring AOP에서 사용되는 특정 용어로, 하나의 Advice와 이를 적용할 Pointcut의 조합을 의미합니다. Advisor는 Aspect의 간소화된 형태로 볼 수 있으며, Spring AOP에서는 이 용어가 자주 사용됩니다.



🔊 Weaving

Weaving은 Advice를 Target의 Join Point에 적용하는 과정을 의미합니다. 이 과정은 컴파일 시간, 로드 시간, 또는 런타임에 수행될 수 있으며, AOP 프레임워크에 따라 다를 수 있습니다. Spring AOP에서는 주로 런타임에 프록시 객체를 통해 이루어집니다.



🔊 AOP Proxy

AOP Proxy는 AOP를 구현하기 위해 생성된 프록시 객체를 의미합니다. 이 프록시는 Target 객체를 감싸고, 해당 객체에 대한 메서드 호출을 가로채어 Advice를 적용한 후 실제 객체의 메서드를 호출합니다. Spring AOP에서는 JDK 동적 프록시 또는 CGLIB 프록시를 사용하여 이를 구현합니다.

About

Spring AOP 에 대하여 정리하기.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages