[Spring] 스프링 AOP란?

2022. 8. 7. 15:42Spring/Spring AOP

AOP (Aspect Oriented Programming)
  • AOP는 Aspect Oriented Programming, 즉 관점 지향 프로그래밍이라고 불린다. 하나의 소프트웨어가 거대한 OOP로써 설계, 프로그래밍되었다면 이것을 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어 보고 그 관점을 기준으로 모듈화하여 분리시키는 개념이다.
  • 모듈화(modularization) : 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것
  • 여기서, 핵심 기능은 해당 객체가 제공하는 고유 기능으로 볼 수 있고, 부가 기능은 핵심 로직을 실행하기 위해 행해지는 기능을 뜻한다. 이에 속하는 것은 로깅, 트랜잭션, 보안 등이 있다.

  • 위의 그림처럼 소스 코드상에서 반복하여 나타나는 코드들을 흩어진 관심사(Crosscutting Concerns)라고 한다.
  • 이 흩어진 관심사들을 Aspect로 모듈화하고 핵심 비즈니스 로직에서 분리하여 재사용한다는 것이 AOP의 목적이다.
  • AOP는 OOP를 대체하기 위한 것이 아닌, 흩어진 관심사를 처리하기 힘든 OOP의 부족한 부분을 보완하기 위한 목적으로 개발되었다.
  • AOP의 대표적인 구현으로 AspectJ 프레임워크가 있다. (스프링에서도 대부분 AspectJ의 문법을 차용)

 

AOP의 적용 방식

① 컴파일 시점

  • 소스코드를 컴파일러를 사용해 .class를 만드는 시점에 부가 기능 로직 추가 가능, 이 때 특별한 컴파일러를 사용해야 함. (Aspect로 부가 기능 적용 대상인지 구분)

② 클래스 로딩 시점

  • 자바 언어의 특성상 .class 파일이 JVM 내부의 클래스 로더에 보관되는데, 중간에서 .class 파일을 조작한 다음 JVM에 올리게 된다. (자바 언어에서 제공하는 기능)

③ 런타임 시점

  • 스프링에서 사용하는 방식으로, 자바의 메인 메서드가 이미 실행되고 난 다음을 뜻한다. 스프링과 같은 컨테이너, 빈후처리기 등의 도움을 받아 실제 객체 대신 프록시 객체를 컨테이너에 넣음으로써 부가 기능을 적용할 수 있다.

 

AOP 용어

▷ 조인 포인트(Join Point)

  • 어드바이스가 적용될 수 있는 위치, AOP를 적용할 수 있는 모든 지점
  • 메소드 실행, 생성자 호출, 필드 값 접근 등의 프로그램 실행 중 지점

▷ 애스팩트(Aspect)

  • 흩어진 관심사를 모듈화한 것. 어드바이스 + 포인트컷

▷ 어드바이스(Advice)

  • 어떠한 일을 해야하는가. 부가 기능 그 자체
  • 특정 조인 포인트에서 Aspect에 의해 취해지는 조치

▷ 포인트컷(Pointcut)

  • 조인 포인트 중 어드바이스가 적용될 위치를 선별하는 기능

▷ 타겟(Target)

  • 어드바이스를 받는 객체, 포인트컷으로 결정된다.

▷ 어드바이저(Advisor)

  • 어드바이스 1 + 포인트컷 1, 스프링 AOP 에서만 사용되는 용어

▷ 위빙(Weaving)

  • 포인트컷으로 결정한 타겟의 조인 포인트에 어드바이스를 적용하는 것
  • 핵심 로직에 영향을 주지 않고 부가기능 로직을 적용할 수 있다.

▷ AOP 프록시

  • AOP를 구현하기 위해 만든 프록시 객체, 스프링에서의 AOP 프록시는 JDK 동적 프록시와 CGLIB이 있다.

'Spring > Spring AOP' 카테고리의 다른 글

[Spring] 포인트컷 표현식  (0) 2022.08.07