[Spring] AOP와 AOP 용어

JOY·2023년 4월 25일
0

[Spring]

목록 보기
7/18
post-thumbnail

AOP

AOP (Aspect Oriented Programming; 관점 지향)

  1. 애플리케이션 전체에서 공통으로 사용되는 기능(advice)을 별도로 생성해놓고 proxy서버가 공통의 기능을 적절하게 삽입하면서 중복 제거하고 일관성을 유지하는 것
  2. 프로그램의 모듈성과 유지보수성을 높이기 위해 핵심 로직과 부가적인 기능을 분리하여 개발

개발 코드 관점 분리 - 핵심 기능, 공통 기능

관점분리란?

  • 어플리케이션 전체에 걸쳐 적용되는 관심사를 코드에서 분리하여 모듈화하는 것
  • 핵심 비즈니스 로직과 다른 관심사 분리

AOP 용어

  • Aspect(관점)
    : 애플리케이션 전반에서 적용되는 공통 관점 사항
    : 로깅, 보안, 트랜잭션 등
  • Joinpoint
    : 핵심기능(메소드), 애플리케이션 실행시 시작되는 지점, Advice를 적용할 지점
    : 메서드 호출, 객체 생성, 필드 접근 등
  • pointcut
    : 여러개의 Joinpoint(메소드)하나로 결합한 것
    : adivce를 적용하게 될 대상
  • Advice
    : 공통 기능, Aspect가 Join point에 적용될 때 수행되는 코드(실제 코딩 부분). 부가적인 기능 담당
    : 부가적인 기능 수행을 통해 모듈성과 유지보수성 높임
  • Weaving
    : Aspect를 AOP Proxy Server(애플리케이션 코드)에 적용하는 과정

pointcut + Advice = Advisor

Advice 5가지 종류

  1. Before Advice : 대상 메서드 실행 전 수행(사전) - DB 연결, 인증/인가
  2. After Returnning Advice : 대상 메서드 성공적 실행 후 수행
  3. After throwing Advice : 대상 메서드에 예외 발생 시 수행 - 메세지 출력, 롤백
  4. After Advice : 대상 메서드 실행 후 성공/예외 상관없이 실행 - 리소스 반환
  5. Around Advice : 대상 메서드 실행 사전/사후 수행

코드의 재사용성과 유지보수성 향상

AOP 관련 정보 설정

  • <aop:config> : AOP 설정정보
  • <aop:aspect> : Aspect 설정
  • <aop:pointcut> : Pointcut 설정
  • <aop:around> : Around Advice 설정

Advice 정의 관련 태그

  • <aop:before> : 메서드 실행 전에 적용
  • <aop:after-returning> : 메서드가 정상적으로 실행된 후 적용
  • <aop:after-throwning> : :메서드가 예외 발생시킬 때 적용
  • <aop:after> : 메서드 정상 실행 여부 상관 없이 적용
  • <aop:around> : 모든 시점에 적용 가능

AOP적용 방법

1) xml 기반
2) Java 기반(@Annotation)

execution

  • AOP에서 Advice 적용시 메소드 명시할 때 사용
execution([접근제어자] [리턴타입] [패키지].[클래스].[메소드이름]([파라미터]))
* : 임의의 클래스명
.. : 0개 이상의 인자를 가질 수 있음
  • Pointcut은 어떤 메소드를 AOP의 적용 대상으로 할지를 결정하는 역할

예시 코드

	<!-- aop 설정 -->
	<aop:config>
		<aop:aspect id="aspect" ref="advice">
			<aop:around method="around" 
			pointcut ="execution(public * exam.service.*Impl.hello(..))"/>
		</aop:aspect>
	</aop:config>

설명
exam.service 패키지 내의 *Impl 클래스들 중 hello 메소드(0개 이상의 인자를 갖는)를 대상으로 AOP를 적용하도록 설정

profile
Just Do IT ------- 🏃‍♀️

0개의 댓글