본문 바로가기
Spring

AOP

qbang 2021. 9. 24.

AOP 개요와 용어

핵심기능과 부가기능

  • 핵심기능(Core Concerns): 업무 로직을 포함하는 기능
  • 부가기능(Cross-cutting Concerns): 핵심기능을 돕는 부가적인 기능(ex. 로깅, 보안)

AOP 개요

  • 애플리케이션에서의 관심사를 분리(핵심적인 기능에서 부가적인 기능을 분리)함으로써 객체지향적인 가치를 지킬 수 있도록 돕는 개념
  • 분리한 부가기능을 Aspect라는 모듈형태로 만들어 설계

Aspect

  • 부가기능을 정의한 코드인 Advice와 어디에 적용할지 결정하는 Point Cut을 합친 개념
  • 구분된 부가기능 애스팩트를 런타임 시 필요한 위치에 동적으로 참여할 수 있게 함

AOP 용어

  • 타겟: 핵심기능을 담고 있는 모듈, 즉 부가기능을 부여할 대상
  • 어드바이스: 타겟에 제공할 부가기능을 담고 있는 모듈
  • 조인 포인트: 어드바이스가 적용될 수 있는 위치
  • 포인트 컷
    • 어드바이스를 적용할 타겟의 메서드를 선별하는 정규표현식
    • 표현식은 execution으로 시작하고, 메서드의 Signature를 비교하는 방법을 주로 사용
  • 에스펙트
    • AOP의 기본 모듈
    • 싱글톤 형태의 객체로 존재
  • 어드바이저
    • 애스팩트와 동일한 개념이나 Spring AOP에서만 사용되는 특별한 용어
  • 위빙
    • 포인트컷에 의해서 결정된 타겟의 조인 포인트에 부가기능(어드바이스)을 삽입하는 과정

 

AOP의 특징 및 구현방식

Spring AOP의 특징

  • 프록시 기반 AOP를 지원(타겟 객체를 감싸는 프록시를 만들어 제공)
    • 프록시는 어드바이스를 타겟 객체에 적용하면서 생성되는 객체이고, 런타임 때 생성됨
  • 프록시가 호출을 가로챔
    • 타겟 객체에 대한 호출을 가로챈 다음 어드바이스의 부가기능 로직을 수행하고 난 후에 타겟의 핵심기능 로직을 호출(전처리 어드바이스)
    • 또는 타겟의 핵심기능 로직 메서드를 호출한 후에 부가기능을 수행하기도 함
  • 메서드 조인 포인트만 지원
    • Spring은 동적 프록시 기반으로 AOP를 구현하므로 메서드 조인 포인트만 지원(핵심기능의 메서드가 호출되는 런타임 시점에만 부가기능 적용 가능)
    • 그러나 AspectJ 같은 AOP 프레임워크를 사용하면 객체의 생성, 필드 값의 조회와 조작, static 메서드 호출 및 초기화 등의 다양한 작업에 부가기능을 적용할 수 있음

Spring AOP의 구현 방식

  • XML 기반의 POJO 클래스를 이용한 AOP 구현
    • XML 설정 파일에 <aop:config>를 이용해서 애스팩트를 설정(즉, 어드바이스와 포인트컷을 설정)
  • @Aspect 어노테이션을 이용한 AOP 구현
    • Aspect 클래스는 어드바이스를 구현하는 메서드와 포인트컷을 포함
    • XML 설정 파일에 <aop:aspectj-autoproxy />를 설정

 

본 게시글은 Tacademy의 Spring Framework 수업 내용을 바탕으로 작성되었습니다.

'Spring' 카테고리의 다른 글

프로토타입 빈(Prototype Bean)  (0) 2021.10.09
JSON vs XML  (0) 2021.10.03
마이바티스(MyBatis)  (0) 2021.10.01
Spring Project 시작하기  (0) 2021.09.24
Spring Framework 개요  (0) 2021.09.24

댓글