본문 바로가기
Spring Study

Aspect 와 Aspect J 의 차이

by xogns93 2024. 8. 23.

AspectAspectJ는 둘 다 애스펙트 지향 프로그래밍(AOP)과 관련이 있지만, 각각의 개념과 역할은 다릅니다. 다음은 이 두 가지의 차이점과 관련된 설명입니다.

1. Aspect

  • 개념: Aspect는 애스펙트 지향 프로그래밍(AOP)의 핵심 개념 중 하나로, 횡단 관심사(cross-cutting concern)를 모듈화한 것입니다. 예를 들어, 로깅, 트랜잭션 관리, 보안 검증 같은 기능들은 애플리케이션 전반에 걸쳐 여러 곳에서 필요할 수 있는데, 이러한 공통 기능을 Aspect로 캡슐화하여 관리할 수 있습니다.
  • 정의: Aspect는 AOP의 일부로서, Advice(적용할 코드)와 Pointcut(적용할 위치)를 포함합니다. Aspect는 코드베이스의 특정 시점이나 위치에서 자동으로 실행되도록 정의된 특정 동작들을 모아놓은 것입니다.
  • 예시:위 코드에서 LoggingAspect는 로깅 관련 횡단 관심사를 처리하는 Aspect입니다.
@Aspect public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") 
	public void logBefore(JoinPoint joinPoint) 
    	{ System.out.println("Method called: " + joinPoint.getSignature().getName()); } }

2. AspectJ

  • 개념: AspectJ애스펙트 지향 프로그래밍을 Java에 도입하기 위해 만들어진 프레임워크입니다. AspectJ는 애스펙트 지향 프로그래밍을 지원하는 강력한 도구로, Java 언어에 AOP 개념을 확장하여 지원합니다.
  • 역할: AspectJAspect를 정의하고 적용하는 데 필요한 문법과 도구를 제공합니다. 이는 Java와 통합되어 AOP를 활용한 애플리케이션을 구축할 수 있게 합니다. AspectJ는 단순한 @Aspect 애노테이션 기반 AOP 외에도, 더 강력하고 유연한 기능을 제공합니다.
  • 기능:
    • Pointcut 언어: AspectJ는 복잡한 Pointcut 정의를 위해 강력한 언어적 표현을 제공합니다.
    • Weaving: AspectJWeaving(위빙)이라는 과정을 통해 컴파일 타임, 클래스 로드 타임, 또는 런타임에 Aspect를 코드에 적용합니다.
    • 지원 도구: AspectJ는 독립적인 컴파일러(ajc), IDE 통합, 런타임 라이브러리 등 다양한 도구를 포함하여 AOP 기능을 지원합니다.
  • 예시: AspectJ에서 사용되는 문법은 Java의 기본 AOP와 유사하지만, 더 강력한 Pointcut 표현과 Advice의 결합이 가능합니다.
  • aspect LoggingAspect { pointcut logMethods() : execution(* com.example.service.*.*(..)); before() : logMethods() { System.out.println("Method called: " + thisJoinPoint.getSignature().getName()); } }

주요 차이점 요약

  1. Aspect:
    • AOP의 개념적인 부분으로, 횡단 관심사를 모듈화한 것입니다.
    • Java에서 @Aspect 애노테이션을 사용하여 정의됩니다.
    • 특정 동작을 애플리케이션 코드에 결합할 때 사용됩니다.
  2. AspectJ:
    • AOP를 Java에 도입하기 위해 만들어진 프레임워크 및 도구입니다.
    • 더 강력하고 유연한 AOP 기능을 제공하며, Java 언어를 확장하여 Aspect를 정의하고 적용할 수 있게 합니다.
    • 컴파일러(ajc), IDE 지원, 고급 Pointcut 언어 등을 포함한 전체적인 AOP 구현 도구를 제공합니다.

따라서 Aspect는 AOP의 개념적 단위이고, AspectJ는 이를 구현하고 활용할 수 있도록 돕는 도구와 프레임워크입니다.