본문 바로가기
Java/Spring

[Spring] 스프링 AOP(관점지향 프로그래밍, Aspect-Oriented-Programming)

by WaterPunch 2021. 5. 24.

1. 관점 지향 프로그래밍(AOP: Aspect-Oriented-Programming)?

1-1 AOP 개요

- 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것

- 시스템을 핵심관심사(Core Concern)와 횡단관심사(Cross-cutting Concern)로 구분하여 설계와 구현을 한다

핵심관심사 시스템의 목적에 해당하는 주요 로직
횡단관심사 시스템의 여러 부분에 걸쳐 공통적이고 반복적으로 필요로 하는 처리내용.
대표적으로 로깅, 보안, 트랜잭션 관리, 예외처리 등

 

- 시스템의 여러 영역에 걸쳐 공통적이고 반복적으로 적용된 횡단관심사를 분리하여

  별도의 모듈에서 설계, 구현, 운영하는 프로그래밍 기법

- 애플리케이션 코드에서 공통적인 기능을 분리해 내는 것이라고 말할 수 있음

AOP는 "OOP(객체지향 프로그래밍)을 더욱 OOP답게 한다"

AOP 적용 전


AOP 적용 후


1-2 AOP 주요용어

  • Aspect (애스팩트)
    - AOP의 단위가 되는 횡단관심사를 의미
    - ex) '로그를 출력한다', '예외를 처리한다', '트랜잭션을 관리한다'
  • JoinPoint (조인포인트)
    - 횡단관심사가 실행될 지점이나 시점 (메서드 실행이나 예외 발생 등)
    - 스프링 프레임워크의 AOP에서는 메서드 단위로 JoinPoint를 잡는다
  • Advice (어드바이스)
    - 횡단관심사를 실제로 처리하는 부분, 특정 JoinPoint에서 실행되는 코드
    - Before, After Returning, After Throwing, After, Around 가 있다 (밑에서 설명)
  • Pointcut (포인트컷)
    - 여러 JoinPoint 중 실제로 Advice를 적용할 곳을 선별하기 위한 표현식(expression)
    - 일종의 JoinPoint의 그룹이라고 볼 수 있음
    - 스프링 AOP에서는 Pointcut을 정의할 때 XML 기반 설정 방식으로 Bean 정의 파일을 만들거나, Annotation 기반 설정 방식으로 소스코드에 주석 형태로 정의
  • Weaving (위빙)
    - 애플리케이션의 적절한 시점에 Aspect를 적용하는 것을 말함
    - 스프링 AOP는 기본적으로 실행시점에 위빙한다
  • Target (타깃)
    - Aspect가 적용된 객체
    - Advice Object라고도 한다

 

1-3 Spring AOP Advice의 유형

어드바이스 실행 시점 설명
Before JoinPoint 실행 전 예외가 발생하는 경우만 제외하고 항상 실행
After Returning JoinPoint 정상 실행 후 예외가 발생 > 실행 X
After Throwing JoinPoint 실행> 예외 발생시 예외가 발생하지 않고 정상적으로 종료 > 실행 X
After JoinPoint 처리 완료 후 실행 예외 발생이나 정상 종료 상관없이 항상 실행
Around JoinPoint 전후 실행 위 네가지 Advice를 모두포함해서 모든시점에서 실행

 

2. 스프링 AOP

- 스프링 프레임워크 안에는 AOP를 지원하는 모듈로 스프링 AOP가 포함돼 있다

① DI 컨테이너에서 관리하는 Bean 들을 타깃(Target)으로 Advice를 적용하는 기능이 있음

② JoinPoint에 Advice를 적용하는 방법은 Proxy 객체를 만들어서 대체하는 방법을 씀

③ Advice가 적용된 이후, DI 컨테이너에서 Bean을 꺼내보면 원래 있던 Bean 인스턴스가 아니라 Proxy 형태로 Advice 기능이 덧입혀진 Bean이 나온다

- 스프링 AOP에는 AspectJ라는 AOP 프레임워크가 포함돼 있다,

  (※ AspectJ : Aspect와 Advice를 정의하기 위한 Annotation 이나 Pointcut 표현 언어(Pointcut Expression Language)로 Weaving 메커니즘을 제공하는 역할)

- 스프링 AOP는 실행시점의 위빙을 기본적으로 지원

- 컴파일이나 클래스 로드 시점에 위빙을 하기 위한 추가적인 설정을 따로하지 않아도 됨

반응형

댓글