Spring AOP(Aspect Oriented Programming)

에이치비아이·2023년 5월 1일
0

AOP(Aspect Oriented Programming) 개념

AOP(Aspect Oriented Programming)란 관점지향 프로그래밍으로, 핵심 기능들을 분리하여 구현하는 OOP(Object Oriented Programming)에
핵심 기능들에 부가적으로 필요한 로깅, 예외처리, 데이터 검증과 같이 반복되는 부가기능을 따로 분리하여 핵심 기능에 더욱 집중할 수 있고,
부가 기능은 따로 관리하여 반복을 줄이고, 유지보수를 더 편하게 할 수 있도록 관심 분리를 한 것입니다. 이러한 부가기능을 횡단 관심이라고도 합니다.

AOP

참조 : http://closer27.github.io/backend/2017/08/03/spring-aop/

이러한 AOP를 구현하기 위해서는 JoinPoint, PointCut, Advice, Aspect 라는 개념이 추가됩니다.

JoinPoint

클라이언트가 호출하는 모든 비즈니스 메소드, 모든 메소드를 조인포인트로 생각하면 됩니다.
횡단 관심을 넣을 시점, Joint를 하기 위한 지점이라고 생각하면 됩니다.

PointCut

포인트컷은 필터링된 조인포인트를 의미합니다. JointPoint 중에 부가적인 처리를 하고 싶은 부분을 필터링하는 역할을 합니다.
포인트컷 지시자를 이용하여 처리를 하고자하는 메소드, 패키지 등을 설정합니다.

  • execution () : 가장 강력한 지시자로, 리턴, 타입, 메서드, 패키지 등 조합하여 정교한 PointCut 정의
  • within() : 타입 패턴을 이용하여 JoinPoint 정의
  • this : 빈 오브젝트 타입에 JoinPoint 정의
  • target : 대상 객체 타입 비교를 이용하여 JoinPoint 정의
  • args : 메서드의 파라이터 타입을 이용하여 JoinPoint 정의
  • @annotation : 특정 어느테이션을 찾는 JoinPoint 정의

Advice

Adivce는 Aspect의 구현체로 JoinPoint에 삽입되어 동작하는 코드입니다.
이는 횡단 관심에 해당하는 공통 기능의 코드를 의미합니다.

  • Before : JoinPoint 전에 실행
  • After returning : JoinPoint에서 성곡적으로 리턴한 후 실행
  • After throwing : JoinPoint에서 예외가 발생한 경우 실행
  • After : JoinPoint의 결과에 상관없이 실행 (finally과 비슷)
  • Around : JoinPoint의 전 과정(전,후)에 실행

Aspect

Aspect는 구현하고자 하는 횡단 관심, 부가 기능을 의미하는 것으로,
한 개 이상의 PointCut(언제 어디서)과 Advice(무엇을)의 조합으로 만들어집니다.

profile
백엔드 개발자입니다.

0개의 댓글