My Melody Is Cute Spring framework AOP
본문 바로가기

개발공부🌷/Spring

Spring framework AOP

🌼AOP(Aspect-Oriented Programming) 관심지향 프로그래밍

 

공통 관심사항과 핵심관심사항을 분리 시켜 코드의 중복을 제거하고

코드의 재사용성을 높이는 프로그래밍 방법론

 

핵심기능에 공통기능을 삽입

(핵심기능코드의 변경없이 공통기능의 구현을 추가 ,변경)

 

더보기

➜ 공통적인 작업을 간편하게 처리할 수 있다

 

  • 여러 메서드에서 로깅을 추가해야 할 때, AOP를 사용하면 각 메서드마다 로깅 코드를 중복해서 작성하지 않고, 로깅 관련 코드를 한 곳에 모아놓고 필요한 메서드에 자동으로 적용할 수 있다
  • 특정 메서드의 실행 전과 후에 로깅을 추가하고 싶다면 AOP를 사용하여 간단한 설정을 통해 이를 달성할 수 있다.  AOP는 코드의 재사용성을 높이고 유지보수를 편리하게 만들어준다

 

여러 유형과 객체 간에 발생하는 문제의 모듈화를 가능하게 함

 

 

AOP의 모듈화의 핵심 단위 ➜ 관점(Aspect)

(OOP의 모듈화의 핵심 단위 ➜ 클래스(class)

 

Aspect

  • 여러객체에 공통으로 적용되는 기능 ( 공통기능 = 횡단관심사)
  • Aspect = 어드바이스(Advice) + 포인트컷(PointCut)

(공통기능과 적용시점을 정의한 어드바이스, 어드바이스가 적용될 지점을 정의하는 포인트컷을 합친 것)

 


 

🌼조인 포인트(Join Point)

 

어드바이스가 실행되는 특정 시점,

어드바이스가 적용될 수 있는 위치

스프링 컨테이너가 관리 할 수 있는 스프링 빈에만 AOP 적용 가능

Spring AOP 는 메서드레벨만 적용가능

 

어드바이스가 어디에 적용될지

 

더보기

메서드 호출이라는 조인 포인트에 어드바이스를 적용할 수 있다.

이 경우 어드바이스메서드가 호출되기 전이나 후에 실행되는 로직을 담고 있을 수 있다


🌼어드바이스(Advice)

 

AOP에서 어드바이스는 주로 메서드의 실행 전,후,예외가 발생한 경우와 같이

언제 특정 지점에서 실행되는지 정하는 코드를 말한다

 

횡단관심사를 포함한 특정 동작이나 코드블록을 나타냄

특정 조인포인트(Join Point)에서 수행될 부가기능을 정리한 코드

핵심 코드(Target)에 Aspect를 언제 적용할지 정의

 

순서를 보장하지 않는다

 

조인포인트에서 실행될 추가적인 로직이나 기능정의

 

더보기

Advice 종류

  • @Before
    • 타깃 객체의 메서드 호출 전에 공통 기능을 실행
  • @After
    • 예외 발생 여부에 관계없이 타깃 객체의 메서드 실행 후 공통 기능을 실행
  • @AfterReturning
    • 타깃 객체의 메서드가 예외 없이 실행되어 값을 반환한 경우 공통 기능을 실행
  • @AfterThrowing
    • 타깃 객체의 메서드 실행 중 예외가 발생한 경우 공통 기능을 실행
  • @Around
    • 타깃 객체의 메서드 실행 전과 후 또는 예외 발생 시 공통 기능을 실행
    • 가장 빈번하게 사용됨

🌼포인트컷(Pointcut)

조인포인트(Join Point)에서 어드바이스(Advice)가 적용될 위치를 선별하는 기능

(애플리케이션 실행 흐름에서 AOP를 적용할 수 있는 모든 포인트에서 수행될 부가기능 코드의 위치를 선별하는 기능)

관심 조인포인트를 결정 

 

어떤메서드를 어떤 시점에 선택할것인지

 

더보기

build.gradle 파일의 dependencies에 

implementation 'org.springframework.boot:spring-boot-starter-aop'추가해야

AspectJ 라이브러리를 사용가능하다

추가했다면 Gradle 리로드도 해주기

 

어드바이저(Advisor)

타겟(Target)

위빙(Weaving)


🌼AOP 프록시(proxy)

 

AOP기능 구현을 위해 만든 프록시 객체

런타임 시에 프록시 객체를 생성해서 공통관심기능을 적용

 

프록시(Proxy)

  • 역할을 대리해서 처리하는 객체
  • 다른 무언가와 이어지는 인터페이스 역할을 하는 클래스
  • 타겟을 감싸서 요청을 대신 받아주는 랩핑 클래스
  • 프록시 객체 = 핵심 기능 외에 공통적인 기능을 담은 객체(어드바이스를 타겟 객체에 적용하면서 생성되는 객체)

 원래 객체를 감싸서 client의 요청을 대신 처리


 

'개발공부🌷 > Spring' 카테고리의 다른 글

Spring Framework DI 2  (0) 2023.11.17
Spring Framework DI  (0) 2023.11.15
Spring Framework 기본  (0) 2023.11.15