일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이클립스
- 배열
- spring
- Controller
- API
- Eclipse
- 상속
- Oracle
- 자료구조
- rpa
- Array
- Uipath
- db
- Thymeleaf
- React
- jquery
- Board
- 문자열
- SpringBoot
- html
- MVC
- string
- JDBC
- mysql
- 조건문
- jsp
- Scanner
- Database
- Java
- View
- Today
- Total
유정잉
🎀 AOP 본문
[ AOP란 ? ]
AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다.
관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다.
여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다.
[ AOP가 필요한 상황 ]
모든 메소드의 호출 시간을 남긴다면 ? 메서드가 1000개라면 메스데 1000개의 시작과 끝에 다 호출 메서드를 넣어야 함
근데 초단위로 했더니 갑자기 밀리세컨드로 다시 바꾸래 ! 그럼 또 더 복잡해진다 !!
그래서 AOP에서 호출 시간을 남기는 메서드를 만들어서 각각의 Controller & Service & Repository에 적용해주면 됨
즉, AOP에 호출 시간을 남기는 메서드를 저장해놓으면 -> Controller & Service & Repository에 다 적용됨
[ 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) ]
애플리케이션을 개발하면서 공통적으로 사용되는 기능들이 있다. 이러한 공통 기능에 대한 관심사를 바로 공통 관심 사항이라고 한다. 핵심 관심 사항은 애플리케이션의 공통 기능이 아닌 비즈니스 로직에 대한 관심사로 애플리케이션의 주목적을 달성하기 위한 핵심 로직에 대한 관심 사항을 뜻한다.
[ AOP @어노테이션 ]
@Component
@Aspect
@Around("execution(* hello.hellospring..*(..))") -> 하위 모든 패키지 적용
(ProceedingJoinPoint joinpoint)
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;
@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");
}
}
}
'개발자 공부 > 🎀 스프링 공부' 카테고리의 다른 글
🎀 스프링 기본 2 - 빈 등록과 조회 @Test, xml (1) | 2024.05.24 |
---|---|
🎀 스프링 기본 1 (0) | 2024.05.23 |
🎀 JDBC 연결 [ JPA ] (0) | 2024.05.21 |
🎀 H2 데이터베이스 설치 및 실행 (0) | 2024.05.21 |
🎀 스프링 환경 설정, 간단한 회원가입 빌드 작성 (0) | 2024.05.19 |