일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 다이나믹 프로그래밍
- 렌더링 파이프라인
- 스케줄링
- 백준
- 다이나믹프로그래밍
- 영속성
- DirectX 12
- Direct12
- 멀티쓰레드
- 멀티프로세서
- 병행성
- 락
- 병행성 관련 오류
- 디자인패턴
- directx
- 알고리즘
- 그리디 알고리즘
- 그리디알고리즘
- codility
- 동적계획법
- 자료구조
- 운영체제
- I/O장치
- 파일시스템 구현
- DirectX12
- 컨디션 변수
- OS
- 타입 객체
- 프로그래머스
- 쓰레드
- Today
- Total
기록공간
AOP(Aspect Oriented Programming) 본문
※ 공통의 관심 사항을 적용해서 발생하는 의존 관계의 복잡성과 코드 중복을 해소해 주는 프로그래밍 기법
AOP의 개념
주 업무를 실행할 때 보조적인 업무(주 업무 실행 시간 체크, 로그 기록 등)가 진행되어야 한다. 만약, 주 업무가 여러 개이고 동일한 보조 업무가 진행되어야 한다면, 보조 업무 부분은 중복된 코드가 될 수 밖에 없다. 이런 중복 요소를 제거하고, 보조 업무를 보다 독립적인 방법으로 실행할 수 있도록 구성하는 것을 AOP 기법이라고 한다.
AOP 관련 주요 용어
-
보조 업무(cross-cutting concern) : 주 업무 실행 시 발생하는 보조적인 업무. 주 업무와 분리 및 결합이 쉽게 될 수 있도록 만들어야 한다.
-
주 업무(core concern, primary concern) : 핵심적인 기능을 수행하는 부분. 사용자의 요청에 대한 기본적인 수행 및 결과 반환을 수행해야 한다.
-
Advice : 언제 어떤 공통 관심 기능(보조 업무)을 적용할지 결정하는 방법. 순서에 따라 세 가지로 나뉜다.
-
Before Advice : 보조 업무가 주 업무 실행 전에 수행되는 경우
-
After Advice : 보조 업무가 주 업무 실행 후에 수행되는 경우
-
Around Advice : 보조 업무가 주 업무 실행 전과 후에 수행되는 경우
-
-
Proxy : 주 업무를 실행하는 객체와 동일한 모양을 가진 가짜 객체. 사용자가 주 업무를 실행하는 객체를 찾아가는 것이 아닌, proxy를 찾아가도록 지정하게 된다. proxy 내부에서 보조 업무를 실행한 후, 주 업무를 호출하도록 하면 외부에서 볼 때, 주 업무를 실행하는 것과 같은 결과가 나오도록 할 수 있다.
-
JoinPoint : proxy 내부에서 주 업무를 호출하는 경우에 특정 지점에만 호출되도록 할 수 있다.
-
Weaving : advice를 주 업무에 적용하는 과정을 부르는 명칭
-
Aspect : 여러 주 업무 객체에 공통적으로 적용되는 공통 관심 사항(보조 업무)을 aspect 라고 한다.
(보조 업무 == cross-cutting concern == aspect == 공통 관심 사항 == 공통 업무)
AOP 진행 순서
사용자 프록시 보조업무 주업무
(client) (proxy) (cross-cutting concern) (core concern)
○------------------------------------------------------------------------------->○
●----------①-------->●
●-------②------->●
●---------------------------③------------------------>●
●<-------------------------④--------------------------●
●--------⑤------>●
○<--------------------------------------------------------------------------------○
●<---------⑥---------●
'BackEnd > Spring' 카테고리의 다른 글
[Spring 에러] Log4j cannot be resolved to a type (0) | 2021.03.06 |
---|---|
[Spring 에러] cvc-complex-type.2.3 (0) | 2021.03.06 |
스프링의 특징과 의존성 주입 (0) | 2021.02.16 |
DI(Dependency Injection) (0) | 2020.12.21 |
Spring Framework 이해 (0) | 2020.12.21 |