더북(TheBook)

1.1.4.2 스프링과 관점 지향 프로그래밍

AOP(Aspect-Oriented Programming)는 애플리케이션의 여러 부분에 공통으로 적용되는 로직인 크로스커팅 로직(crosscutting logic)을 한 곳에서 구현하고 해당 로직을 애플리케이션 전반에서 자동으로 적용할 수 있게 해줍니다. 스프링의 AOP는 대상 객체에 동적 프록시를 생성하고 크로스커팅 로직을 수행하도록 구성된 어드바이스(Advice)를 그 객체에 위빙(weeving)하는 방식을 사용합니다. JDK 동적 프록시의 속성에 따라 대상 객체는 AOP 어드바이스를 적용할 메서드를 선언하는 인터페이스를 구현해야 합니다. 또 다른 인기 있는 AOP 라이브러리는 이클립스 AspectJ9 프로젝트로 객체 생성, 클래스 로딩, 강력한 크로스커팅 지원과 같이 보다 강력한 기능을 제공합니다. 스프링과 AOP 개발자에게 희소식은 2.0 버전부터 스프링은 AspectJ와의 강력한 연동 기능을 제공한다는 것입니다. 다음은 몇 가지 주요 내용입니다.

AspectJ 스타일의 포인트컷 표현식 지원

@AspectJ 애너테이션 스타일의 스프링 AOP를 사용한 위빙 지원

AspectJ에서 구현된 애스펙트를 통한 DI 지원

스프링 ApplicationContext 내에서 로드타임 위빙 지원

Note 스프링 프레임워크 3.2 버전부터 자바 구성에 @AspectJ 애너테이션을 사용할 수 있도록 지원됩니다.

 

AOP의 구현체는 두 종류가 있으며, 스프링 AOP로 애플리케이션의 크로스커팅 문제를 충분히 해결할 수 있습니다. 하지만 더 복잡한 요구사항을 처리할 때 AspectJ를 사용할 수 있으며 스프링 AOP와 AspectJ는 동일한 스프링 기반 애플리케이션에서 혼용해 사용할 수 있습니다.

AOP는 다양한 애플리케이션에 적용할 수 있습니다. 전통적인 AOP 예제에서 제공하는 전형적인 예제는 로깅과 관련된 것이지만, AOP는 단순히 애플리케이션 로깅 정보를 기록하는 것보다 더 다양하게 사용할 수 있습니다. 실제로 AOP는 스프링 프레임워크 내에서 트랜잭션 관리와 같은 다양한 용도로 사용됩니다. 스프링 AOP는 5장에서 자세하게 설명합니다. 여기서는 스프링 프레임워크와 애플리케이션에서 AOP를 활용하는 법을 배우고, AOP 성능을 확인해보며 기존 기술이 AOP보다 더 적합한 분야를 살펴봅니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.