영혼 없이 Spring WebFlex 맛보기

Spring Boot를 이용하여 Spring WebFlex에 대해 살짝 맛보도록 하겠습니다.

어차피 영혼 없이 맛만 볼 것이므로 Reactor, Mono, Flux, … 등등의 개념은 물론 Spring Framework 5.0의 신규 기능에 대해서도 신경 쓰지 않겠습니다. 그건 나중에 따로 정리하기로 하고 오늘은 그냥 사용해 보기로 합니다.

Eclipse를 실행합니다. 최대한 편리함을 추구하기 위해 Eclipse Marketplace에서 Spring Tools 4 플러그인을 설치합니다. 이런 것까지 캡처해서 넣어야 되나 생각이 들지만 그냥 넣었습니다.

“New -> Project…”를 선택하면 “New Project” 창이 열립니다. Spring Boot 하위에 있는 Spring Starter Project를 선택하고  Next 버튼을 클릭합니다.

“New Spring Starter Project” 창이 열리면 필요한 내용을 대충 채워 넣고 Next 버튼을 클릭합니다. 채워 넣을 때 아래 이미지를 참고하시면 됩니다.

“New Spring Starter Project Dependencies” 창이 열리면 왼쪽 Available에서 “webflux”를 검색하고 “Reactive Web”을 선택합니다. 그러면 오른쪽 Selected에 Reactive Web이 표시됩니다. 그리고 그냥 Finish 버튼을 클릭합니다. Next 버튼을 클릭해도 되지만 별로 중요하지 않은 정보가 표시됩니다.

그러면 약간의 시간이 흐른 후 프로젝트가 생성됩니다. 아마 처음으로 Spring Boot 프로젝트를 생성했으면 시간이 좀 오래 걸릴 수도 있습니다. 이클립스 우측 하단의 프로그레스바를 참고하세요. 프로젝트 생성이 완료되면 좌측 Project Explorer에 아래와 같은 구조로 프로젝트가 생성됩니다.

프로젝트가 생성되었으니 시험 삼아 Maven을 실행해 봅니다. Project Explorer에서 pom.xml 파일을 마우스 우클릭한 후 “Run As -> Maven install”을 클릭하면 됩니다. 하단 Console 창에 실행 결과가 출력되는데 ERROR 메시지가 나오지 않아야 정상입니다. 만약 ERROR가 나온다면 이클립스 설정에서 “Installed JRE”를 JRE 경로가 아닌 JDK 경로로 선택하세요.

우선 핸들러 함수를 구현합니다. URL Path에 포함된 name을 포함하여 “Hello, name“을 응답하는 코드입니다.

package hello;

import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;

import reactor.core.publisher.Mono;

@Component
public class GreetingHandler {

    public Mono<ServerResponse> hello(ServerRequest req) {
        return ServerResponse.ok().body(BodyInserters.fromObject("Hello, " + req.pathVariable("name")));
    }
    
}

요청 URL과 핸들러 함수를 연결하기 위한 라우터 함수를 구현합니다.

package hello;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.server.RequestPredicates;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.reactive.function.server.ServerResponse;

@Configuration
public class GreetingRouter {

    @Bean
    public RouterFunction<ServerResponse> route(GreetingHandler greetingHandler) {
        return RouterFunctions.route(RequestPredicates.path("/hello/{name}"), greetingHandler::hello);
    }

}

실제 코드는 몇 줄 넣지도 않았는데 벌써 구현이 끝났습니다. 이제 실행해 봅니다. Project Explorer에서 프로젝트명(hello-webflux)을 마우스 우클릭한 후 “Run As -> Spring Boot App”을 클릭하면 됩니다.

웹 브라우저를 열고 주소창에 “http://localhost:8080/hello/John”을 입력합니다. “Hello, John”이 출력되면 성공입니다. URL에서 “John”을 다른 글자로 바꿔서 실행해 봅니다. Spring Boot 프로젝트 생성 시 UTF-8로 기본 설정되기 때문에 한글로 입력해도 잘 나옵니다.

결과는 잘 나오는데 ‘Spring MVC와 뭐가 다르지? 그리고 뭐가 좋지?’라는 생각이 들 수 있습니다. 그건 당연히 생기는 의문이겠죠. 의문이 차츰 해소될 수 있도록 앞으로 관련 글을 계속 포스팅하도록 하겠습니다.

Spring WebFlux에 대한 글을 쓰고 싶었는데 쓰고 나서 보니 Spring Boot에 대한 글이 되어버렸네요. 어차피 맛보기 글이었으니 맛만 보면 되죠, 뭐. (ㅡㅡ;;)

Leave a Reply

Your email address will not be published. Required fields are marked *