BackEnd/Spring Boot

AOP란?

Raconer 2023. 4. 15. 20:19
728x90

정의 및 용어 설명

AOP(Aspect-Oriented Programming)는 프로그램 구조에 대한 또 다른 사고 방식을 제공하여 객체 지향 프로그래밍(OOP)을 보완합니다.

OOP에서 모듈화의 핵심 단위는 클래스인 반면, AOP에서 모듈화의 단위는 측면입니다.

Aspect는 여러 유형과 객체를 가로지르는 관심사(트랜잭션 관리 등)의 모듈화를 가능하게 합니다. (이러한 문제는 종종 AOP 문헌에서 "crosscutting" 문제라고 합니다.)

Spring FrameWork에서 AOP

AOP 용어 설명

영문을 구글 번역이나 직역으로 하면 이해 하기 어렵기 때문에 영문을 보고 이해한 내용으로 해석 하였습니다.
필히 참고시 영문 문서를 확인해 주세요

  • Aspect
    • A modularization of a concern that cuts across multiple classes. (관점 지향 모듈화)
    • 트랜잭션 관리는 엔터프라이즈 Java 애플리케이션에서 "crosscutting" 문제의 좋은 예입니다.
    • Spring AOP에서 Aspect는 일반 클래스(스키마 기반 접근) 또는 @Aspect 주석으로 주석이 달린 일반 클래스(@AspectJ 스타일)를 사용하여 구현됩니다.
  • Join point
    • 메소드 실행이나 예외 처리와 같은 프로그램 실행 중 한 지점 입니다.
    • Spring AOP에서 Join point는 항상 메소드 실행을 나타냅니다.
  • Advice
    • 특정 Join point에서 aspect에 의해 취해진 조치를 말합니다.
    • Advice 종류에는 “around”, “before” and “after”이 있습니다.
    • Spring을 포함한 많은 AOP 프레임워크는 어드바이스를 인터셉터로 모델링하고 Join point 주변에 인터셉터 체인을 유지합니다.
  • Pointcut
    • Join point와 일치하는 속성 입니다.
    • Advices는 Pointcut 표현식과 연관되며 Pointcut과 일치하는 모든 Join point에서 실행됩니다(예: 특정 이름의 메소드 실행).
    • Pointcut 표현식과 일치하는 Join point의 개념은 AOP의 핵심이며 Spring은 기본적으로 AspectJ Pointcut 표현식 언어를 사용합니다.
  • Introduction
    • 유형을 대신하여 추가 메소드 또는 필드를 선언합니다.
    • Spring AOP를 사용하면 Introduction 객체에 새로운 인터페이스(및 해당 구현)를 도입할 수 있습니다.
    • For example, you could use an "Introduction" to make a bean implement an IsModified interface, to simplify caching.
      • 예를 들면 Introduction으로 IsModified 인터페이스를 implement하는 Bean을 만들때 캐싱을 단순화 할수있습니다.
    • AspectJ 커뮤니티에서는 Introduction을 inter-type으로 알려져 있습니다.
  • Target object
    • 하나 이상의 Aspect에서 Adviced되는 객체입니다.
    • 또한 "Advised object" 라고도 합니다.
    • Spring AOP는 런타임 프록시를 사용하여 구현되기 때문에 이 객체는 항상 프록시 객체입니다.
  • AOP proxy
    • Aspect contracts를 implement 하기 위해 AOP 프레임워크에 의해 생성된 객체입니다. (advise method executions and so on).
    • Spring Framework에서 AOP proxy는 JDK dynamic proxy 또는 a CGLIB proxy 라고 합니다.
  • Weaving
    • Aspects를 다른 애플리케이션 유형 또는 객체와 연결하여 "Advised Object"를 생성합니다.
    • 이것은 컴파일 시간(예: AspectJ 컴파일러 사용), 로드 시간 또는 런타임에 수행할 수 있습니다.
    • Spring AOP는 다른 순수 Java AOP 프레임워크와 마찬가지로 런타임에 Weaving을 수행합니다.

Advice Types

  • Before advice
    • Join point 이전에 실행 됩니다.
    • 하지만 Advice를 중지 할수는 없습니다.
  • After returning advice
    • Join point가 정상적으로 완료된 후 실행할 Advice입니다
    • for example, if a method returns without throwing an exception
  • After throwing advice
    • Method가 throwing an exception되어 종료되는 경우 실행 할 조언입니다.
  • After (finally) advice
    • Join point가 종료되는 수단(정상 또는 예외적 리턴)에 관계없이 실행될 조언.
  • Around advice
    • 메소드 호출과 같은 "Join point"를 둘러싸는 "Advice". (둘러 싸는, 주변.. 어떤걸 해도 번역이 깔끔하지 않다)
    • 이것은 가장 강력한 종류의 Advice입니다.
    • Around advice 메서드 호출 전후에 사용자 정의 동작을 수행할 수 있습니다. (둘러 싸는이 아니라 전후 가 적합한 번역인거 같다.)
    • 또한 자체 반환 값을 반환하거나 예외를 throw하여 조인 지점으로 진행할지 또는 권장된 메서드 실행을 단축할지 여부를 선택할 책임이 있습니다.

Spring Frame Word AOP 참고

728x90

'BackEnd > Spring Boot' 카테고리의 다른 글

Exception Handler  (0) 2023.04.16
War VS Jar  (0) 2023.04.16
Spring Boot 개발 중간 정리  (0) 2023.04.15
Spring boot Test Case  (0) 2023.04.15
Spring Request Flow  (0) 2023.04.15