일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 스프링
- github
- 컴퓨터공학
- IT
- 알고리즘
- 세마포어
- Effective Java
- OS
- 신입사원
- Public
- 정보처리기사
- 메모리
- 깃
- CS
- 우리카드
- package-private
- 이펙티브 자바
- 프로그래밍
- 컴퓨터과학
- 운영체제
- java
- 자바
- 개발
- 신입
- spring
- 디지털
- 스터디
- 깃허브
- 뮤텍스
- 공채
Archives
- Today
- Total
주니어 개발자 성장기
6. AOP란? 본문
AOP란
공통 관심 사항(cross-cutting concerns)과
핵심 관심 사항(core concerns) 중에서
공통 관심 사항을 축약할 수 있도록 도와주는 기술이다.
공통 관심 사항이란, 비즈니스 로직에서 공통적으로 필요한 항목들(메서드의 호출 시간 측정)을 말하고
핵심 관심 사항은 비즈니스 로직에서 다른 비즈니스와 구분되게 해주는 핵심적인 것이라고 할 수 있다.
메서드가 호출되면 AOP가 이를 인터셉트해서 코드를 중간 중간에 실행해주고
어떤 때에 인터셉트 할지 안할지를 쉽게 프로그래밍 할 수 있다.
그럼 어떻게 적용할까?
@Aspect
@Component
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");
}
}
}
@Aspect, @Component 어노테이션을 사용했는데, 컴포넌트 스캔을 이용하는 대신에 수동으로 스프링빈으로 등록해줄 수도 있다.
또한 @Around 어노테이션으로 적용범위를 정한다.
원리는?
스프링 컨테이너가 대상이 되는 클래스의 복제 클래스(프록시)를 만들어 낸다.
복제된 클래스의 메서드가 끝나면 실제 클래스의 메서드가 호출되는 방식이다.
-> 프레임워크마다 AOP의 방식은 다르나, 스프링은 상기한 바와 같다고 한다.
'Spring > 입문' 카테고리의 다른 글
5. Jdbc의 비교 (0) | 2022.07.05 |
---|---|
4. 스프링 빈 등록 (0) | 2022.07.01 |
3. Test Case 작성 (0) | 2022.06.30 |
2. 인텔리제이 단축키, 편의 명령어 (0) | 2022.06.30 |
1. 웹 개발 기초 (0) | 2022.06.27 |