AOP 의 개요와 용어

핵심기능과 부가기능

  • 업무 로직을 포함하는 핵심 기능
  • 핵심 기능을 도와주는 부가적인 기능 (로깅, 보안 등) 을 부가 기능 이라고 한다.
  • 객체지향의 기본 원칙을 적용하여도 핵심기능에서 부가기능을 분리해서 모듈화하는 것은 어렵다

AOP 의 개요 - Aspect Oriented Programming

  • 어플리케이션에서의 관심사의 분리 즉, 핵심적인 기능에서 부가적인 기능을 분리
  • 분리한 부가기능을 애스팩트 (Aspect)라는 독특한 모듈형태로 만들어서 설계하고 개발하는 방법
  • OOP를 적용하여도 핵심 기능에서 부가기능을 쉽게 분리된 모듈로 작성하기 어려운 문제점 해결
  • 부가기능을 ASPECT로 정의하여, 핵심기능에서 부가기능을 분리함으로써 핵심기능을 설계하고 구현 할 때 객체지향적인 가치를 지킬 수 있도록 도와주는 개념

애스펙트(Aspect)

  • 부가 기능을 정의한 코드인 어드바이스(Advice)와 어드바이스를 어디에 적용할지 결정하는 포인트컷(PointCut)을 합친 개념이다.

Advice + PointCut = Aspect

  • AOP 개념을 적용하면 핵심기능 코드 사이에 침투된 부가기능을 독립적인 애스펙트로 구분할 수 있다.
  • 구분된 부가기능 애스펙트를 런타임 시에 필요한 위치에 동적으로 참여하게 할 수 있다.

AOP의 용어

타겟 Target

  • 핵심기능을 담고 있는 모듈로, 타겟은 부가기능을 부여할 대상이 된다.

어드바이스 Advice

  • 어드바이스는  타겟에 제공할 부가기능을 담고 있는 모듈이다.

조인 포인트 Join Point

  • 어드바이스가 적용될 수 있는 위치를 말한다.
  • 즉  타겟 객체가 구현한 인터페이스의 모든 메서드는 조인 포인트가 된다.'

포인트 컷 Pointcut

  • 어드바이스를 적용할 타겟의 메서드를 선별하는 정규표현식
  • 포인트컷 표현식은 execution 으로 시작하고, 메서드의 Signature를 비교하는 방법을 주로 이용

애스펙트 Aspect

  • 애스펙트는 AOP의 기본 모듈이다
  • 애스팩트 = 어드바이스 + 포인트컷
  • 애스펙트는 싱글톤 형태의 객체로 존재한다.

어드바이저 Advisor

  • 어드바이저 = 어드바이스 + 포인트컷
  • Spring AOP에서만 사용되는 특별한 용어

위빙 Weaving

  • 위빙은 포인트컷에 의해 결정된 타겟의 조인포인트에 부가기능 (어드바이스)를 삽입하는 과정이다.
  • AOP가 핵심기능 (타겟) 의 코드에 영향을 주지 않으면서 필요한 부가기능 (어드바이스) 를 추가할 수 있도록 해주는 핵심적인 처리과정


AOP의 특징 및 구현방식

Spring AOP의 특징

1) Spring은 프록시 기반 AOP를 지원한다.

  • 스프링은 타겟 객체에 대한 프록시를 만들어 제공한다.
  • 타겟을 감싸는 프록시는 실행시간 (runtime) 에 생성된다.
  • 프록시는 어드바이스를 타겟 객체에 적용하면서 생성되는 객체이다.

2) 프록시 (Proxy) 가 호출을 가로챈다 (Intercept)

  • 프록시는 타겟 객체에 대한 호출을 가로챈 다음 어드바이스의 부가기능 로직을 수행하고 난 후 타겟의 핵심기능 로직을 호출한다. (전처리 어드바이스)
  • 또는 타겟의 핵심기능 로직 메서드를 호출한 후에 부가기능(어드바이스) 를 수행하는 경우도 있다. (후처리 어드바이스)

3) Spring AOP는 메서드 조인포인트만 지원한다.

  • 동적 프록시를 기반으로 AOP를 구현하므로 메서드 조인 포인트만 지원한다.
  • 즉 핵심기능 (타겟) 의 메서드가 호출되는 런타임 시점에만 부가기능(어드바이스) 를 적용할 수 있다.
  • 반면 AspectJ 같은 고급 AOP 프레임워크를 사용하면 객체의 생성, 필드값의 조회와 조작, static 메서드 호출 및 초기화 등의 다양한 작업에 부가기능을 적용할 수 있다.

Spring AOP의 구현 방식

XML 기반의 POJO 클래스를 이용한 AOP 구현

  • 부가기능을 제공하는 adivce 클래스 작성
  • XML 설정 파일에 <aop:config> 를 이용하여 애스펙트를 설정 (어드바이스, 포인트컷 설정)

@Aspect 어노테이션을 이용한 AOP 구현

  • @Aspect 어노테이션을 이용하여 부가기능을 제공하는 Aspect 클래스를 작성한다 이 때 Aspect 클래스는 어드바이스를 구현하는 메서드와 포인트컷을 포함한다.
  • XML 설정파일에 <aop:aspectj-autoproxy /> 설정

AspectJ와 Spring AOP 설치

AspectJ Runtime 라이브러리 설치

AspectJ Weaver 라이브러리 설치

Spring AOP 라이브러리 설치

'Back-end > Spring' 카테고리의 다른 글

AOP 어플리케이션 작성(2) - Annotation  (0) 2021.06.11
AOP 어플리케이션 작성(1) -XML  (0) 2021.06.11
Spring JDBC 환경설정  (0) 2021.06.11
Spring JDBC 개요  (0) 2021.06.11
사용자 관리 프로젝트  (0) 2021.06.10

+ Recent posts