오늘이라도
[VII. AOP] 25. AOP 적용 본문
반응형
https://github.com/upcake/hello-spring
* 오늘의 단축키 & 기능
1. AOP 적용
- AOP : Aspect Oriented Programming
- 공통 관심 사항 (cross-cutting concern) vs 핵심 관리 사항 (core concern) 분리
- 시간 측정 AOP 등록
//AOP로 사용할 때 붙는 어노테이션
@Aspect
//component-scan으로 사용해도 되나 config에 등록해서 사용하는 것을 더 선호한다
@Component
public class TimeTraceAop {
//실행 대상 등록 : 모든 패키지에 적용한다
//* 패키지명..밑에있는거클래스명등등에게(파라미터타입)
@Around("execution(* com.upcake.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");
}
}
}
- 스프링 설정에 빈 등록해서 사용해도 되고 컴포넌트 스캔으로 사용해도 된다
// 이런 식으로 설정에 등록해서 사용해도 된다.
// @Bean
// public TimeTraceAop timeTraceAop() {
// return new TimeTraceAop();
// }
- 적용된 로그
- 해결
① 회원가입, 회원 조회 등 핵심 관심사항과 시간을 측정하는 공통 관심 사항을 분리한다.
② 시간을 측정하는 로직을 별도의 공통 로직으로 만들었다.
③ 핵심 관심 사항을 말끔하게 유지할 수 있다.
④ 변경이 필요하면 이 로직만 변경하면 된다.
⑤ 원하는 적용 대상을 선택할 수 있다.
2. 스프링의 AOP 동작 방식 설명
- 프록시 : 가짜 스프링 Bean 이라고 생각하면 된다
반응형
'인프런 > 스프링 입문 (김영한)' 카테고리의 다른 글
[VII. AOP] 24. AOP가 필요한 상황 (0) | 2022.01.13 |
---|---|
[VI. 스프링 DB 접근 기술] 23. 스프링 데이터 JPA (0) | 2022.01.13 |
[VI. 스프링 DB 접근 기술] 22. JPA (0) | 2022.01.13 |
[VI. 스프링 DB 접근 기술] 21. 스프링 JdbcTemplate (0) | 2022.01.10 |
[VI. 스프링 DB 접근 기술] 20. 스프링 통합 테스트 (0) | 2022.01.10 |