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
- re.split
- spring security
- 백준 17626
- 백준 15685
- 백준 16236
- Spring Boot
- 웹어플리케이션 서버
- 백준 17779
- 백준
- 백준 파이썬
- JVM
- MySQL
- with recursive
- spring oauth
- JPA
- Kotlin
- spring cloud
- Coroutine
- java
- 프로그래머스
- 백준 19238
- MSA
- java 기술면접
- 파이썬
- 백준 16235
- 프로래머스
- sql 기술면접
- Spring
- 백준 16719
- springboot
Archives
- Today
- Total
시작이 반
[Spring] 11. AOP 본문
SMALL
강의 참고 : www.inflearn.com/roadmaps/373
AOP : Aspect Oriented Programming
공통 관심 사항 vs 핵심 관심 사항 분리
AOP가 필요한 상황
- 모든 메소드의 호출 시간을 측정하고 싶다면?
- 공통 관심사항(cross-cutting concern) vs 핵심 관심 사항(core concern)
- 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면?
모든 메소드마다 시간측정 로직을 설정해줘야한다...
문제
- 회원가입, 회원 조회에 시간을 측정하는 기능은 핵심 관심 사항이 아니다.
- 시간을 측정하는 로직은 공통 관심 사항이다.
- 시간을 측정하는 로직과 핵심 비지니스의 로직이 섞여서 유지보수가 어렵다.
- 시간을 측정하는 로직을 별도의 공통 로직으로 만들기 매우 어렵다.
- 시간을 측정하는 로직을 변경할 때 모든 로직을 찾아가면서 변경해야 한다.
-> 비효율
AOP 적용
package hello.hellospring.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class TimeTraceAop { //스프링 빈 등록해야함 or @Cmponent를 해줘야함
@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가 적용되야 하는 곳에 프록시라는 가짜를 만들어서 가짜 스프링 빈을 실제 앞에 세워놓고 가짜가 끝나면 진짜가 실행된다...?
LIST
'Programming > Spring' 카테고리의 다른 글
[Spring] @Controller @RestController (0) | 2021.01.25 |
---|---|
[Spring] @RequestMapping- @PostMapping @GetMapping (0) | 2021.01.25 |
[Spring] 10. 스프링 DB접근 기술 - H2 DB 설치, JDBC Template, JPA, 스프링 데이터 JPA (0) | 2021.01.21 |
[Spring] 9.회원 관리 예제 - 웹 MVC 개발 (0) | 2021.01.21 |
[Spring] 8.스프링 빈과 의존관계 (0) | 2021.01.20 |