본문 바로가기

JAVA/Spring Boot

Spring Boot WebFlux Example

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;

@RestController
public class HelloWorldController {

 @GetMapping("/hello")
 public Mono<String> helloWorld() {
 return Mono.just("Hello, World!");
 }
}
public class HelloWorldController

Spring Boot WebFlux는 비동기적으로 작동하는 웹 애플리케이션을 빌드하기 위한 Spring 프레임워크의 기능입니다. WebFlux는 Reactor 라이브러리를 기반으로 하며, Reactive Streams specification을 준수합니다.

WebFlux는 Spring MVC와 마찬가지로 요청-응답 모델을 사용하지만, 비동기적인 방식으로 처리합니다. 이는 Spring MVC에서는 스레드 풀을 사용하여 동시 요청을 처리하던 것과는 다르게, WebFlux에서는 단일 스레드에서 비동기 I/O 작업을 처리하고 이벤트 루프를 통해 다수의 요청을 처리할 수 있습니다.

WebFlux는 서버 측 렌더링, RESTful API, WebSocket, Server-Sent Events 등 다양한 웹 애플리케이션 유형에 대해 지원하며, Reactor의 Flux와 Mono를 통해 Reactive Programming을 지원합니다.

WebFlux는 기본적으로 Netty 서버를 사용합니다. 또한, Spring Boot 2.0 이후부터는 Spring MVC와 함께 사용할 수 있도록 WebFlux를 지원하는 Reactive WebClient를 제공합니다. 이를 통해 두 가지 프레임워크를 적절히 조합하여, 서로의 장점을 결합할 수 있습니다.

 

WebFlux를 사용하여 간단한 HTTP 요청-응답 처리를 하는 예제를 살펴보겠습니다. 
먼저, @RestController 어노테이션을 사용하여 REST API를 정의합니다. 

다음은 간단한 "Hello, World!" 메시지를 반환하는 예제입니다.

 

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;

@RestController
public class HelloWorldController {

    @GetMapping("/hello")
    public Mono<String> helloWorld() {
        return Mono.just("Hello, World!");
    }
}

 

위의 예제에서 Mono는 Reactor 라이브러리의 클래스로, 단일 결과를 나타냅니다. 

이 예제에서는 Mono를 사용하여 문자열 "Hello, World!"를 반환합니다.

 

다음으로, WebFluxConfigurer 인터페이스를 구현하여 WebFlux를 설정합니다. 

이 예제에서는 addResourceHandlers 메서드를 사용하여 정적 자원을 제공합니다.

 

import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.config.ResourceHandlerRegistry;
import org.springframework.web.reactive.config.WebFluxConfigurer;

@Configuration
public class WebConfig implements WebFluxConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/static/");
    }
}

 

위의 예제에서는 클래스 패스의 /static 디렉토리에서 정적 자원을 찾도록 설정하였습니다.
마지막으로, SpringApplication 클래스를 사용하여 애플리케이션을 실행합니다.

 

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

 

위의 예제에서는 @SpringBootApplication 어노테이션을 사용하여 Spring Boot 애플리케이션을 설정합니다. main 메서드에서는 SpringApplication.run 메서드를 호출하여 애플리케이션을 실행합니다.

이제 애플리케이션을 실행하고 http://localhost:8080/hello 주소로 HTTP 요청을 보내면 "Hello, World!" 메시지를 받을 수 있습니다.

'JAVA > Spring Boot' 카테고리의 다른 글

Spring Boot Tutorial - Spring Boot 소개와 환경 설정  (0) 2023.04.12