Spring

[Spring] AOP의 개념

📝 작성 : 2020.07.06  ⏱ 수정 : 
728x90

AOP

Aspect Oriented Programming의 약자로, 관점(관심,기능) 지향 프로그램이란 뜻입니다. 공통 기능과 핵심 기능을 구분함으로써 재사용성을 높여주는 프로그래밍 기법입니다.

AOP의 기본 개념은 핵심 기능에 공통 기능을 삽입하는 것입니다. 즉, 핵심 기능의 코드를 수정하지 않으면서 공통 기능의 구현을 추가하는 것이 AOP라고 할 수 있습니다.

핵심 기능에 공통 기능을 삽입하기 위한 방법으로는 크게 세 가지가 있습니다.

  • 컴파일 시점에 코드에 공통 기능 추가
  • 클래스 로딩 시점의 바이트 코드에 공통 기능 추가
  • 런타임에 프록시 객체를 생성해서 공통 기능 추가

스프링이 제공하는 AOP방식은 프록시를 이용하는 세 번째 방식입니다.(두 번째 방식을 일부 지원하지만 주로 사용되지는 않습니다.)
스프링 AOP는 프록시 객체를 자동으로 만들어줍니다. 따라서 프록시 클래스를 직접 구현할 필요는 없고 단지 공통기능을 구현한 클래스만 구현하면 됩니다.

AOP의 주요 용어

용어 의미
Aspect 공통 기능(트랜잭션, 보안, 로깅 등)
Target Aspect를 적용하는 곳
Advice 언제 공통 기능을 핵심 로직에 적용할 지
Weaving Advice를 핵심 로직에 적용하는 것
JoinPoint Advice의 적용 가능 한 지점(메서드 호출, 필드 값 변경 등), 스프링은 프록시를 이용한 AOP를 구현하기 때문에 메서드 호출에 대한 JoinPoint만 지원
PointCut 실제 Advice가 적용되는 JoinPoint, 스프링에서는 정규 표현식이나 AspectJ문법을 이용하여 PointCut을 정의할 수 있음

Advice의 종류

종류 설명
Before Advice 대상 객체의 메서드 호출 전에 공통 기능 실행
After Returning Advice 대상 객체의 메서드가 익셉션 없이 실행된 이후 공통 기능 실행(try-catch-finally의 try)
After Throwing Advice 대상 객체의 메서드 실행 도중 예외가 발생한 경우에 공통 기능 실행(try-catch-finally의 catch)
After Advice 대상 객체의 메서드 실행 후 공통기능 실행(try-catch-finally의 finally)
Around Advice 대상 객체의 메서드 실행 전, 후 또는 익셉션 발생 시점에 공통 기능 실행

Spring AOP의 과정


다음에는 AOP를 구현하는 방법에 대해 알아보겠습니다.

반응형