반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 엘라스틱서치
- effectivejava
- 스프링핵심원리
- 예제로 배우는 스프링 입문
- 스프링 핵심원리
- Effective Java 3
- 코딩테스트
- 이펙티브자바
- 자바스크립트
- 알고리즘정렬
- 알고리즘
- Effective Java
- JavaScript
- 티스토리챌린지
- 이차전지관련주
- 김영한
- 오블완
- 카카오
- Spring
- 스프링
- 클린아키텍처
- 스프링부트
- ElasticSearch
- kubernetes
- java
- Sort
- 카카오 면접
- 이펙티브 자바
- 자바
- k8s
Archives
- Today
- Total
Kim-Baek 개발자 이야기
[백기선 - 예제로 배우는 스프링 입문] 스프링 AOP 본문
인프런에서 백기선 님의 [예제로 배우는 스프링 입문] 을 듣고 정리한 내용입니다
AOP 소개
흩어진 코드를 한 곳으로 모아
흩어진 AAAA 와 BBBB
class A {
method a () {
AAAA -> AAA
오늘은 7월 4일 미국 독립 기념일이래요.
BBBB -> BB
}
method b () {
AAAA -> AAA
저는 아침에 운동을 다녀와서 밥먹고 빨래를 했습니다.
BBBB -> BB
}
}
class B {
method c() {
AAAA -> AAA
점심은 이거 찍느라 못먹었는데 저녁엔 제육볶음을 먹고 싶네요.
BBBB -> BB
}
}
흩어져 있는 것을 바꾸려면, 모두 찾아가서 바꿔야하는 문제가 생겨
모아 놓은 AAAA 와 BBBB
class A {
method a () {
오늘은 7월 4일 미국 독립 기념일이래요.
}
method b () {
저는 아침에 운동을 다녀와서 밥먹고 빨래를 했습니다.
}
}
class B {
method c() {
점심은 이거 찍느라 못먹었는데 저녁엔 제육볶음을 먹고 싶네요.
}
}
class AAAABBBB {
method aaaabbb(JoinPoint point) {
AAAA
point.execute()
BBBB
}
}
다양한 AOP 구현 방법
-
컴파일 A.java ----(AOP)---> A.class (AspectJ)
-
바이트코드 조작 A.java -> A.class ---(AOP)---> 메모리 (AspectJ)
-
프록시 패턴 (스프링 AOP)
프록시 패턴
- Cash , CashPerf 예제가 있는데, 기존에 결제를 하는 Cash 클래스는 변화하지 않았다. 하지만 CashPerf 안에서 Cash를 가져다 쓰면서 앞 뒤로 성능을 측정하는 코드가 들어갔다. 그렇게 되면 CashPerf 를 사용함으로 써, 기존의 Cash 코드의 변화 없이 앞 뒤에 새로운 기능이 추가된다.
- @Transactional 을 붙이면 해당 클래스 앞 뒤로 트랜잭션을 설정하는 코드가 들어가게 된다.
AOP 적용 예제
@LogExecutionTime 으로 메소드 처리 시간 로깅하기
@LogExecutionTime 애노테이션 (어디에 적용할지 표시 해두는 용도)
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {
}
실제 Aspect (@LogExecutionTime 애노테이션 달린곳에 적용)
@Component
@Aspect
public class LogAspect {
Logger logger = LoggerFactory.getLogger(LogAspect.class);
@Around("@annotation(LogExecutionTime)")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
Object proceed = joinPoint.proceed();
stopWatch.stop();
logger.info(stopWatch.prettyPrint());
return proceed;
}
}
반응형
'개발 > Spring' 카테고리의 다른 글
[백기선 - 스프링 프레임워크 핵심 기술] 스프링 소개 (0) | 2020.09.21 |
---|---|
[백기선 - 예제로 배우는 스프링 입문] 스프링PSA (0) | 2020.09.20 |
[백기선 - 예제로 배우는 스프링 입문] 스프링 IoC (0) | 2020.09.20 |
[백기선 - 예제로 배우는 스프링 입문] 프로젝트 살펴보기 ( Pet Clinic ) (0) | 2020.09.20 |
[카카오 면접] 스프링의 예외 처리 (0) | 2020.09.19 |
Comments