티스토리 뷰
728x90
AOP란 핵심 기능과 핵심적이지 않은 기능을 분리해서 '반복적이고 소모적이며 귀찮은' 일을 반복하지 말자는 의미의 기능이다.
부가적으로 코드의 가독성을 올려주며 재사용성을 올려준다.
스프링에서의 AOP는 런타임에 프록시 객체를 생성하여 공통 기능으로 삽입하는 방식으로 구현되어있다.
AOP의 주요 용어로는
Advice - 핵심 로직에 AOP를 언제 적용할 것인지 나타냄
JoinPoint - Advice를 적용할 지점을 나타낸다. (스프링에서는 프록시를 이용하기에 메서드에 대한 호출에 대해서만 가능)
Aspect - 여러 객체에 공통으로 적용되는 AOP를 말함
등등이 있다.
//AOP로 사용할 클래스라는 것을 명시
@Aspect
//클래스를 스프링 빈으로 등록
@Component
public class TimeTraceAop {
//com.spring의 하위 모든 패키지에서 아래 Aspect를 실행함
@Around("execution(* com.spring..*(..))")
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");
}
}
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Dap
- vim
- 배포
- RequestPart
- 아키텍처
- JavaScript
- 레디스
- 루나빔
- RequestParam
- ModelAttribute
- neovim
- 도커
- IDE
- lunarvim
- RequestBody
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함