221122 관점지향 프로그래밍(Aspect - Oriented Programming)

Jongleee·2022년 11월 22일
0

TIL

목록 보기
111/683

관점지향 프로그래밍(Aspect - Oriented Programming)

기능을 1. 핵심 관심 사항(Core Concern)과 2. 공통 관심 사항(Cross-Cutting Concern)으로 분리시키고 각각을 모듈화 하는 것을 의미

  1. 핵심 기능(Core Concern) - 업무 로직을 포함하는 기능
  2. 부가 기능(Cross-Cutting Concern) - 핵심 기능을 도와주는 부가적인 기능

AOP는 부가 기능을 애스펙트(Aspect)로 정의하여, 핵심 기능에서 부가 기능을 분리함으로써 핵심 기능을 설계하고 구현할 때 객체지향적인 가치를 지킬 수 있게 도와주는 개념이다.

AOP의 특징

프록시 패턴 기반

  • Spring은 타겟(Target) 객체에 대한 프록시를 만들어서 제공한다.

  • 타겟을 감싸는 프록시는 실행시간(RunTime)에 생성된다.

  • 프록시는 어드바이스(Advice)를 타겟 객체에 적용하면서 생성되는 객체

  • 프록시 객체를 쓰는 이유는 접근 제어 및 부가기능을 추가하기 위함이다.

프록시가 호출을 가로챔(Intercept)

  • 프록시는 타겟 객체에 대한 호출을 가로챈 다음 Advice의 부가기능 로직을 수행하고난 후에 타겟의 핵심기능 로직을 호출한다.

    (전처리 어드바이스)

  • 타겟의 핵심기능 로직 메소드를 호출한 후에 부가기능을 수행하는 경우도 있다.

    (후처리 어드바이스)

메소드 JoinPoint만 지원한다.

  • Spring은 동적 프록시를 기반으로 AOP를 구현하므로 메소드 조인 포인트만 지원

  • 핵심기능(타겟)의 메소드가 호출되는 런타임 시점에만 부가기능(어드바이스)를 적용할 수 있음

  • 반면에 AseptJ같은 고급 AOP 프레임워크를 사용하면 객체의 생성, 필드값의 조회와 조작, static 메소드 호출 및 동기화 등의

다양한 작업에 부가기능을 적용할 수 있다.

AOP 용어

1. Target

  • 부가기능을 부여할 대상 (핵심기능을 담고 있는 모듈)

2. Aspect

  • 부가기능 모듈 (핵심기능에 부가되어 의미를 갖는 모듈)

  • 부가될 기능을 정의한 Advice와 Advice를 어디에 적용할지를 결정하는 PointCut을 함께 갖고 있다.

  • 어플리케이션의 핵심적인 기능에서, 부가적인 기능을 분리해서 Aspect라는 모듈로 만들어서 설계하고 개발하는 방법

3. Advice

  • 실질적으로 부가기능을 담은 구현체

  • 타겟 오브젝트에 종속되지 않기 때문에, 부가기능에만 집중할 수 있음

  • Aspect가 무엇을 언제 할지를 정의

4. PointCut

  • 부가기능이 적용될 대상(Method)을 선정하는 방법

  • Advice를 적용할 JoinPoint를 선별하는 기능을 정의한 모듈

5. JoinPoint

  • Advice가 적용될 수 있는 위치

  • Spring에서는 메소드 조인포인트만 제공한다.

  • 타겟 객체가 구현한 모든 메소드는 조인 포인트가 된다.

6. Proxy

  • Target을 감싸서 Target의 요청을 대신 받아주는 랩핑 오브젝트.

  • 클라이언트에서 Target을 호출하게되면, 타겟이 아닌 타겟을 감싸고 있는 Proxy가 호출되어, 타겟메소드 실행 전에 선처리, 후처리를 실행한다.

7. Introduction

  • 타겟 클래스에 코드변경없이 신규메소드나 멤버변수를 추가하는 기능

8. Weaving

  • 지정된 객체에 Aspect를 적용해서, 새로운 프록시 객체를 생성하는 과정

  • Spring AOP는 런타임에서 프록시 객체가 생성된다.

0개의 댓글