Server/Spring

Spring AOP 알아보기

권세희 2021. 3. 21. 17:39

AOP(Aspect Oriented Programming)는 관점 지향 프로그래밍으로 하나의 비즈니스 로직은 관심사와 핵심적인 로직으로 이루어져 있다. 

 

여기서 관심사소스 코드상에서 계속 반복되는 부분으로 예외처리, 인증 등이 해당된다. 즉 주변 로직, 부가기능으로 볼 수 있다.

 

💡 관심사의 예

1. 파라미터가 올바르게 들어왔을까??

 

2. 사용자의 인증을 적절히 받아왔을까??

 

3. 이 작업에서 발생할 수 있는 예외 처리는 어떻게 해야 할까??

 

즉 AOP의 목표는 핵심적인 로직에서 관심사를 분리하여 재사용하겠다는 것이다. 이것을 관심사의 분리(=Separate concerns)라고 부른다. 관심사를 분리하면 코드의 반복을 줄일 수 있기 때문이다.

 

AOP 개발방식에서 개발자가 주의해야 하는 것은 무엇일까 ❓

관심사와 핵심 로직은 컴파일 혹은 실행시간에 결합되기에 어떤 관심사를 붙일 것인지만 고려하면 된다!!

 

👀 AOP용어 살펴보기

Target : Aspect를 적용하는 곳 (클래스, 메서드..) 즉, 핵심 비즈니스 로직을 의미한다.

Proxy : 내부적으로 관심사들을 거쳐서 Target을 호출하도록 자동 혹은 수동으로 작성한다.

Proxy 객체를 통해 Target 객체의 JoinPoint 호출한다.

JoinPoint : Target 객체가 가지는 여러 메서드 

 

Aspect과 JoinPoint가 결합되는 것을 자세히 살펴보자 ❗

Aspect : 흩어진 관심사를 모듈화 한 것을 의미한다.

Advice : 실질적인 부가기능을 담은 구현체로 관심사를 의미한다.

Pointcut : 관심사와 비즈니스 로직이 결합되는 지점을 결정하는 것으로 Joinpoint가 가지는 여러 메서드 중 어떤 메서드로 연결할지 설정한다.

 

💡 Pointcut 선언 Annotation

구분 설명
execution(@excution) 메서드를 기준으로 Pointcut 설정
within(@within) 클래스를 기준으로 Pointcut 설정
this 주어진 인터페이스를 구현한 객체에 Pointcut 설정
args(@args) 특정한 파라미터를 가지는 대상들에 Pointcut 설정
@annotaion 특정한 어노테이션이 적용된 대상들에 Pointcut 설정