Spring AOP(Aspect Oriented Programming)는 크로스 커팅 관심사를 분리하여 모듈성을 높이는 프로그래밍 패러다임입니다. 이는 코드를 수정하지 않고 기존 코드에 추가적인 동작을 추가함으로써 이루어집니다. 이는 특히 로깅, 트랜잭션 관리, 보안 등과 같은 기능에서 유용합니다.
크로스 커팅 관심사(Crosscutting Concerns) 분리
여러 클래스나 메소드에 걸쳐 반복적으로 나타나는 코드를 별도의 모듈로 분리하자는 개념을 의미합니다.
예를 들어, 로깅, 보안, 트랜잭션 관리 등의 기능은 여러 클래스와 메소드에서 공통적으로 필요로 하는 기능입니다. 이런 기능들을 각각의 클래스나 메소드에서 구현하게 되면, 코드의 중복이 발생하고 유지보수가 어려워집니다.
이런 문제를 해결하기 위해 AOP는 이런 공통 기능을 별도의 Aspect라는 모듈로 분리하고, 이를 필요한 지점에 적용하는 방식을 사용합니다. 이렇게 하면 코드의 중복을 줄이고, 코드의 가독성과 유지보수성을 향상시킬 수 있습니다. 이것이 바로 "크로스 커팅 관심사를 분리한다"는 개념의 핵심입니다.
Spring AOP는 프록시 패턴을 기반으로 하며, 주요 개념은 다음과 같습니다:
- Aspect: 크로스 커팅 관심사를 모듈화한 것입니다. 예를 들어, 로깅은 여러 클래스와 메소드에 걸쳐 수행되므로 이를 Aspect로 모듈화할 수 있습니다.
- Join point: 프로그램에서 Aspect가 적용될 수 있는 지점입니다. Spring AOP에서 join point는 항상 메소드 실행입니다.
- Advice: Aspect가 join point에서 실행되는 코드입니다. 이는 Aspect의 실제 동작을 정의합니다.
- Pointcut: join point를 결정하는 표현식입니다. 이는 어떤 메소드에서 Advice가 실행될지를 결정합니다.
- Target Object: Advice가 적용되는 객체입니다.
- AOP Proxy: AOP 프레임워크에 의해 생성된 객체로, Aspect를 적용하여 Target Object를 감싸는 객체입니다.
- Weaving: Aspect를 Target Object에 연결하는 과정입니다. 이는 컴파일 시간, 로드 시간, 또는 런타임에 수행될 수 있습니다. Spring AOP에서는 런타임에 weaving이 수행됩니다.
사용예제
@Aspect
@Component
public class LoggingAspect {
@Around("execution(* com.example.myapp.*.*(..))")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("메서드 호출 전에 로그를 출력합니다.");
Object result = joinPoint.proceed(); // 원래의 메서드를 실행합니다.
System.out.println("메서드 호출 후에 로그를 출력합니다.");
return result;
}
}
반응형
'Java > Spring' 카테고리의 다른 글
[Spring]Model 객체와 @ModelAttribute (0) | 2024.04.02 |
---|---|
[Spring]MariaDB 연동 (0) | 2024.03.28 |
[Spring]JdbcTemplate (0) | 2024.03.28 |
[Spring] 스프링 빈 등록하는 방법 (0) | 2024.03.27 |
[Spring]window에서 bulid 후 실행 (0) | 2024.03.27 |