AOP, AspectJ

calis_ws·2024년 1월 3일
0

(Spring AOP와 비교하여) AspectJ의 도입 시점은 어느 시점이 될까요? 본인 만의 생각을 알려주세요.

Spring AOP와 AspectJ 비교하기
https://logical-code.tistory.com/118

Spring AOP

AOP(Aspect-Oriented Programming)은 관점 지향 프로그래밍으로, 프로그램의 핵심 로직과 횡단 관심사를 분리하여 모듈화하는 프로그래밍 패러다임이다.

주요 용어

Aspect : 횡단 관심사를 모듈화한 단위. 메서드 실행 전/후, 예외 발생 등과 같은 특정 지점에서 실행될 수 있는 코드를 포함

Join Point : 어스펙트가 적용될 수 있는 지점. 메서드 호출, 예외 발생 등

Advice : 어스펙트의 특정 조인 포인트에서 실행되는 코드

Pointcut : 어스펙트가 적용될 메서드들을 선택하는 표현식

특징

  • AOP는 OOP(객체 지향 프로그래밍)을 보완하며 코드의 재사용성과 유지보수성을 향상시키는 데 목적이 있다.

  • 도입 시점은 런타임 시 이며, IoC 컨테이너가 Bean을 생성하고 런타임 시에 프록시를 생성하여 AOP를 적용한다.

  • Spring AOP 는 간단한 설정을 통해 쉽게 도입할 수 있으며, 대부분의 상황에서 충분한 성능을 제공한다.

AOP 의 Runtime

AOP에서 런타임은 어드바이스(Advice)가 실제로 적용되는 시점을 가리킨다. (프로그램이 실행되는 동안)

AOP는 주로 프록시 객체를 사용하여 핵심 로직에 관점(Aspect)을 동적으로 추가한다. 이때, 프록시 객체는 핵심 로직을 감싸고 있어, 어드바이스가 필요한 지점에서 해당 어드바이스가 동작하도록 한다.

런타임에 적용되기 때문에, AOP를 사용하는 코드는 컴파일 시에는 어떠한 변화가 없다.

AspectJ

AspectJ(Aspect-Oriented Programming for Java)는 Java 언어에 대한 강력한 AOP 확장 및 도구 집합이다. AOP의 기본 개념을 효과적으로 지원하며, 컴파일 시간에 코드를 조작하여 어드바이스를 적용한다.

특징

  • 다양한 어드바이스 유형과 포인트컷 표현식을 제공하여 프로그래머가 코드에 간편하게 적용할 수 있게 한다.

  • AspectJ 는 컴파일 시에 바이트 코드를 조작하여 AOP를 적용한다. 따라서 런타임 시에 프록시를 생성하는 것이 아니라 컴파일 시에 변경이 이루어진다.

  • 도입 시점은 컴파일 시 이며, AspectJ는 별도의 컴파일 단계를 거쳐 코드에 적절한 어스펙트(Aspect)를 적용한다.

  • AspectJ 는 높은 수준의 성능과 강력한 기능을 제공하지만, 설정과 사용이 복잡할 수 있다.

AspectJ 의 Compile Time

AspectJ에서 컴파일은 Aspect를 소스 코드에 적용하는 과정을 의미한다.

AspectJ는 소스 코드를 컴파일할 때, 즉 빌드할 때 Aspect를 적용하고 적절한 지점에 어드바이스를 삽입한다.

컴파일 시에 AspectJ는 어드바이스를 추가한 코드를 생성하고, 이렇게 생성된 코드가 프로그램이 실행되는 동안 동작하게 된다.

컴파일 타임 : 소스 코드를 컴파일하여 실행 파일 또는 바이트 코드를 생성하는 시간

정리

Spring AOP와 AspectJ는 모두 애플리케이션에서 관점 지향 프로그래밍을 지원하는 기술이지만 도입 시점에서 차이가 있다.

AspectJ 는 높은 수준의 유연성을 필요로 하는 복잡한 시나리오에서 선택할 수 있다. 그러나 대부분의 경우 Spring AOP로 충분하며, 간단한 설정과 사용이 가능하다는 장점이 있다.

profile
반갑습니다람지

0개의 댓글