Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
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
Archives
Today
Total
관리 메뉴

Everything has an expiration date

04 [AOP(Aspect Oriented Programming)] 본문

[Framework] Concept

04 [AOP(Aspect Oriented Programming)]

Jelly-fish 2024. 1. 9. 15:13

■■■ 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

























'[Framework] Concept' 카테고리의 다른 글

03 [DI(Dependency Injection)]  (1) 2024.01.09
02 [Spring Framework 환경설정]  (0) 2024.01.09
01 [Spring Framework 이해하기]  (2) 2024.01.04