728x90
반응형
Spring Boot에서 AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)는 코드의 중복을 줄이고, 모듈성을 향상시키기 위한 강력한 도구입니다. AOP는 주로 애플리케이션의 로깅, 트랜잭션 관리, 보안, 예외 처리 등 횡단 관심사(Cross-Cutting Concerns)를 처리하는 데 사용됩니다.
AOP의 기본 개념
- Aspect(애스펙트): 횡단 관심사를 모듈화한 것입니다. 예를 들어, 로깅이나 트랜잭션 관리 기능이 하나의 Aspect가 될 수 있습니다.
- Join Point(조인 포인트): 애플리케이션 실행 중 특정 지점입니다. 메서드 호출이나 예외 처리 등 여러 종류의 Join Point가 있습니다.
- Advice(어드바이스): 특정 Join Point에서 실행될 코드를 정의합니다. Advice는 언제 실행되느냐에 따라 여러 종류로 나뉩니다.
- Before: 메서드 실행 전에 실행됩니다.
- After: 메서드 실행 후에 실행됩니다.
- Around: 메서드 실행 전후에 실행됩니다.
- After Returning: 메서드가 정상적으로 실행된 후에 실행됩니다.
- After Throwing: 메서드가 예외를 던진 후에 실행됩니다.
- Pointcut(포인트컷): 특정 Join Point를 지정하는 표현식입니다. 예를 들어, 특정 패키지나 클래스의 메서드를 타겟으로 설정할 수 있습니다.
- Weaving(위빙): Aspect와 실제 코드의 Join Point를 연결하는 과정입니다. 컴파일 타임, 로드 타임, 런타임에 이루어질 수 있습니다.
Spring AOP와 Spring Boot
Spring AOP는 런타임 위빙 방식을 사용하며, 프록시 패턴을 통해 AOP를 구현합니다. Spring Boot에서는 AOP 기능을 쉽게 사용할 수 있도록 설정을 간소화해줍니다.
예제: 로깅 Aspect 만들기
1. 의존성 추가
spring-boot-starter-aop 의존성을 pom.xml에 추가합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2. 로깅 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.demo..*(..))")
public void logBeforeMethod() {
System.out.println("Method execution started");
}
}
- @Aspect: 이 클래스가 Aspect임을 나타냅니다.
- @Component: Spring의 Bean으로 등록되도록 합니다.
- @Before("execution(* com.example.demo..*(..))"): Pointcut 표현식으로, com.example.demo 패키지 아래의 모든 메서드 실행 전에 logBeforeMethod 메서드를 실행하도록 합니다.
Pointcut 표현식
- execution(* com.example.demo..*(..)): com.example.demo 패키지와 그 하위 패키지에 있는 모든 메서드를 타겟으로 합니다.
- *: 반환 타입을 의미합니다. 여기서는 모든 반환 타입을 의미합니다.
- ..: 하위 패키지를 의미합니다.
- *(..): 모든 메서드와 모든 인수를 의미합니다.
Spring Boot 애플리케이션 클래스
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MySpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(MySpringBootApplication.class, args);
}
}
테스트를 위한 샘플 서비스 클래스
import org.springframework.stereotype.Service;
@Service
public class SampleService {
public void doSomething() {
System.out.println("Doing something...");
}
}
실행 및 결과
애플리케이션을 실행하고 SampleService의 doSomething 메서드를 호출하면, AOP의 Before Advice가 먼저 실행되어 "Method execution started" 메시지가 출력된 후 "Doing something..." 메시지가 출력됩니다.
결론
Spring Boot에서 AOP를 사용하면 애플리케이션의 횡단 관심사를 깔끔하게 분리하여 코드의 중복을 줄이고 유지보수를 쉽게 할 수 있습니다. AOP는 강력한 기능이므로, 필요한 곳에 적절히 사용하여 애플리케이션의 품질을 높일 수 있습니다.
728x90
반응형
'Spring' 카테고리의 다른 글
[Spring Boot] DI(Dependency Injection: 의존성 주입) 란 무엇인가? (0) | 2024.05.23 |
---|---|
[Spring Boot] Spring Boot에서 JWT 토큰 발급 및 인증 해보기!! (0) | 2024.05.23 |
Spring Native Image 란 무엇인가? (0) | 2024.01.28 |
[개념] Spring Framework와 Spring boot에 대해 알아보자! (0) | 2023.12.11 |
[Spring Boot] Spring Boot에 HTTP/2 적용하기 (0) | 2019.04.15 |