본문 바로가기
Server/Spring

Spring AOP 알아보기

by 권세희 2021. 3. 21.

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 설정