Files
spring-boot-examples/docs/webflux/03_스프링부트 웹플럭스 시작하기.md
2025-04-08 19:56:24 +09:00

5.6 KiB

아래는 **"스프링부트 웹플럭스 시리즈"**의 **3장: 스프링부트 웹플럭스 시작하기"**에 대한 초안입니다. Gradle을 사용한 설정 예시와 간략한 코드를 포함하여 실습 중심으로 작성했습니다. 초보자도 따라 할 수 있도록 단계별로 설명하며, 자연스럽고 친근한 문체를 유지했습니다.


3. 스프링부트 웹플럭스 시작하기

이제 이론을 넘어 직접 손을 움직여볼 시간입니다. 이 장에서는 스프링부트 웹플럭스를 사용해 간단한 애플리케이션을 만들어보며, 환경 설정부터 기본 라우팅까지 경험해보겠습니다. Gradle을 빌드 도구로 사용하며, 코드도 최대한 간결하게 유지하겠습니다. 자, 시작해볼까요?

개발 환경 설정 (Gradle 의존성 추가)

먼저, 스프링부트 웹플럭스 프로젝트를 만들려면 필요한 의존성을 추가해야 합니다. 스프링 이니셜라이저(Spring Initializr)를 사용하거나, 기존 프로젝트에 설정을 추가할 수 있습니다. 여기서는 Gradle 기반으로 진행합니다.

build.gradle 파일을 열고 아래 내용을 추가하세요:

plugins {
    id 'org.springframework.boot' version '3.2.4'
    id 'io.spring.dependency-management' version '1.1.4'
    id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.projectreactor:reactor-test'
}

test {
    useJUnitPlatform()
}
  • spring-boot-starter-webflux: 웹플럭스 기본 의존성으로, Netty 서버와 리액터 라이브러리를 포함합니다.
  • spring-boot-starter-testreactor-test: 테스트를 위한 의존성입니다.

의존성을 추가한 뒤, 터미널에서 ./gradlew build를 실행해 의존성이 잘 다운로드되는지 확인하세요.

첫 번째 웹플럭스 애플리케이션 만들기

스프링부트는 기본적으로 실행 가능한 애플리케이션을 빠르게 만들 수 있도록 도와줍니다. 프로젝트 루트 패키지에 Application 클래스를 생성하고, 아래처럼 설정합니다:

package com.example.demo;

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);
    }
}

이제 애플리케이션을 실행해보세요. ./gradlew bootRun 명령어를 입력하면 기본 포트(8080)에서 서버가 시작됩니다. 아직 아무 기능은 없지만, 웹플럭스 기반 애플리케이션이 구동된 겁니다!

기본적인 라우팅과 컨트롤러 설정

이제 간단한 엔드포인트를 추가해보겠습니다. 웹플럭스에서는 두 가지 방식으로 라우팅을 처리할 수 있는데, 여기서는 어노테이션 기반 컨트롤러를 먼저 사용해보겠습니다. 함수형 라우팅은 나중에 다룰게요.

src/main/java/com/example/demo 경로에 HelloController 클래스를 생성하고, 아래 코드를 추가하세요:

package com.example.demo;

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

@RestController
public class HelloController {

    @GetMapping("/hello")
    public Mono<String> sayHello() {
        return Mono.just("Hello, WebFlux!");
    }
}
  • @RestController: REST API를 처리하는 컨트롤러임을 나타냅니다.
  • Mono<String>: 단일 문자열을 비동기적으로 반환합니다.

애플리케이션을 다시 실행한 뒤, 브라우저나 Postman에서 http://localhost:8080/hello로 접속해보세요. "Hello, WebFlux!"라는 응답이 나타날 겁니다. 이렇게 간단한 코드로 비동기 엔드포인트를 만들어보았습니다!

혹시 더 실험해보고 싶다면, 아래처럼 약간의 지연을 추가해볼 수도 있습니다:

@GetMapping("/hello-delay")
public Mono<String> sayHelloWithDelay() {
    return Mono.just("Hello with delay!")
               .delayElement(Duration.ofSeconds(2));
}

/hello-delay로 접속하면 2초 뒤에 응답이 오는 걸 확인할 수 있습니다. 이건 웹플럭스가 비동기적으로 동작한다는 걸 느끼게 해주는 작은 예제입니다.

잠깐 확인하기

지금까지 한 걸 정리해보면:

  1. Gradle로 웹플럭스 의존성을 설정했습니다.
  2. 기본 애플리케이션을 실행해봤고,
  3. 간단한 컨트롤러로 첫 번째 엔드포인트를 만들었습니다.

별로 어렵지 않죠? 스프링부트가 복잡한 설정을 대신 처리해주기 때문에, 우리는 핵심 로직에 집중할 수 있습니다. 웹플럭스는 처음엔 낯설 수 있지만, 이런 작은 성공 경험을 쌓다 보면 금방 익숙해질 겁니다.

마무리

이 장에서는 웹플럭스 애플리케이션의 기본 틀을 만들어보며 첫발을 내디뎠습니다. 다음 장에서는 MonoFlux를 더 깊이 파고들며, 리액티브 스트림의 매력을 본격적으로 탐구해보겠습니다. 직접 코드를 작성해본 느낌이 어떠신가요? 다음 단계로 넘어갈 준비가 되셨길 바랍니다!


이 글은 실습 위주로 간결하게 작성했으며, 초보자가 따라 하기 쉽도록 Gradle 설정과 코드 예제를 최소화했습니다. 추가 설명이나 다른 예제가 필요하면 말씀해주세요!