본문 바로가기
개발/Spring

AOP(Aspect Oriented Programming)

by BellOne4222 2024. 2. 6.

AOP(Aspect Oriented Programming)

  • 관점 지향 프로그래밍
  • 특정한 함수 호출 전이나 후에 공통적인 처리가 필요 할 때 사용
    • 로깅
    • 트랜잭션
    • 인증
  • OOP(객체 지향 프로그래밍)로 처리하기에는 다소 까다로운 부분을 AOP라는 처리 방식을 도입하여 손쉽게 공통 기능을 추가/수정/삭제 할 수 있게 한다.

AOP의 기본 개념들

  • Aspect
    • 여러 클래스나 기능에 걸쳐서 있는 관심사, 그리고 그것들을 모듈화한 것
    • AOP 중에서 가장 많이 활용되는 부분은 @Transactional (트랜잭션 관리) 기능
  • Advice
    • AOP에서 실제로 적용하는 기능(로깅, 트랜잭션, 인증 등)을 의미한다.
  • Join point
    • 모듈화된 특정 기능이 실행될 수 있는 연결 포인트(Aspect를 넣을 수 있는 지점)
  • Pointcut
    • Join point 중에서 해당 Aspect를 적용할 대상을 뽑을 조건식
  • Target Object
    • Advice가 적용될 대상 오브젝트
  • AOP Proxy
    • 대상 오브젝트에 Aspect를 적용하는 경우 Advice를 덧붙이기 위해 하는 작업을 AOP Proxy라고 한다.
    • 주로 CGLIB(Code Generation Library, 실행 중에 실시간으로 코드를 생성하는 라이브러리) 프록시를 사용하여 프록싱 처리를 한다.
  • Weaving
    • Advice를 비즈니스 로직 코드에 삽입하는 것을 말함

 

AspectJ

  • AspectJ는 AOP를 제대로 사용하기 위해 꼭 필요한 라이브러리
  • 기본적으로 제공되는 Spring AOP로는 다양한 기법(Pointcut 등)의 AOP를 사용할 수 없다.

  • Aspect의 생성
package org.xyz;
import org.aspectj.lang.annotation.Aspect;

@Aspect
@Component  // Component를 붙인 것은 해당 Aspect를 스프링의 Bean으로 등록해서 사용하기 위해서
public class UsefulAspect {

}

 

 

Pointcut 선언

package org.xyz;
import org.aspectj.lang.annotation.Aspect;

@Aspect
@Component  // Component를 붙인 것은 해당 Aspect를 스프링의 Bean으로 등록해서 사용하기 위함
public class UsefulAspect {

	@Pointcut("execution(* transfer(..))")
	private void anyOldTransfer() {}
}

 

 

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

MVC 패턴(2) - API 설계  (0) 2024.02.16
MVC 패턴(1) - 요구사항 설계  (0) 2024.02.15
스프링 빈 이벤트 라이프 사이클  (0) 2024.02.04
IoC 컨테이너  (0) 2024.02.04
IoC(Inversion Of Controll)  (0) 2024.02.04