작업을 진행하던 중 AOP의 기능을 추가해야 될 필요성이 있어 간단하게 먼저 테스트용 설정을 추가하며 글을 쓰게 되었다.
본문에 들어가기 앞서 AOP를 잠깐 설명하자면 스프링에서 제공하는 '관점 지향 프로그래밍(Aspect Oriented Programming)'이다.
즉, 기능을 비즈니스 기능과 공통 기능으로 구분하고 공통적인 기능을 수행하는 코드를 필요한 시점에 적용할 수 있도록 하는 프로그래밍 방법 이라고 생각하면 될 것 같다.
먼저 아래와 같이 클래스를 하나 만들어 작성해보도록 하자
우선 제일 최상단의 어노테이션을 먼저 살펴 보도록 하자
@Aspect: AOP를 사용하는 클래스로 설정하는 어노테이션
@Component: 스프링 빈 등록을 위한 어노테이션
이후 나오는 AfterReturning 메서드 상단의 @AtferReturning은 AOP 어드바이스 종류 중 하나로 예외 발생이 없을 경우 수행하는 기능이다.
Spring AOP Advice 종류
@Before : 핵심 기능 전에 수행하는 공통 기능 (ex. 로그인, 접근 권한 등)
@Around : 핵심 기능 수행 전 후에 수행하는 공통 기능 (ex. 시간 체크 등)
@AfterReturning : 예외 발생이 없을 경우 수행하는 기능
@AfterThrowing : 예외 발생할 경우 수행하는 기능
@After : 예외 발생 여부와 상관 없이 핵심 기능 수행 후 수행하는 공통 기능
execution은 적용할 범위를 지정하는 용도로 나의 클래스 경우에는 컨트롤러 부분에 적용하도록 설정하였다.
이후 반환값을 체크해 오류가 없다면 결과 반환 형태를 체크하고 Token값에 우선 'test' 값이 들어갈 수 있도록 처리하였다.
이후 내 로그인 '/member/login' 메서드를 호출해 보도록 하자
로그인 메서드의 반환값은 ResponseEntity 타입으로 Response를 가져와 내부의 Token 값을 설정하도록 되어있다.
결과는 다음과 같다.
내 AOP 설정은 AfterReturnin으로 예외가 발생하지 않았기 때문에 AOP가 적용되어 token에 값이 들어감을 확인할 수 있었다.
해당 기능을 통해 핵심 비즈니스 로직을 제외한 공통 로직의 경우 AOP에게 할당함으로서 코드의 중복을 방지할 수 있었다.