AOP가 필요한 상황

모든 메소드의 호출 시간을 측정하고 싶다고 해서 메소드에 다 추가해버리면 다음과 같은 문제 생긴다.
1.핵심 관심사항이 아니다
2.공통 관심사항이다.
3.시간 측정 로직과 비지니스 로직이 섞여 유지보수가 어렵다.
4.시간을 측정하는 로직을 별도의 공통 로직으로 만들기 어렵다.

해결 방법 : AOP 적용하기
공통 관심 사항과 핵심 관심사항을 분리하고 원하는 곳에 공통 관심사항을 적용하면 된다.

기존 의존 관계

가짜 멤버 서비스를 만들어서 시간 측정을 하고 joinPoint.proceed()를 통해서 실제 멤버 서비스를 실행한다.

AOP 적용 후 전체 그림은 이렇게 된다.

실제로 Proxy가 주입되는지 콘솔에 출력해보면 아래처럼 가짜 멤버서비스가 만들어짐을 알 수 있다.
AOP를 스프링빈에 등록할 때 컴포넌트 스캔과 SpringConfig에 직접 등록하는 방법이 있는 데 실무에서는 후자를 선호한다.
@Aspect
@Component
public class TimeTraceAop {
}
이렇게 컴포넌트 스캔을 해도 되지만 선호하는 방법은 아래와 같다.
@Configuration
public class SpringConfig {
@Bean
public TimeTraceAop timeTraceAop(){
return new TimeTraceAop();
}
}
@Service @Repository 같은건 정형화되어있는데 AOP의 경우 정형화되어있기보단 이거 AOP네 딱 하고 인지하는게 더 좋기 때문에 직접 등록한다. SpringConfig 보고 AOP 존재를 알아채도록 하는게 좋다
'Springboot' 카테고리의 다른 글
| 스프링 핵심 원리-기본편 섹션 2. 스프링 핵심 원리 이해1 정리 (0) | 2024.03.15 |
|---|---|
| 스프링 핵심 원리-기본편 섹션 1. 객체 지향 설계와 스프링 정리 (0) | 2024.03.15 |
| 김영한 스프링 입문 섹션 6.스프링 DB 접근 기술 정리 (0) | 2024.03.09 |
| 김영한 스프링 입문 섹션 5.회원 관리 예제-웹 MVC 개발 정리 (0) | 2024.03.08 |
| 김영한 스프링 입문 섹션 4.컴포넌트 스캔과 자동 의존관계 설정 정리 (1) | 2024.03.08 |