[Spring] AOP

yeajinlee·2022년 7월 31일
0
post-thumbnail

서비스에서 필요한 내용은 비지니스 로직이라 불리는 핵심 기능만 수행할 수 있으면 됨
그 외의 부가적인 로직은 인프라 로직(ex. 시간 측정, 권한 체크, 트랜잭션)
인프라 로직은 애플리케이션의 전 영역에서 나타날 수 있음
but, 중복코드를 만들어낼 가능성 有 --> 유지보수 힘들어짐

  • 인프라 로직은 로깅, 트랜잭션, 권한 검사, 성능 측정 등 하나의 관심사를 가지게 됨
  • 인프라 로직이 횡단으로 나타나기 때문에 이것을 cross-cutting concern(횡단 관심사)라고 부름

AOP

  • Aspect Oriented Programming (관점 지향 프로그래밍)
  • 횡단관심사에 따라 프로그래밍 하는 패러다임
  • 더 객체지향적으로 코드 구성할 수 있도록 보완
  • OOP에서 모듈화의 주요 단위는 클래스, AOP에서는 관점(Aspect)
  • Aspect는 횡단관심사의 모듈화를 가능하게 함

AOP 구현체

  • AOP는 OOP와 같은 일종의 패러다임 --> 각 언어마다 AOP 구현체가 있음
  • Spring: Spring AOP
  • Java: AspectJ

AOP 용어

  • Aspect: 횡단관심사의 모듈화
    • ex) 트랜젝션 처리
    • Spring AOP에서는 일반 클래스나 @Aspect 어노테이션을 가지는 클래스로 구현됨
  • Target object (Advised object): 어떤 대상에 부가 기능을 부여할 것인가
  • Advice: 어떤 부가기능을 부여할 것인가
    • Before, AfterReturning, AfterThrowing, After, Around
  • Join point: 어디에 적용할 것인가
    • 메서드, 필드, 객체, 생성자 등
    • AspectJ에서는 다양하게 join point를 구현해놓음 -> 여러가지 상황에서 부가기능을 실행시킬 수 있음
    • Spring AOP에서는 메서드가 실행될 때 만으로 한정
  • Pointcut: 실제 advice가 적용될 지점
  • Weaving
    • Target object를 생성하기 위해 aspect와 다른 application type 또는 객체를 연결하는 것
    • AOP를 끼워넣어주는 시점

AOP의 구현 방법

  • 컴파일: J.java -> J.class 컴파일 하는 시점에 AOP를 끼워 넣는 것(적용시키는 것)
  • 클래스 로드 시: 클래스 로더가 클래스파일을 메모리에 올릴 때 적용
  • 프록시 패턴
    - Spring AOP에서 사용
    - 부가기능을 제공하는 프록시로 타겟 클래스를 감싸서 실행
    - Spring이 IOC, DI를 기반으로 하기 때문에 가능한 방식

Spring AOP && AspectJ

Spring AOP AspectJ
목표 간단한 AOP 기능 제공 완벽한 AOP 기능 제공
Join point 메서드 레벨만 지원 생성자, 필드, 메서드 등 다양하게 지원
Weaving 런타임 시에만 가능
(스프링 컨테이너가 객체 생성을 관리해주기 때문에)
런타임은 제공하지 않음
compile-time, post-compile, load-time 제공
대상 Spring container가 관리하는 bean에만 가능 모든 Java object에 가능


참고

profile
백엔드 개발자 지망생

0개의 댓글