- AOP가 필요한 상황
- AOP 적용
- 다음으로
<스프링 입문 강의 - 25강 AOP가 필요한 상황>
* 시나리오
- [목표] 모든 메서드의 호출 시간을 측정하고 싶음
- [방안] 각 메서드마다 시간 측정 로직을 추가함
- [참고] 이 때 exception이 발생해도 실행되어야 하기 때문에 finally에 작성
- [문제1] 시간 측정 코드는 핵심 비즈니스 로직이 아니고 공통 관심 사항이므로, 핵심 관심 사항과 공통 관심 사항이 섞여 유지보수가 어려워짐
- [문제2] 시간 측정 로직은 별도 공통 로직으로 만들기 어려움
- [문제3] 시간 측정 로직을 변경하기 어려움
* 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항 (core concern)
<스프링 입문 강의 - 26강 AOP 적용>
* AOP (Aspect Oriented Programming)
- 공통 관심 사항과 핵심 관심 사항을 분리하는 것
@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 구현
- @Aspect 애노테이션 추가
- @Bean으로 등록 또는 @Component로 컴포넌트 스캔 사용
- @Around로 적용할 범위 지정
* 동작 방법
- proxy라는 기술로 가짜 빈을 사용
- 기존에는 memberController가 memberService를 직접 호출
- AOP를 적용하면, 스프링 컨테이너가 스프링 빈을 등록할 때 가짜 memberService를 세워둠
- joinPoint.proceed()를 호출하면 그 때 진짜 memberService를 호출
<스프링 입문 강의 - 27강 다음으로>
* 개발자가 해야할 일
- 우리는 스프링을 만드는 개발자가 아니기 때문에 거대한 스프링의 모든 것을 세세하게 알 필요는 없음
- 스프링을 활용하여 실무에서 발생하는 문제를 잘 해결하는 것이 훨씬 중요
- 따라서 핵심 원리를 이해하고, 문제 발생시 어디부터 찾으면 될지, 필요한 부분을 찾아 사용하는 능력이 중요
'프레임워크 > Spring' 카테고리의 다른 글
[Spring] JpaRepository의 delete (0) | 2022.04.04 |
---|---|
[Spring] @Transactional과 propagation (0) | 2022.04.04 |
[인프런][스프링 입문] 21~24강 (0) | 2022.03.08 |
[인프런][스프링 입문] 17~20 강 (0) | 2022.03.05 |
[인프런][스프링 입문] 13~16 강 (0) | 2022.03.04 |