-
[Spring] AOP 알아보기 - AOP 소개Spring 2025. 12. 27. 15:41
관점 지향 프로그래밍(AOP, Aspect-Oriented Programming)은 애플리케이션 전반에 공통적으로 적용되어야 하지만, 핵심 비즈니스 로직과는 분리되어야 하는 기능(트랜잭션, 로깅, 보안 등)을 하나의 관점(Aspect)으로 모듈화하고, 이를 선언적으로 여러 지점에 적용할 수 있도록 지원하는 프로그래밍 패러다임입니다.
AOP는 코드의 중복을 줄이고 관심사의 분리를 강화함으로써, 비즈니스 로직을 보다 명확하고 순수하게 유지하는 것을 목표로 합니다.
1. AOP와 OOP의 관계
- 관점 지향 프로그래밍(AOP)은 객체 지향 프로그래밍(OOP)을 대체하는 것이 아니라, 보완하여 프로그램 구조를 바라보는 또 다른 방식을 제공합니다.
- OOP의 핵심 단위: 클래스(Class)
- AOP의 핵심 단위: 관점(Aspect)
AOP는 여러 타입과 객체에 걸쳐 공통적으로 나타나는 관심사(예: 트랜잭션 관리)를 모듈화할 수 있게 해줍니다. 이와 같이 비즈니스 로직과 같은 핵심 관심사와 구분되는 개념을 횡단 관심사라고 부릅니다.
2. Spring 프레임워크와 AOP
AOP 프레임워크는 Spring의 핵심 구성 요소 중 하나입니다. 하지만 Spring IoC 컨테이너는 AOP를 필수적으로 강요하지는 않습니다. 필요에 따라 개발자가 선택적으로 사용하는 개념입니다.
- 선택적 사용: 원하지 않는다면 AOP를 사용하지 않아도 됩니다.
- 상호 보완: 하지만 AOP와 Spring IoC를 함께 사용하면 매우 강력한 미들웨어 솔루션을 구축할 수 있습니다.
3. AspectJ Pointcut을 활용한 Spring AOP
Spring은 "어떤 로직(Aspect)을 어디에(Pointcut) 적용할 것인가"를 정의하는 방법을 두 가지 제공합니다.
- 스키마 기반 접근 방식: (XML 설정 방식)
- @AspectJ 어노테이션 스타일: (현재 주로 사용되는 방식)
두 스타일 모두 AspectJ의 포인트컷 언어를 사용하고 완벽한 타입의 어드바이스(Advice)를 제공하지만, 실제 위빙(Weaving, 결합) 과정은 Spring AOP를 통해 이루어집니다.
Spring AOP는 AspectJ의 포인트컷 표현식을 사용하지만, 기본 구현은 프록시 기반 런타임 AOP이며 AspectJ의 컴파일/로드타임 위빙과는 동작 방식이 다릅니다.
4. Spring에서 AOP의 주요 용도
Spring Framework에서 AOP는 주로 다음 두 가지 목적으로 사용됩니다.
- 선언적 엔터프라이즈 서비스 제공: 트랜잭션, 보안, 로깅 같은 엔터프라이즈 공통 기능을 비즈니스 코드에 직접 작성하지 않고, 애너테이션이나 설정만으로 선언해 적용할 수 있도록 지원하는 것입니다. 가장 대표적이고 중요한 것은 선언적 트랜잭션 관리(@Transactional)입니다.
- 사용자 정의 Aspect 구현: 사용자가 OOP를 AOP로 보완하여 자신만의 Aspect를 구현할 수 있게 합니다.
'Spring' 카테고리의 다른 글
[Spring] AOP 알아보기 - Spring AOP의 특징 (1) 2025.12.27 [Spring] AOP 알아보기 - AOP 개념 (0) 2025.12.27 [Spring] 서비스(Service) 레이어의 본질적인 역할과 책임 (0) 2025.12.20 [스프링] 안티패턴: 완화된 레이어드 아키텍처 (0) 2025.12.19 [스프링] 안티패턴: 양방향 레이어드 아키텍처 (0) 2025.12.19