AOP : Aspect Oriented Programming 의 약자로 공통 관심 사항과 핵심 관심 사항을 분리 시킨 것
AOP가 없으면 ?
모든 클래스의 시간을 측정을 한다고 생각하면,
각각의 클래스 마다 시간 측정 로직을 입력을 해야하며 클래스가 많으면 많은 시간과 노동이 필요하다.
하지만 AOP를 적용하여 원하는 곳에 공통 관심 사항을 적용하면 편리하다.
모든 클래스의 시간을 측정하는 AOP를 만들어보자.
패키지에 aop폴더를 만들고 TimeTraceAOP class를 만들고 혹시 @Aspect 어노테이션에 오류가 뜨면
아래 dependency를 build.gradle에 추가를 한다.
implementation 'org.springframework.boot:spring-boot-starter-aop'
@Aspect
@Component //빈으로 등록
public class TimeTraceAop {
@Around("execution(* com.toy.project..*(..))") //공통 관심사항
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 timsMs = finish - start;
System.out.println("END: " + joinPoint.toString()+ " " + timsMs + "ms"); }
}
}
@Around()어노테이션 안에는 공통으로 적용 시킬 범위를 입력을 한다.
필자는 모든 패키지 전 범위로 설정을 했다.
클래스가 실행될 때 마다 실행시간을 확인할 수 있다.
스프링 AOP 동작 방식 설명
AOP는 Porxy(가짜 memberService)를 만든다.
빈을 등록할 때 프록시->joinPoint.proceed()-> 실제 Servce실행이 실행이 된다.
출처 - 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
'Programming > Back-end Language' 카테고리의 다른 글
[Spring] Test 코드를 작성해야 하는 이유/방법 (0) | 2022.04.13 |
---|---|
[Spring] DI 의존성 주입이란 ? (0) | 2022.04.13 |
[Spring] @ResponseBody은 무엇일까? (0) | 2022.03.28 |
[Spring]Failed to load resource: the server responded with a status of 404 () 오류 해결 방법 (0) | 2022.03.24 |
[개발환경] Spring boot+React 연동하기 (0) | 2022.03.23 |