💡 AOP란?
Aspect Oriented Programming의 약자로 '관점 지향 프로그래밍'이라고 합니다. 여러 곳에서 공통으로 사용되는 기능을 코드에 일일이 넣지 않고, 한 곳에서 작성한 후에 여러 메서드나 클래스에 자동으로 적용할 수 있게 하는 방법입니다.
👍 AOP의 장점
- 반복 코드 제거: 공통 기능(로그, 트랜잭션 등)을 별도로 관리할 수 있어 코드가 깔끔해집니다.
- 유지 보수 용이: 공통 기능을 한 곳에서 관리하므로 유지보수가 편리합니다.
⚙ 설정
@Bean
public TimeTraceAop timeTraceAop() {
return new TimeTraceAop();
}
SpringConfig에 Bean을 등록하거나
AOP클래스에서 @Componenet 어노테이션을 사용합니다.
시간 측정 AOP 클래스
package hello.hello_spring.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class TimeTraceAop {
@Around("execution(* hello.hellospring..*(..))") // 적용할 위치
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
System.out.println("START: " + joinPoint.toString());
try {
return joinPoint.proceed();
} finally {
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println("END: " + joinPoint.toString() + " " + timeMs + "ms");
}
}
}
AOP 적용 후 의존관계
프록시 객체란?
프록시 객체는 원래 객체를 감싸는 역할을 합니다. Spring AOP에서 프록시 객체는 실제 memberService 대신 작동하면서, AOP로 설정한 로직(시간측정, 로그기록 등)을 먼저 처리하고 나서 실제 memberService 메서드를 실행합니다.
메서드가 끝나면 프록시가 결과를 돌려주고, 후처리 작업을 진행합니다.
이를 통해 코드 수정 없이도 다양한 기능을 여러 메서드에 쉽게 적용할 수 있습니다~
'Spring' 카테고리의 다른 글
[Spring] 스프링 핵심 원리 (2) | 2024.11.20 |
---|---|
[Spring] 객체지향 설계와 스프링 (1) | 2024.10.30 |
[Spring] 스프링 데이터 JPA (1) | 2024.09.23 |
[Spring] JPA (3) | 2024.09.18 |
[Spring] JDBC - 스프링 DB 접근 기술 (2) | 2024.09.03 |