Spring framework/Spring Webflux
spring webflux 9 (웹플럭스 적용기, AOP)
마샤와 곰
2020. 4. 10. 09:31
웹플럭스에서 AOP를 적용하는 방법은 역시나 스프링부트답게 엄청나게 간단하다.
정말 전자정부나 일반 Spring에서의 세팅은참..
아무튼, 라이브러리를 추가한다.
* maven 기준
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
AOP가 동작할 클래스를 만들어준다.
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.context.annotation.Configuration;
import org.aspectj.lang.JoinPoint;
@Configuration
@Aspect
public class AopWorker {
@Before("execution(public * 패키지명.*.*(..))")
public void before(JoinPoint point) {
System.out.println("before start : " + point.getSignature().getName());
}
@After("execution(public * 패키지명.*.*(..))")
public void after(JoinPoint point) {
System.out.println("after start : " + point.getSignature().getName());
}
//이런식으로 쭉쭉 나가면 된다..
}
위 세팅이 끝이다.
내부의 표현식은 기존 스프링에서 쓴 방식과 동일하게 사용하면 된다.
주의해야될 점은, AOP가 바라보는 클래스를 라우팅 역할을 하는 클래스에 걸어주면 안된다는 것 이다.
간단하게 이해를 돕기 위해 만들어본 클래스의 모습이다.
사용자의 요청에 대해서 index.html을 보여주는 라우터 클래스의 모습이다.
//라우터 클래스의 모습 예제 입니다.
package com.spring.boot.router;
@Configuration
public class DashBoardRouter {
private static final RequestPredicate TEXT_PLAIN = ;
//인덱스
@Bean
public RouterFunction<ServerResponse> index(DashBoardHandler handler) {
RequestPredicate pd1 = RequestPredicates.GET("/").and(RequestPredicates.accept(MediaType.TEXT_PLAIN));
RequestPredicate pd2 = RequestPredicates.POST("/").and(RequestPredicates.accept(MediaType.TEXT_PLAIN));
return RouterFunctions.route(pd1, handler::index).andRoute(pd2, handler::index);
}
}
다음은 해당 라우터 클래스가 사용하는 함수를 가지고있는 핸들러 클래스 모습이다.
//라우터 클래스가 사용하는 핸들러용 클래스 모습의 예제 입니다.
package com.spring.boot.handler;
@Component
public class DashBoardHandler {
private DatabaseConfig db;
public Mono<ServerResponse> index(ServerRequest result){
return ServerResponse.ok().render("index.html");
}
}
요런식의 라우팅 역할을 하는 클래스가 있다고하면, 해당 클래스에 aop를 걸게 되면 딱 1번만 동작하는 것을 보게 된다.
인플럭스에서 Bean 객체로 생성한 함수를 최초 생성시에 가져가서 리턴되는 함수만 계속해서 사용하기 때문이다.
그래서 위 내용 같은경우에는 DashBoardHandler라고 만들어준 클래스에 aop를 걸어주어야 한다.
위 내용을 토대로 AOP 설정을 해 준다면,
com.spring.boot.handler 패키지에 AOP를 걸어주어야 한다.
com.spring.boot.router 패키지에 걸면 AOP가 한번만 동작하는 모습을 보게 된다.
이상으로 웹플럭스에서 AOP설정에 대해 살펴 보았다.
spring webflux!
반응형