[Spring] AOP

DevelopHeo·2024년 12월 26일
0
post-thumbnail

📙 1. 관점 지향 프로그래밍 (AOP)

Annotation은 XML에서 Config(JAVA)로 넘어가기 위한 중간단계이다.

  • @Configuration 어노테이션을 사용하면 기존에 applicationContext.xml 대신 ApplicationConfig.java을 사용할 수 있다.

사전에 예외처리를 해주는 애들

  • Filter, AOP, Interceptor
  1. Filter
    • 서블릿 요청이 들어 오기 전/ 후 처리 됨
  2. Interceptor
    • 컨트롤러 호출 전/ 후 / 완료 처리
  3. AOP
    • 클래스의 메서드 레벨에서 처리

AOP(Aspect Oriented Programming) 개요

  • 핵심 관심 사항과 공통(부가) 관심 사항
    • 핵심 관심 사항과 공통 관심 사항
    • 기존 OOP에서는 공통관심사항을 여러 모듈에서 적용하는데 있어 중복된 코드를 양상하는 한계가 존재함
    • 이를 해결하기 위해 AOP 등장
    • AOP은 문제를 해결하기 위한 핵심 관심 사항과 전체에 적용되는 공통 관심 사항을 기준으로 프로그래밍함으로써 공통 모듈을 손쉬게 적용할 수 있게 함
  • AOP는 관심사의 분리, 즉 핵심적인 기능에서 부가적인 기능을 분리한다.
  • 분리한 부가기능을 어스펙트(Aspect)라는 독특한 모듈 형태로 만들어서 설계하고 개발하는 방법
  • OOP(객체 지향 프로그래밍)를 적용하여도 핵심기능에서 부가기능을 쉽게 분리된 모듈로 작성하기 어려운 문제점을 AOP가 해결
  • AOP는 부가기능을 어스펙트(Aspect)로 정의하여, 핵심기능에서 부가기능을 분리함으로써 핵심기능을 설계하고 구현할 때 객체지향적인 가치를 지킬 수 있도록 도와주는 개념
  • 부가적인 기능 = Aspect(관점)
  • Aspect J 라는 자바도 아니고 스프링도 아닌 것이 따로 있다. 이 녀석의 장점을 Spring이 흡수 → 이게 AOP

AOP 적용 예

  • 간단한 메소드의 성능 검사(=로깅처리)
  • 트랜잭션 처리
    • @Transactional 은 메소드 위에 하면 트랜잭션 관리를 알아서 해주는데 이게 AOP이다.
  • 예외 반환
  • 아키텍처 검증

AOP 구조

  • 이런 느낌이라고 보면 된다.

📙 2. Spring AOP

AOP는 Spring이 만든게 아니라 외부에서 만들었다.

외부에서 만든 AOP의 장점을 Spring이 가져온거다.

Spring AOP 용어

  • Target 대상
    • 핵심기능을 담고 있는 모듈로 target은 부가기능을 부여할 대상이 됨
  • Advice 시점
    • 어느 시점(예 : method의 수행 전/후, 예외 발생 후 등..)에 어떤 공통 관심 기능(Aspect)을 적용할지 정의한 것
    • Targeet에 제공할 부가기능을 담고 있는 모듈
    • 핵심기능 이전 시점, 끝난 시점
  • JoinPoint
    • Aspect가 적용될 수 있는 지점(정상일 때 뭐할거니, 비정상일 때 뭐할거니)
    • 함수 느낌
  • Pointcut
    • 공통 관심 사항이 실제 적용될 JoinPoint
    • Advice 적용할 target의 method 선별하는 정규 표현식
    • Pointcut 표현식은 execution으로 시작하고 method의 Signature를 비교하는 방법을 주로 이용
  • Aspect(Advisor)
    • 그냥 스프링 용어, Aspect = Advice + pointcut
  • Weaving
    • 어디에다 어떤 로직을 적용하는게 위빙
    • 로직을 적용하는 걸 위빙이라함

Spring AOP 구조

  • Pointcut에 정규표현식으로 설정한 핵심 기능들을 알아서 Weaving 한다.

Spring AOP 특징

  • Spring은 프록시(proxy) 기반 AOP를 지원
    • Spring은 Target 객체에 대한 Proxy를 만들어 제공
    • Target을 감싸는 Proxy는 실행시간(Runtime)에 생성
    • Proxy는 Advice를 Target 객체에 적용하면서 생성되는 객체
  • 프록시(Proxy)가 호출을 가로챈다 (Intercept)
    • Proxy는 Target 객체에 대한 호출을 가로챈 다음 Advice의 부가기능 로직을 수행하고 난 후에 Target의 핵심 기능 로직을 호출 (전처리 Advice)
    • 또는 Target의 핵심 기능 로직 method를 호출한 후에 부가기능(Advice)을 수행하는 경우도 있다(후처리 Advice)
  • Spring AOP는 method JoinPoint만 지원
    • 동적 Proxy를 기반으로 AOP를 구현하므로 method JoinPoint만 지원함

📙 3. Spring AOP 구현

Spring AOP 구현 방법

  • POJO Class 를 이용한 AOP 구현
  • Spring API를 이용한 AOP 구현
  • Annotation을 이용한 AOP 구현

Advice와 annotation

참고 출처 : https://sharonprogress.tistory.com/195

0개의 댓글