본문 바로가기

SPRING/Spring

AOP

AOP(관점지향 프로그래밍)를 통해서

 중복 코드 제거/ 효율적인 유지보수/ 높은 생산성/ 재활용성 극대화/ 변화 수용이 용이 등의 이점

-** 중요개념 - 관심의 분리(Seperation of Cocerns)
기능을 비지니스 로직과 공통 모듈로 구분한 후, 

개발자의 코드 밖에서 필요한 시점에 비지니스 로직에 삽입하여 실행되도록 한다.

 

= 핵심 관점(비즈니스 로직)
 = 횡단관점 (트랜잭션, 로그, 권한 체크, 인증, 예외 처리 등)으로 관심의 분리를 실현

=>> DI가 의존성(new)의 주입이라면 AOP는 기능(logic)의 주입

예) 계좌이체, 입출금, 이자계산이라는 로직을 처리할 때,

모두 똑같이 로깅, 보안, 트랜잭션을 처리해줘야한다.

따라서, 모든 로직에 똑같은 코드가 반복적으로 삽입될 수 밖에 없다.

하지만 

AOP에서는 

로깅, 보안, 트랜잭션이라는 공통 관심(Aspect)을 따로 빼내어 

계좌이체, 입출금, 이자계산이라는 핵심 관심에 횡단으로 삽입해 주는 것

이렇게 각 객체별로 처리했던 것을 각 관점별로 외부에서 접근을 하는것이 AOP의 핵심이다.

즉 개발자는 계좌이체, 입출금, 이자계산과 같은 핵심 기능을 만들고, 

공통적인 관심 기능(로깅, 보안, 트랜잭션)을 처리하는 모듈을 분리해서 개발한 후,

 필요한 시점에 자동으로 공통적인 관심 기능이 삽입되도록 하는것이다.

 




applicationContext.xml

1. getPointcut은 

allPointcut과 같지만 get으로 시작하는 메소드만 포인트 컷으로 설정

 

2. allPointcut

리턴타입과 매개변수를 무시하고 com.spring.biz 패키지로 시작하는 클래스 중에서
       이름이 Impl로 끝나는 클래스의 모든 메소드를 포인트 컷으로 설정


* ADVICE - before/after/after-returninig/after-throwing/around
어드바이스를 통해서 트랜젝션을 언제 할 것인지 정할 수 있다.

 

 


 

*위빙(Weaving)

- 컴파일 타임 위빙, 로딩 타임 위빙, 런타임 위빙(스프링은 이것만 지원)


*Aspect or Advisor (AOP의 핵심)



내가 만들어 놓은 메소드들이 자동으로 조인 포인트로 됨  == 포인트 컷

메소드들은 포인트 컷으로 설정이 안되기 때문에 get 들만 포인트 컷으로 설정됨..


 


* Joinpoint

 

Advice를 적용 가능한 지점을 의미하며, 

메소드를 호출하는 '시점', 예외가 발생하는 '시점'과 같이 애플리케이션을 실행할 때 

특정 작업이 실행되는 '시점'을 의미한다.

 

스프링은 프록시를 이용해서 AOP를 구현하기 때문에 필드 값 변경에 대한 Joinpoint는 불가
메소드 호출에 대한 Joinpoint 가능

 

 

 


* Aspect
Advice와 Pointcut을 합쳐서 하나의 Aspect라고 한다.

 

여러 객체에 공통으로 적용되는 기능으로, 

즉 일정한 패턴을 가지는 클래스에 Advice를 적용하도록 지원할 수 있는 것을 Aspect라고 한다.
(트랜잭션 기능/로그 기능/보안 기능/인증 기능 등)

 

 

 




* Weaving
AOP에서 Joinpoint들을 Advice로 감싸는 과정을 Weaving이라고 한다.
Weaving 하는 작업을 도와주는 것이 AOP 툴이 하는 역할이다.

 

 



* Advice
Joinpoint에서 실행되어야 하는 코드, 공통 관심, 횡단 관점에 해당한다.
언제, 어떤 공통 관심 기능을 핵심 로직에 적용할 지를 정의 하고 있다.
[EX] 메소드 호출 전(언제)에 트랜잭션 시작(공통 기능)기능을 적용한다는 것을 정의

 

 

 


 

 


* Target
실질적인 비지니스 로직을 구현하고 있는 코드, 핵심 관점에 해당한다.
Advice를 받을 대상, 즉 객체로 비지니스 로직을 수행하는 클래스일수도 있지만, 프록시 객체(Object)가 될 수도 있다.

 

 

 




* Pointcut
Joinpoint의 부분 집합으로서 실제 Advice가 적용되는 Joinpoint를 나타낸다.
스프링에서는 정규식이나 AspectJ 문법을 이용해, Target 클래스와 Advice가 결합(Weaving)될 때 둘 사이의 결합 규칙을 정의할 수 있다.
[EX] Advice가 실행된 Target의 특정 메소드등을 지정

'SPRING > Spring' 카테고리의 다른 글

스프링 DI를 통해 알 수 있는 것  (0) 2021.09.23
DI란 무엇인가?  (0) 2021.08.09
import 후 Spring 프로젝트 설정  (0) 2021.07.31
STS 설정  (0) 2021.07.31