스프링 AOP란?
AOP는 프로그래밍에서 공통의 관심사(cross-cutting concerns)를 핵심 로직으로부터 분리하여 모듈화하는 패러다임이다. 예를 들어, 로깅, 트랜잭션 관리, 보안 검사와 같은 기능은 여러 클래스 또는 메소드에 걸쳐 공통적으로 나타나는데, 이러한 기능을 별도의 모듈(Aspect)로 분리하고, 필요한 시점에 적용(Weaving)하는 것이 AOP이다.
스프링 AOP의 주요 구성 요소
- Aspect: 공통 기능을 정의한 모듈
- Advice: Aspect의 구체적인 동작 방식 (예: 메소드 호출 전후에 수행할 로직)
- Pointcut: Advice가 적용될 위치를 지정하는 표현식
- Join Point: Advice가 적용될 수 있는 지점 (예: 메소드 실행)
스프링 AOP 구현 방법
스프링 AOP는 주로 프록시 패턴을 사용하여 구현된다. 이는 AOP를 적용하려는 객체의 프록시(대리자)를 생성하고, 해당 프록시를 통해 Aspect의 Advice를 적용하는 방식이다.
Aspect 구현 예제
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class LoggingAspect {
@Before("execution(* com.example.service.*.*(..))")
public void logBeforeServiceMethods() {
System.out.println("Service method is about to execute");
}
}
위 코드는 서비스 메소드가 실행되기 전에 로그를 출력하는 간단한 Aspect를 정의한다.
스프링 설정
@EnableAspectJAutoProxy 어노테이션을 추가하여 AOP를 활성화한다.
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
// 필요한 빈 구성
}
스프링 AOP의 활용
스프링 AOP를 사용하면 다음과 같은 부가 기능을 애플리케이션에 쉽게 통합할 수 있다:
- 로깅: 시스템의 실행에 대한 로그를 남긴다.
- 보안: 메소드 실행 전에 사용자의 권한을 확인한다.
- 트랜잭션 관리: 데이터베이스 트랜잭션의 시작과 종료를 관리한다.
스프링 AOP는 애플리케이션의 핵심 로직과 부가 기능을 명확히 분리할 수 있게 해준다. 이를 통해 코드의 재사용성과 유지보수성을 향상시킬 수 있으며, 애플리케이션 전반의 일관성을 유지하는 데 큰 도움이 된다.
'Java, Spring' 카테고리의 다른 글
| [Spring Boot] Setter를 무분별하게 사용하면 안되는 이유 (0) | 2021.01.21 |
|---|---|
| [Spring Boot] 필터(Filter)와 인터셉터(Interceptor)의 차이 (0) | 2021.01.21 |
| [Spring Boot] @Component 와 @Bean의 차이 (0) | 2021.01.21 |
| [Spring Boot] IoC(Inversion Of Control)란 무엇인가? : 스프링 부트에서의 IoC의 역할 (0) | 2021.01.21 |
| [Spring Boot] Dependency Injection : DI의 개념과 스프링이 DI를 지원하는 방법 (0) | 2021.01.21 |