개발 기록

> [AOP] 1. 개념 본문

Spring

> [AOP] 1. 개념

1z 2022. 10. 4. 17:54

1. 개념 

(1) AOP (aspect-oriented programming, 관점 지향 프로그래밍)

관점 지향 프로그래밍 
: 횡단 관심사(creoos-cutting concern) 의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임. 

 

코드 그 자체를 수정하지 않고 기존의 코드에 추가 동작(어드바이스)을 추가함으로써 수행한다.
ex. "함수의 이름이 'set'으로 시작하면 모든 함수 호출을 기록한다" 와 같이 어느 코드가 포인트컷(pointcut) 사양을 통해 수정되는지 지정

 

 

(2) Spring AOP 특징

표준 자바 클래스로 작성

Runtime 시점에 Advice가 적용

메서드 단위의 조인 포인트만 가능

 

2 . 용어 

Aspect 
   여러 개체에 걸쳐 적용되는 관심사의 모듈화
Join point 
 
advice 적용이 가능한 지점

Spring AOP는 메서드 실행 지점을 나타낸다.
Advice 

   조인 포인트에서 삽입되어 동작되어질 코드

- Around : 메서드 호출 이전, 이후, 예외 발생 등 모든 시점에서 적용 가능한 Advice 정의
- Before : 메서드 실행전에 적용되는 실행
- After returning : 메서드가 정상적으로 실행된 후에 실행
- After throwing : 예외를 발생시킬 때 적용되는 Advice를 정의 (catch와 비슷)
Pointcut 

   join point 집합을 의미.  어떤 join point 을 사용할 것이지를 결정하기 위해 패턴 매칭(정규식)을 이용한다.
     
어드바이스는 포인트컷과 일치하는 조인 포인트에서 실행된다.

- @Pointcut(within()) : 해당하는 패키지에 있는 모든 자바 파일에 적용
- @Pointcut(execution())  :   해당하는 모든 메소드에 적용
- @Pointcut(bean())  : 해당하는 bean객체에 모두 적용
Introduction 
   타겟 클래스에 코드 변경없이 신규 메소드나 멤버변수를 추가하는 기능
Target object 
   advice 의 대상이 되는 객체

 * Spring AOP는 런타임 프록시를 사용하여 구현되므로 이 객체는 항상 프록시 객체이다.
AOP proxy 
   AOP 기능을 구현하기 위한 프록시 객체

Spring 에서 AOP 프록시는 JDK 동적 프록시 또는 CGLIB 프록시이다. (Default CGLIB)
Weaving 
    지정된 객체에 Aspect 를 적용해서 새로운 프록시 객체를 생성하는 과정을 의미

- 컴파일 시 생성 AspectJ
* 핵심관심사 모듈 사이에 횡단 관심사 코드 삽입되어 Aspect가 적용된 최종 바이너리 생성
- 클래스 로딩 시 생성  :  AspectWerkz
- 런타임 시 생성  : Spring AOP
* 스 코드나 바이너리 파일의 변경없이 프록시를 이용하여 AOP를 지원하는 방식으로
메소드 호출시에만 AOP 적용 가능

 

3 . AOP  활용 

(1) AOP 가 해결 하는 문제

1. 코드 엉킴(Code Tangling) 

: 코드 엉킴은 관련 없는 관심사가 단일 모듈이나 클래스에 얽혀 있을 때 발생하는데, AOP는 이러한 문제를 분리하여 코드 가독성과 유지 관리성을 향상시킨다.

2. 코드 분산

: 공통 코드를 중앙 집중화하여 중복을 줄이고 수정 및 유지 관리를 쉽게 만든다.

3. 비효율적인 오류 처리

: 중앙 집중식 오류 처리를 구현하여 각 모듈이나 클래스의 예외를 개별적으로 처리할 필요성을 줄인다.

4. 보안 및 권한 부여

: 보안 관련 코드를 애플리케이션 전체에 분산시키지 않고 일관되고 중앙 집중화된 방식으로 보안 및 권한 부여 정책을 시행한다.

 

 

(2) AOP 를 사용하는 예

1. 로깅

: 메서드 시작 및 종료 지점에 대한 중앙 집중식 로깅을 구현

2. 모니터링

: 서비스하는 각 메서드의 소요 시간 체크 하여 병목현상 확인 

3. 캐싱

: 메서드에 캐싱 기능을 추가하여  반복 호출을 줄이고 성능 향상

4. 트랜잭션

 : 데이터베이스 트랜잭션을 관리하여 해당 트랜잭션이 올바르게 시작, 커밋 또는 롤백되도록 보장

5. 유효성 검사

6. 수정내역 관리

7. 보안/예외처리 

8. AOP 를 사용한 데이터베이스 트랜잭션 라우팅 알고리즘

 

 

 

 

 
 

 

 

 

 

 

 

참고

https://velog.io/@dnjwm8612/AOP-Weaving-Proxy

https://galid1.tistory.com/498

https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:fdl:aop:aspect

https://backtony.github.io/spring/2021-12-29-spring-aop-2/