일반적으로 Java Application은 웹, 비즈니스, 데이터 등 여러 계층으로 응용 프로그램을 개발한다.
로직을 관점에 따라 공통 관심 사항(cross-cutting concern)과 핵심 관심 사항(core concern)으로 나눌 수 있고
핵심 관심 사항은 우리가 적용하고자 하는 핵심 비즈니스 로직이며, 공통 관심 사항은 핵심 로직을 실행하기 위해 행하는 로직으로 DB connect, transaction, 보안, 인증, 로깅 등을 예로 들 수 있다.
공통 관심 사항은 각 계층에 반복적으로 사용하는 코드들로 이들을 각 계층에서 개별적으로 구현한다면 매우 비효율적이다.
➡️ 공통 관심 사항을 모듈화하고 핵심 비즈니스 로직에서 분리하여 재사용한다.
공통 관심 사항(cross-cutting concern), 핵심 관심 사항(core concern) 분리
공통 관심 사항을 모아두고 필요한 곳에 적용
@Aspect 어노테이션 사용
AOP
@Aspect
public class AAop {
//타겟팅
@Around("execution(*com.example..*(..))")//com.example 패키지 하위 전부 적용
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
//...
}
}
스프링빈 등록
@Configuration
public class SpringConfig {
@Bean
public AAop aAop() {
return new AAop();
}
}
AOP 적용 전
AOP 적용 후 의존관계
AOP 적용 전체 흐름)
프록시memberController -> memberConroller -> 프록시memberService -> 실제memberService -> 프록시memberRepository -> 실제memberRepository
인프런 스프링부트입문 - 김영한 참조