04 [AOP(Aspect Oriented Programming)]
■■■ AOP(Aspect Oriented Programming) ■■■
※ 공통의 관심 사항(업무)을 적용해서 발생하는 의존 관계의 복잡성과
코드 중복을 해소해 주는 프로그래밍 기법.
(보조업무가 주인공. 주 업무의 자리를 치워서 보조업무를 쌓고 주 업무를 부른다.)
(계산기 : 덧셈, 뺄셈 ...)
(덧셈 요청 → 처리 시간 체크, 로그 기록(보조))
○ AOP 개념
주 업무를 실행할 때 보조적인 업무(주 업무 실행 시간 체크, 로그 기록 등)가 진행되어야 한다.
만약, 주 업무가 여러 개이고, 동일한 보조 업무의 수행이 진행되어야 한다면
보조 업무 부분은 중복된 코드가 될 수 밖에 없다.
이런 중복 요소를 제거하고 보조 업무를 보다 독립적인 방법으로 실행할 수 있도록
구성하는 것을 AOP 기법이라고 한다.
( * concern : 영향을 미치다)
( * 보조 업무를 행으로 잘랐기 때문에 cross-cutting!!!)
○ AOP 관련 주요 용어
- 보조 업무(cross-cutting concern)
주 업무 실행 시 발생하는 보조적인 업무.
주 업무와 분리 및 결합이 쉽게 이루어질 수 있도록 만들어야 한다.
- 주 업무(core concern, primary concern)
핵심적인 기능을 수행하는 부분.
사용자의 요청에 대한 기본적인 수행 및 결과 반환을 해야 한다.
- Advice
언제 어떤 공통 관심 기능(보조 업무, cross-cutting concern)을 적용할지 결정하는 방법.
Before Advice, After advice, Around Advice 등이 있다.
·Before Advice
보조 업무가 주 업무 실행 전에 수행되는 경우
·After Advice
보조 업무가 주 업무 실행 후에 수행되는 경우
·Around Advice
보조 업무가 주 업무 실행 전과 후에 수행되는 경우
( * 프록시(Proxy)란
'대리', '대신'이라는 뜻을 가지며,
프로토콜에 있어서는 대리 응답 등에서 사용하는 개념이다. )
( * 사용자는 주 업무를 찾아가는 것이 아니라, 보조업무(프록시)를 찾아가는 것이다. )
- proxy
주 업무를 실행하는 객체와 동일한 모양을 가진 가짜 객체
사용자가 직접 주 업무를 실행하는 객체를 찾아가는 것이 아니라
proxy 를 찾아가도록 지정하게 된다.
proxy 내부에서 보조 업무를 실행한 후, 주 업무를 호출하도록 하면
외부에서 볼 때 주 업무를 실행하는 것과 같은 결과가 나오도록 할 수 있다.
- joinpoint
proxy 내부에서 주 업무를 호출하는 경우에 특정 지점에만 호출되도록 할 수 있다.
( * 주 업무, 보조업무 결합 - weaving)
- weaving
advice 를 주 업무에 적용하는 과정을 부르는 명칭.
- aspect
여러 주 업무 객체에 공통적으로 적용되는 공통 관심 사항(보조 업무)을
aspect 라고 한다.
○ AOP 진행 순서
사용자 프록시 보조업무 주업무
(client) (proxy) (cross-cut..) (core concern)
○-------------------------------------------------->○
●---------①--------->●
●---------②--------->●
●-------------③------------>●
●<------------④-------------●
●---------⑤--------->●
○<--------------------------------------------------○
●<---------⑥---------●
① 사용자는 proxy 객체에 접근한다.
사용자 입장에서는 proxy 객체가 주 업무(core concern) 객체와 동일하게 생각한다.
② proxy 객체 내부에서 보조 업무(cross-cutting concern)를 진행하게 된다.
주 업무 실행 전에 수행되는 보조 업무는
Before Advice, Around Advice 가 있다.
③ proxy 객체 내부에서 주 업무(core concern)를 호출한다.
주 업무가 진행된다.
④ 주 업무가 결과값을 반환한다.
⑤ proxy 객체 내부에서 보조 업무(cross-cutting concern)를 진행하게 된다.
주 업무 실행 후에 수행되는 보조 업무는
After Advice, Around Advice 가 있다.
⑥ 사용자에게 결과값을 반환한다.
-------------------------------------------------------------------------------------------
■■■ AOP 개념 실습 01 ■■■
※ AOP 기법을 적용하기 이전 형태로 개념 실습
○ 실습 성격 및 주요사항
1. 콘솔 프로젝트
2. 기본적인 산술 연산 처리
3. AOP 기법을 적용하지 않은 상태로
보조 업무(시간 측정, 로그 기록 처리)를 수행하는 실습을 진행한다.
4. SpringPrj05
5. 로그 및 스톱워치 기능 사용을 위해 관련 jar 파일을 등록하여
실습을 진행할 수 있도록 한다.
( * 스프링 AOP를 적용하려는 api가 아니라
로그나 스톱워치를 등록하기 위한 api이다. )
○ 등록해야 할 jar 파일
- 경로 1 → C:\s-f-3.0.2-with-docs\dist
·파일1 → org.springframework.core-3.0.2.RELEASE.jar
- 경로 2 → C:\s-f-3.0.2-dependencies\org.apache.commons \com.springsource.org.apache.commons.logging\1.1.1
·파일2 → com.springsource.org.apache.commons.logging-1.1.1.jar
○ 물리적 파일 구성
1. Calculator.java → 인터페이스
2. CalculatorImpl.java → 클래스. 주 업무, 보조 업무 적용.
3. Main.java → 클래스. main() 메소드를 포함하는 클래스.
---------------------------------------------------------------------------------
■■■ AOP 개념 실습 02 ■■■
※ AOP 기법을 적용하는 형태로 개념 실습
○ 실습 성격 및 주요사항
1. 콘솔 프로젝트
2. 기본적인 산술 연산 처리
3. AOP 기법을 적용하여
보조 업무(시간 측정, 로그 기록 처리)를 수행하는 실습을 진행한다.
4. SpringPrj06
5. 로그 및 스톱워치 기능 사용을 위해 관련 jar 파일을 등록하여
실습을 진행할 수 있도록 한다.
( * 스프링 AOP를 적용하려는 api가 아니라
로그나 스톱워치를 등록하기 위한 api이다. )
○ 등록해야 할 jar 파일
- 경로 1 → C:\s-f-3.0.2-with-docs\dist
·파일1 → org.springframework.core-3.0.2.RELEASE.jar
- 경로 2 → C:\s-f-3.0.2-dependencies\org.apache.commons \com.springsource.org.apache.commons.logging\1.1.1
·파일2 → com.springsource.org.apache.commons.logging-1.1.1.jar
○ 물리적 파일 구성
1. Calculator.java → 인터페이스(기존 소스코드 그대로 활용)
2. CalculatorProxy.java → 프록시(proxy) 클래스
(추가~!!!) 보조 업무 적용 및 주 업무 호출 과정
3. CalculatorImpl.java → 클래스. 주 업무 적용.
4. Main.java → 클래스. main() 메소드를 포함하는 클래스.
---------------------------------------------------------------------------------
■■■ AOP 개념 실습 03 ■■■
※ Spring AOP 기법을 적용하는 형태로 개념 실습
○ 실습 성격 및 주요사항
1. 콘솔 프로젝트
2. 기본적인 산술 연산 처리
3. Spring AOP 기법을 적용하여
보조 업무(시간 측정, 로그 기록 처리)를 수행하는 실습을 진행한다.
4. SpringPrj07
5. 로그 및 스톱워치 기능 사용을 위해 관련 jar 파일을 등록하여
실습을 진행할 수 있도록 한다.
○ 등록해야 할 jar 파일
(로그 및 스톱워치 사용을 위해 등록해야 할 jar 파일
+ 스프링 AOP 기법을 적용하기 위한 jar 파일)
- 경로 1 → C:\s-f-3.0.2-with-docs\dist
·파일 1 → org.springframework.asm-3.0.2.RELEASE.jar
·파일 2 → org.springframework.beans-3.0.2.RELEASE.jar
·파일 3 → org.springframework.context-3.0.2.RELEASE.jar
·파일 4 → org.springframework.core-3.0.2.RELEASE.jar
·파일 5 → org.springframework.expression-3.0.2.RELEASE.jar
·파일 6 → org.springframework.aop-3.0.2.RELEASE.jar
- 경로 2 → C:\s-f-3.0.2-dependencies\org.apache.commons
\com.springsource.org.apache.commons.logging\1.1.1
·파일 7 → com.springsource.org.apache.commons.logging-1.1.1.jar
- 경로 3 → C:\s-f-3.0.2-dependencies\org.aopalliance
\com.springsource.org.aopalliance\1.0.0
·파일 8 → com.springsource.org.aopalliance-1.0.0.jar
○ 물리적 파일 구성
1. Calculator.java → 인터페이스(기존 소스코드 그대로 활용)
2. CalculatorAspect.java → 보조 업무 클래스
(추가~!!!) 보조 업무 적용 및 주 업무 호출 과정
3. CalculatorImpl.java → 클래스. 주 업무 적용. (기존 소스코드 그대로 활용)
4. Main.java → 클래스. main() 메소드를 포함하는 클래스.
5. config.xml → 스프링 환경 설정 파일.
(추가~!!!) 객체 생성 및 DI 설정.
---------------------------------------------------------------------------------
■■■ AOP 개념 실습 04 ■■■
※ AOP Advice
·Advice
언제 어떤 공통 관심 사항(보조 업무, cross-cutting concern)을
적용할지 결정하는 방법.
Before Advice, After Advice, Around Advice 등이 있다.
·Before Advice
보조 업무가 주 업무 실행 전에 수행되는 경우.
·After Advice
보조 업무가 주 업무 실행 후에 수행되는 경우.
·Around Advice
보조 업무가 주 업무 실행 전과 후에 수행되는 경우.
○ 실습 성격 및 주요사항
1. 콘솔 프로젝트
2. 기본적인 산술 연산 처리
3. Spring AOP 기법을 Advice 로 구분하여
보조 업무(시간 측정, 로그 기록 처리)를 수행하는 실습을 진행한다.
4. SpringPrj08
5. 로그 및 스톱워치 기능 사용을 위해 관련 jar 파일을 등록하여 실습을 진행할 수 있도록 한다.
6. 추가로 Spring AOP 기법을 적용하기 위한 jar 파일을 등록하여 실습을 진행할 수 있도록 한다.
○ 등록해야 할 jar 파일
(로그 및 스톱워치 사용을 위해 등록해야 할 jar 파일
+ 스프링 AOP 기법을 적용하기 위한 jar 파일)
- 경로 1 → C:\s-f-3.0.2-with-docs\dist
·파일 1 → org.springframework.aop-3.0.2.RELEASE.jar
·파일 2 → org.springframework.asm-3.0.2.RELEASE.jar
·파일 3 → org.springframework.beans-3.0.2.RELEASE.jar
·파일 4 → org.springframework.context-3.0.2.RELEASE.jar
·파일 5 → org.springframework.core-3.0.2.RELEASE.jar
·파일 6 → org.springframework.expression-3.0.2.RELEASE.jar
- 경로 2 → C:\s-f-3.0.2-dependencies\org.apache.commons
\com.springsource.org.apache.commons.logging\1.1.1
·파일 7 → com.springsource.org.apache.commons.logging-1.1.1.jar
- 경로 3 → C:\s-f-3.0.2-dependencies\org.aopalliance
\com.springsource.org.aopalliance\1.0.0
·파일 8 → com.springsource.org.aopalliance-1.0.0.jar
○ 물리적 파일 구성
1. Calculator.java → 인터페이스(기존 소스코드 그대로 활용)
2. CalculatorAspect.java → 보조 업무 클래스
보조 업무 적용 및 주 업무 호출 과정
3. CalculatorImpl.java → 클래스. 주 업무 적용. (기존 소스코드 그대로 활용)
4. Main.java → 클래스. main() 메소드를 포함하는 클래스.
5. config.xml → 스프링 환경 설정 파일.
객체 생성 및 DI 설정.
6. CalculatorBeforeAdvice.java → 추가. BeforeAdvice
---------------------------------------------------------------------------------
■■■ AOP 개념 실습 05 ■■■
※ AOP Advice
·Advice
언제 어떤 공통 관심 사항(보조 업무, cross-cutting concern)을
적용할지 결정하는 방법.
Before Advice, After Advice, Around Advice 등이 있다.
·Before Advice
보조 업무가 주 업무 실행 전에 수행되는 경우.
·After Advice
보조 업무가 주 업무 실행 후에 수행되는 경우.
·Around Advice
보조 업무가 주 업무 실행 전과 후에 수행되는 경우.
○ 실습 성격 및 주요사항
1. 콘솔 프로젝트
2. 기본적인 산술 연산 처리
3. Spring AOP 기법을 Advice 로 구분하여
보조 업무(시간 측정, 로그 기록 처리)를 수행하는 실습을 진행한다.
4. SpringPrj09
5. 로그 및 스톱워치 기능 사용을 위해 관련 jar 파일을 등록하여 실습을 진행할 수 있도록 한다.
6. 추가로 Spring AOP 기법을 적용하기 위한 jar 파일을 등록하여 실습을 진행할 수 있도록 한다.
○ 등록해야 할 jar 파일
(로그 및 스톱워치 사용을 위해 등록해야 할 jar 파일
+ 스프링 AOP 기법을 적용하기 위한 jar 파일)
- 경로 1 → C:\s-f-3.0.2-with-docs\dist
·파일 1 → org.springframework.aop-3.0.2.RELEASE.jar
·파일 2 → org.springframework.asm-3.0.2.RELEASE.jar
·파일 3 → org.springframework.beans-3.0.2.RELEASE.jar
·파일 4 → org.springframework.context-3.0.2.RELEASE.jar
·파일 5 → org.springframework.core-3.0.2.RELEASE.jar
·파일 6 → org.springframework.expression-3.0.2.RELEASE.jar
- 경로 2 → C:\s-f-3.0.2-dependencies\org.apache.commons
\com.springsource.org.apache.commons.logging\1.1.1
·파일 7 → com.springsource.org.apache.commons.logging-1.1.1.jar
- 경로 3 → C:\s-f-3.0.2-dependencies\org.aopalliance
\com.springsource.org.aopalliance\1.0.0
·파일 8 → com.springsource.org.aopalliance-1.0.0.jar
○ 물리적 파일 구성
1. Calculator.java → 인터페이스(기존 소스코드 그대로 활용)
2. CalculatorAspect.java → 보조 업무 클래스
보조 업무 적용 및 주 업무 호출 과정
3. CalculatorImpl.java → 클래스. 주 업무 적용. (기존 소스코드 그대로 활용)
4. Main.java → 클래스. main() 메소드를 포함하는 클래스.
5. config.xml → 스프링 환경 설정 파일.
객체 생성 및 DI 설정.
6. CalculatorBeforeAdvice.java → 추가. Before Advice
7. CalculatorAfterThrowing.java → 추가. After Throwing Advice