본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Spring framework/Spring Webflux

spring webflux 9 (웹플럭스 적용기, AOP)

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2020. 4. 10.

 

웹플럭스에서 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!

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글