Spring AOP 기초개념

Sun Ji·2023년 4월 8일
0

스터디

목록 보기
1/2

Spring AOP의 기본 개념

SPRING AOP

  • Aspect Oriented Programing, 관점 지향 프로그래밍

관점지향이란?

어떠한 로직을 핵심적인 관점, 부가적인 관점으로 나누어 보고 그 관점을 기준으로 모듈화 한다는 뜻

Spring AOP의 핵심은?

각 관점을 기준으로 모듈화 한다는 것은 코드들을 부분적으로 모듈화 하겠다는 것이다. 이때 소스코드상 흩어져 반복되는 코드들을 흩어진 관심사 (crosscutting concerns)라 한다.

예시)
클래스 A, B, C에서 부분적으로 반복되는 로직들을 Aspect X, Y, Z로 모듈화

특징

  • 스프링 Bean에만 AOP를 적용할 수 있다.
  • proxy-based AOP로, 외부에서 호출했을 때만 동작한다.
@Component
class A () {
	@Annotation
    fun X () {}
    
    fun inside () { 
    	X() // Aspect does not working
    }
}

@Component
class B () {
	fun outside () {
    	X() // working normally
    }
}

@Aspect
@Component
class SampleAspect () {
	@Around("@Annotation")
    fun around () {
    	// Do Something
    }
}

주요 개념

  • Aspect : crosscutting concerns를 모듈화 한 것.
  • Target : Aspect를 적용하는 곳 (클래스, 메서드 등)
  • Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체
  • JointPoint : Advice가 적용될 위치, 끼어들 수 있는 지점. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능
  • PointCut : JointPoint의 상세 스펙
    • 구체적으로 Advice가 실행될 지점을 정의
    • 예시) 'A란 메서드의 진입 시점에 호출할 것'

Aspect 실행 시점 정의

Aspect내의 method 앞에 annotation을 정의함으로서 언제 Aspect가 실행될지 지정할 수 있다.

  • @Before : Advice 타겟 메서드가 호출되기 전 Advice 기능 수행
  • @After : 타겟 메서드의 결과에 관계없이 타겟 메서드가 완료되면 Advice 기능 수행
  • @AfterRunning : 타겟 메서드가 성공적으로 결과값을 반환 한 후 Advice 기능 수행
  • @AfterThrowing : 타겟 메서드가 수행 중 예외를 던지면 Advice 기능 수행
  • @Around : Advice가 타겟 메서드를 감싸 타겟 메서드 호출 전, 후에 Advice 기능 수행

sample code

  1. 의존성 추가
// build.gradle.kts
implementation("org.springframework.boot:spring-boot-starter-aop")
  1. Aspect 구현
import org.aspectj.lang.annotation.Aspect
import org.springframework.stereotype.Component

@Aspect
@Component
class SampleAspect () {
	@Around("...") // 함수, annotation, 범위 등 지정가능
    fun around() {
    	// 
    }
}
profile
매일매일 삽질중...

0개의 댓글