일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- equals
- 최소신장트리
- BFS
- spring
- SSAFY
- Integer
- ==
- 완전탐색
- java
- back-end
- web
- ssafy서울
- HashMap
- DFS
- 시뮬레이션
- Prim
- 그래프
- Disjoint-set
- Web-BackEnd
- Floyd-Warshall
- cycle
- Kruskal
- Graph
- spring-boot
- 삼성청년SW아카데미
- bruteforce
- 구현
- MST
- Spring Framework
- Union-FInd
- Today
- Total
devlog
🌱Spring Framework : Aspect-Oriented Programming 본문
1. Aspect-Oriented Programming ?
Spring Framework의 핵심 개념중 하나인 Dependency Injection이 객체간의 결합도를 낮춰준다면 Aspected Oriented Programming은 모듈성을 증가시키는 것을 목적으로 사용되어진다.
AOP는 전체 어플리케이션 구현 기능을 두 가지로 구분한다.
Core Concern
📌 핵심 업무를 의미하며 해당 어플리케이션 만의 특정한 기능을 의미한다.
Cross-cutting Concern
📌 공통 업무를 의미하며 핵심 업무를 도와주는 반복적이고 부가적인 업무를 의미한다.
AOP의 중요개념은 공통 업무와 핵심업무를 분리하는 것으로 각각의 공통적인 부분들을 모듈화 하여 개발자가 핵심 업무에 집중할 수 있도록 하는 것을 목표로 한다.
2. AOP 관련 용어
Join Point
📌 어플리케이션을 실행할 때 특정 작업이 시작되는 시점으로 Advice를 적용 가능한 지점이다. 클래스의 인스턴스를 생성하는 시점이나, 메서드의 호출 시점 등과 같이 ~때 를 의미한다.
Point Cut
📌 여러개의 Join Point를 하나로 묶은 것으로 Point Cut으로 묶인 Join Point 들은 Advice를 공유한다.
Advice
📌 Join Point에 삽입되어 동작할 수 있는 공통 관심 사항의 코드로 메서드가 이 기능을 담당한다.
Aspect
📌 여러 객체에 공통으로 적용되는 공통 관심 사항 클래스로 Aspect = Advice + Point Cut 으로 나타낼 수 있다.
Target
📌 핵심 로직을 구현하는 클래스로, 공통 관심 사항을 적용 받게되는 대상이며 Advice가 적용되는 객체이다.
Weaving
📌 공통 관심 사항의 코드인 Advice를 핵심 관심 사항의 로직에 적용하는 것을 의미한다.
위의 용어들의 관계를 살펴보면 위의 그림과 같은 관계들이 성립되어진다.
3. Weaving
일반적으로 Weaving은 적용 시점에 따라서 3가지로 나뉘어진다.
📌 Compile-time Weaving
📌 Loading-time Weaving
📌 Runtime Weaving
Spring 에서 사용하는 Weaving 방식은 Runtime Weaving 방식으로 Proxy 를 사용한다.
Runtime에 Client 요청이 들어오면 Proxy가 먼저 확인하여 Advice를 거처야 하는지 판단하여 처리한다.
4. Advice Type
📌 Before : Target의 핵심 메소드 실행 전
📌 After : Target의 핵심 메소드 실행 후
📌 After Returning : Target의 핵심 메소드를 실행하고 값을 리턴한 후
📌 Round : Target의 핵심 메소드 실행 전 후
📌 After Throwing : Target의 핵심 메소드 실행 중 예외 발생시
5. Point-cut 표현식
위의 그림과 같은 규칙이 적용되어 지며 빨간색으로 표시한 요소들은 필수 요소들로 생략할 수 없다.
아래는 Point-cut 표현식 관련 예시들이다.
execution(void send* (String))
send로 시작하는 어떠한 메서드 중 String 타입의 단일 파라미터를 가지며 return
타입이 void
인 것
execution(* send(*))
메서드 이름이 send 이면서 단일 파라미터를 가지는 것
execution(* send(int, ..))
메서드 이름이 send 이면서 첫번째 파라미터는 int
형이고 추가적인 파라미터가 있을 수도 있다.
'Spring > 이론' 카테고리의 다른 글
IoC 컨테이너 : 스프링 IoC 컨테이너와 빈 (0) | 2020.08.11 |
---|---|
🌱Spring Framework : MyBatis (0) | 2020.05.26 |
🌱Spring Framework : Spring Web MVC (0) | 2020.05.19 |
🌱Spring Framework : Dependency Injection (0) | 2020.05.18 |
🌱Spring Framework : 스프링 프레임워크 구조 (0) | 2020.05.18 |