Spring AOP

uuuouuo·2022년 9월 21일
0

SPRING

목록 보기
2/8

Spring AOP


AOP가 필요한 이유

  • 객체지향 프로그래밍은 응집도이고 결합도
  • 이 때문에 여러 클래스에서 로깅이나 보안 및 트랜잭션 등 공통된 기능들이 흩어져 존재하게 됨
  • 이 때 공통되는 부가 기능(관심사)를 이용해 해결

AOP

  • Aspect-oriented Programming의 약자로 관점 지향 프로그래밍이라고 함
  • 관점을 기준으로 각각 모듈화하는 프로그래밍 기법
  • OOPAOP는 서로 보완관계

AOP의 주요 개념


1. Aspect
  - 흩어진 관심사(Crosscutting Concerns)를 묶어서 모듈화 한 것 (하나의 모듈)
  - Advice와 Point Cut이 있음
2. Target
  - Aspect가 가지고 있는 Advice가 적용되는 대상(클래스, 메서드 등등)
3. Advice
  - 어떤 일을 해야할 지에 대한 것
4. Join Point
  - 가장 흔한 Join Point는 메서드 실행 시점
5. Point Cut
  - Join Point의 상세한 스펙을 정의
  - 어디에 적용해야 하는지에 대한 정보를 가지고 있음

AOP 적용 방법

컴파일 타임 적용

  • 컴파일 시점(.java 파일을 .class 파일로 만들 때)에 바이트 코드를 조작하여 조작된(AOP가 적용된) 바이트코드를 생성

로드 타임 적용

  • 순수하게 컴파일한 뒤, 클래스를 로딩하는 시점에 클래스 정보를 변경(Load Time Weaving, 로드타임 위빙)

런타임 적용

  • 스프링 AOP가 사용하는 방법
  • A 클래스 타입의 Bean을 만들 때 A 타입의 Proxy Bean을 만들어 Proxy BeanAspect 코드를 추가하여 동작

스프링 AOP

  • 프록시 기반의 AOP 구현체

  • 프록시 객체를 사용하는 이유 : 접근 제어 및 부가 기능을 추가하기 위해

    • Proxy는 원래 해야 할 일을 가지고 있는 Real Subject를 감싸서 Client의 요청 처리.
  • Spring에서 Bean을 자동으로 프록시로 만들어주는 메커니즘 존재

    • DefaultAdvisorAutoProxyCreator 클래스
    • BeanPostProcessor라는 Bean 후처리기 인터페이스를 확장한 클래스

동작 설명

  1. Spring Container는 해당 후처리기가 Bean으로 등록되어 있으면 Bean들을 생성할 때 후처리기에 보내 후처리 작업 요청
  2. Bean이 프록시 적용 대상이라면, 후처리기는 타깃 Bean을 프록시로 감싼 오브젝트로 바꿔치기 하여 Spring Container에게 반환

0개의 댓글