Spring

[Spring]AOP 개요__개발공부 87일차

하체는 스쿼트 2022. 7. 12. 21:45

 

AOP란?

 

스프링을 배울때는 목적을 잊지 않는것이 중요하다.

'왜 AOP를 사용할까?'
근본적인 물음에  대한 대답을 잊지 않고 공부한다면 좀더 수월할 것이다.

 

AOP를 사용하는 이유는

웹페이지로 따진다면 '공통적인 부분'을 모듈화 시키는 과정이라고 생각하면 이해하기 좀더 쉬울것같다.

 

공통기능을 장착시키는 느낌이다.


 

Aspect Oreinted Programming : 관점 지향적 프로그래밍 기법(방법)

공통 기능 + 핵심 기능
 - 2가지 관점
        1) 공통 부분 : 인증처리 부분, 트랜잭션, 보안 부분
                == 공통 관심 사항 (cross-cutting-concern)
    
         2) 본연의 업무(로직 부분) : 글쓰기, 글수정, 글삭제 부분
                == 핵심 관심 사항 (core concern)
    
           예) 로그인(인증)
               글 쓰기 > write.do > WriteHandler 세션 인증 null > 로그인 요청 이동
               글 수정 > edit.do > EditHandler 세션 인증 null > 로그인 요청 이동
               글 삭제 > delete.do > DeleteHandler 세션 인증 null > 로그인 요청 이동
    
           예) 계좌 이체
               1. A 통장 10000원 인출
               2. B 통장 100원 입금
                   트랜잭션 처리
    

 

AOP 용어
(***중요***)

 

Aspect        Advice        Weaving        Joinpoint        Pointcut

 

1) Aspect :공통기능
2) Advice :공통 기능 [언제] 핵심 기능에 적용할지를 정의
                 전/후/전 + 후(5가지 종류)
3) Weaving : Advice를 핵심 로직 코드에 삽입(적용) 하는것                                                             
4) Joinpoint : Advice를 적용할 수 있는 지점
5) Pointcut : Advice를 실제 적용한 지점

 

 

 

세 가지의 Weaving 방식

 

1) 컴파일
2) 클래스 로딩 시
***3) 런타임 시 ***    

스프링은 프록시(proxy) 기반의 AOP만 지원하기 떄문에 JointPoint는 메서드만 사용할 수 있다.
   
  

 

스프링 AOP 구현하는
3가지 방법


    1) 스프링 API 이용한 AOP 구현
    2) XML 스키마 기반의 POJO클래스를 이용한 AOP 구현O - xml 파일
    ***3) AspectJ에서 정의한 @Aspect 어노테이션 기반의 AOP 구현 O
   
   

 

 

Advice 종류

 

언제 적용하느냐에따라 종류가 달라진다.
    1)전 Before Advice
    2)후 After Advice
    3) After Throwing Advice
    4) After Returning Advice
    5)전 + 후 Around Advice
  

 

AspectJ 를 사용한
pointcut 표기법

 

pointcut="exexcution(수식어패턴? 리턴타입패턴 클래스이름패턴?메서드이름패턴(파라미터패턴))

 

 

[ XML 스키마 기반 AOP 구현 ]

 

1단계 :  스프링 AOP를 사용하기 위해 jar 의존파일 추가

           com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

 

2단계 : aop.advice 패키지에 있는              
                 ㄴ before,after,around advice  3가지   --      삭제
                

=> before,after,around advice를 대신할 공통 기능을 구현할 클래스(LogPrintProfiler)를 만든다.
   

      aop.LogPrintProfiler.java 
                      ㄴ trace() 구현 - Around Advice
         
3)    xml 설정 파일 
    ㄴ aop 설정하는 태그
        => Aspect(공통기능)를 설정
        => Advice를 어떤 Pointcut(적용하는 지점)에 적용할지를 설정(지정)

 

p209

 

 

[p204~ p209 정독 + 예제]

 

스프링을 배울때는 목적을 잊지 않는것이 중요하다.

왜 AOP를 사용할까?
근본적인 물음에  대한 대답을 잊지 않고 공부한다면 좀더 수월할 것이다.