ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Web Flux란?
    IT 인터넷/IT 상식 2025. 9. 27. 11:55
    반응형

    1. Spring WebFlux란?

    Spring WebFlux는 Spring 5부터 도입된 반응형(Reactive) 웹 프레임워크입니다. 기존의 Spring Web MVC스레드-당-요청(Thread-per-request) 모델을 사용하는 동기(Blocking) 방식이었다면, WebFlux는 논블로킹(Non-Blocking) I/O이벤트 루프(Event-Loop) 모델을 사용하여 비동기(Asynchronous) 방식으로 동작합니다.

    WebFlux의 핵심은 Project Reactor 라이브러리에 기반하며, 데이터 스트림을 다루기 위해 Reactor에서 제공하는 두 가지 핵심 타입인 **Mono**와 **Flux**를 사용합니다.

    Mono와 Flux (Publisher)

    WebFlux에서 컨트롤러의 반환 타입은 이 두 가지 타입 중 하나가 됩니다. 이들은 Reactive Streams 명세를 구현한 **데이터 발행자(Publisher)**의 역할을 합니다.

     

    타입 의미 역할
    Mono 0개 또는 1개의 데이터 요소 단일 객체나 비동기 작업의 완료(성공/실패)를 나타냅니다.
    Flux 0개부터 N개의 데이터 요소 리스트처럼 여러 개의 데이터 요소가 시간이 지남에 따라 연속적으로 발생하는 데이터 스트림을 나타냅니다.

    2. WebFlux 사용 예시

    기존 Spring MVC와 WebFlux를 비교하여 설명하면 이해하기 쉽습니다.

    Spring Web MVC (동기/블로킹 방식)

    // Spring MVC (Blocking)
    @GetMapping("/users")
    public List<User> getUsers() {
        // DB 조회나 외부 API 호출 시, 결과가 반환될 때까지 스레드가 대기(Blocking)합니다.
        return userRepository.findAll(); 
    }

     

     

    Spring WebFlux (비동기/논블로킹 방식)

    // Spring WebFlux (Non-Blocking)
    @GetMapping("/users")
    public Flux<User> getUsers() {
        // Flux를 반환하면, 스레드는 DB 조회 결과를 기다리지 않고 다른 요청을 처리합니다.
        // DB 드라이버나 WebClient가 결과를 비동기적으로 발행(Emit)합니다.
        return reactiveUserRepository.findAll(); 
    }

    핵심 차이: WebFlux에서는 DB 조회나 외부 API 호출과 같은 I/O 작업이 발생해도, 해당 요청을 처리하는 스레드가 대기(Block)하지 않고 즉시 운영체제(또는 이벤트 루프)에 I/O 작업을 위임한 후 다른 요청을 처리할 수 있게 됩니다. I/O 작업이 완료되면 결과는 콜백(Callback) 형태로 전달됩니다.

     


    3. WebFlux를 사용하는 이유

    WebFlux는 특히 **높은 동시성(High Concurrency)**과 효율적인 자원 사용이 필요한 애플리케이션에 적합합니다.

    1. 높은 동시성 및 확장성 

    • 논블로킹 I/O: I/O 작업(DB 접근, 외부 API 호출, 파일 읽기/쓰기 등) 시 스레드가 블로킹되지 않기 때문에, 적은 수의 스레드로도 수많은 동시 요청을 처리할 수 있습니다.
    • 자원 효율성: 스레드 생성 및 컨텍스트 스위칭 비용을 최소화하여 하드웨어 자원(메모리, CPU)을 훨씬 효율적으로 사용하며, 수평적 확장이 용이합니다.

    2. 반응형 데이터 스트림 처리 

    • 실시간 데이터: 서버-센트 이벤트(SSE)나 웹소켓과 같이 실시간 스트리밍 데이터 처리 및 관리가 용이합니다.
    • 백프레셔(Backpressure) 지원: 느린 데이터 소비자(Consumer)가 빠른 데이터 생산자(Producer)에게 속도를 늦추라고 알려줄 수 있는 메커니즘을 제공하여, 시스템이 과부하되는 것을 방지합니다. (이는 Reactive Streams의 핵심 이점입니다.)

    3. 마이크로서비스 아키텍처 적합성 

    • WebClient: WebFlux에서 제공하는 논블로킹 HTTP 클라이언트인 WebClient를 사용하여, 다수의 외부 마이크로서비스를 비동기적으로 동시에 호출하고 결과를 취합하는 작업을 효율적으로 수행할 수 있습니다.

    주의: WebFlux는 높은 성능과 확장성을 제공하지만, 코드가 함수형 및 비동기적으로 작성되어 Spring MVC에 비해 학습 곡선이 높고 디버깅이 어려울 수 있습니다. 따라서, 애플리케이션의 대부분의 작업이 I/O 바운드(I/O-bound)가 아닌 CPU 바운드(CPU-bound)이거나 동시성이 높지 않은 경우에는 기존 Spring MVC가 더 단순하고 관리하기 쉬운 선택일 수 있습니다.

    반응형

    'IT 인터넷 > IT 상식' 카테고리의 다른 글

    FTP VS SFPT 파헤치기  (0) 2025.10.22
    Flux란?  (0) 2025.09.27
    IT 상식 - 써드파티 VS 퍼스트파티  (1) 2025.09.18

    댓글

Designed by Tistory.