Spring AOP

bp.chys·2021년 6월 3일
0

TIL(Today I Learned)

목록 보기
4/11

AOP (Aspect Oriented Programming)

  • AOP는 Spring 프레임워크가 제공하는 강력한 기능 중 하나로, 객체 지향의 한계를 보완하여 책임을 관점에 따라 한번 더 분리하고 더욱 객체 지향스럽게 코딩할 수 있다.
  • AOP는 어떤 로직이 있을때, 핵심적인 관점과, 부가적인 관점을 분리하여 각각의 관점에서 모듈화하겠다는 의미이다.
  • 부가적인 로직을 Aspect로 모듈화하고 재사용할 수 있다는 장점이 있다.
  • 부가적인 로직은 트랜잭션 처리 같은 인프라 로직, 로깅, validation 등을 예로 들 수 있다.

주요 용어

  • Aspect : 부가적인 관심사를 모듈화 한 싱글톤 객체 (= Advice + PointCut)
  • Target : Aspect를 적용하는 대상
  • Advice : 부가 기능을 실질적으로 구현한 객체
  • JointPoint : 부가 로직이 실행되는 위치
  • PointCut : JointPoint의 상세 위치

Advice 종류

  • Around : 타겟의 메서드가 호출되기(JoinPoint) 이전(before) 시점과 이후 (after) 시점에 모두 처리해야 할 필요가 있는 경우

  • Before : 타겟의 메서드가 호출되기(JoinPoint) 이전(before) 시점에 처리해야 할 필요가 있는 경우

  • After Returning : 타겟의 메서드가 정상적으로 실행된 이후(after) 시점에 처리해야 할 필요가 있는 경우

  • After Throwing : 타겟의 메서드가 예외를 발생된 이후(after) 시점에 처리해야 할 필요가 있는 경우

특징 및 원리

  • 프록시 기반의 AOP 구현체이다. 다른 구현체로 AspectJ가 있다.
  • 스프링 빈에만 AOP 를 적용할 수 있다.
  • 동적 프록시 빈을 만들어 등록시켜준다.
  • 실행시간(Runtime)에 커스텀 어노테이션을 만나면 요청을 가로채서 프록시 객체를 로딩하고 프록시 객체에서 Aspect에 정의된 부가로직을 수행한다.
  • 부가 로직 수행이 끝나면, 다시 원래 객체를 호출하고 핵심로직을 수행함과 동시에 request/response를 넘겨준다.
profile
하루에 한걸음씩, 꾸준히

0개의 댓글