전체 글 362

[Spring Cloud Gateway] 2. Server WebFlux

1. How It Works동작 순서순서구성요소역할1ClientGateway로 HTTP Request 전송2Gateway Handler Mapping요청이 어떤 Route와 매칭되는지 판단3Gateway Web Handler매칭된 Route의 GlobalFilter + GatewayFilter를 모아 Filter Chain 실행4Pre Filter인증, Rate Limit, Header/Path 수정 등 Backend 호출 전 처리5Proxy Request실제 Downstream Service로 HTTP Request 전달6Post FilterBackend Response가 돌아온 뒤 Header 추가, Logging 등 후처리7Client최종 HTTP Response 수신 2. Route Predica..

Spring 2026.08.20

[Project Reactor] 4. Which operator do I need?

1. Creating a New Sequence…​Lazy하게 생성하는 방식을 제공함✅ Subscription 시점에 실제 값을 생성함 APIAPI설명핵심Mono.fromCallable()반환값이 있는 작업을 Subscription 시점에 실행하여 Mono로 생성반환값 → onNext, Exception → onErrorMono.fromRunnable()반환값이 없는 작업을 Reactive Sequence로 생성값 없이 완료 여부만 표현 예제) Mono.fromCallable()더보기Mono userMono = Mono.fromCallable(() -> userRepository.findById(1L)) .subscribeOn(Schedulers.boundedElastic());Bloc..

Java 2026.08.20

[Project Reactor] 3. Three Sorts of Batching

많은 데이터를 묶음 단위로 나누는 방식을 제공함 1. Grouping with Flux>같은 Key를 가진 데이터끼리 묶는 방식하나의 값은 하나의 그룹에만 속함✅ 각 그룹은 GroupedFlux⚠️ 생성된 GroupedFlux를 실제로 소비해야 데이터를 가져올 수 있음API설명핵심groupBy(Function)같은 Key를 가진 데이터를 각각의 GroupedFlux로 분리Flux → Flux>concatMap()생성된 Group을 하나씩 순차적으로 소비A 그룹 완료 → B 그룹 → C 그룹, 그룹 간 순서 보장예제) groupBy()더보기Flux.just(1, 3, 5, 2, 4, 6) .groupBy(i -> i % 2 == 0 ? "even" : "odd"); 예제) concatMap()더보기F..

Java 2026.08.20

[Spring WebClient] 1. Request / Response

0. WebClient란?WebFlux에서 사용하는 Non-Blocking Http Client✅ Reactor 기반 동작✅ Mono / Flux 형태로 응답 처리✅ Streaming 지원➡️ Thread나 동시성 처리를 직접 관리 안함➡️ Server측과 동일한 Codec 체계를 사용하여 Request/Response를 Encode/Decode 가능 1. retrieve()응답을 추출할 때 사용 예시) 전체 ResponseEntity 받기더보기WebClient client = WebClient.create("https://example.org");Mono> result = client.get() .uri("/persons/{id}", id) .accept(MediaType..

Spring 2026.08.19

[Spring WebFlux] 3. DispatcherHandler

0. DispatcherHandler란?WebFlux 요청 처리의 중심✅ FrontController 역할을 담당함 (DispatcherServlet와 비슷)✅ 'webHandler'란 이름으로 빈 등록되며, WebHttpHandlerBuilder가 주변 구성요소들을 모아 WebFlux 처리 Chain에 넣어줌✅ 다양한 Delegate Component를 활용하여 적절한 Handler를 호출함 1. Special Bean TypesDispatcherHandler는 요청을 직접 전부 처리하지 않고, Spring Bean들에게 작업을 위임함Bean Type역할대표 구현체HandlerMappingRequest를 처리할 Handler를 찾음(가장 먼저 매칭된 Handler가 선택됨)- RequestMapping..

Spring 2026.08.19

[Spring WebFlux] 2. Reactive Core

spring-web 기반 구조✅ reactive web application을 위한 저수준 기반 기능을 제공함✅ 서버: HTTP Server → HttpHandler → WebHandler API → Controller / Functional Endpoint✅ 클라이언트: HTTP Client → ClientHttpConnector → WebClient 1. HttpHandler서로 다른 HTTP Server를 WebFlux의 공통 Reactive 처리 구조에 연결하는 최소 추상화✅ HTTP Request를 받아 Response를 Non-Blocking으로 처리하고, 처리 완료 여부를 Mono로 반환✅ Netty, Tomcat, Jetty 처럼 서로 다른 서버 API를 Webflux가 동일한 방식으로 사..

Spring 2026.08.19

[Spring WebFlux] 1. Overview

1. Spring Webflux란?Reactive Streams와 Reactor 기반Non-blocking 방식으로 HTTP 요청을 처리하는 Spring의 Reactive Web Framework비동기 작업을 Operator + Function Chain 형태의 선언형 API 제공⚠️ 기존 Servlet 기반 Web MVC는 기본적으로 Blocking을 허용하는 구조✅ 동시 요청이 많아지면 이를 감당하기 위해 많은 Thread가 필요함➡️ 적은 Thread로 많은 동시 요청을 처리하는 것이 목적 2. Define “Reactive”Reactive는 변화나 Event가 발생했을 때 반응하는 Programming Model임ex) Network I/O 준비 → Event 발생 → Handler 실행 Non-..

Spring 2026.08.18

[Project Reactor] 2. Reactor Core Features

0. 'reactor-core' 모듈Reactor의 핵심 모듈.Publisher를 구현하면서 다양한 Operator를 제공하는 타입 제공✅ 대략 몇개의 데이터를 발행하는지 타입 자체로 표현함 1. Flux, an Asynchronous Sequence of 0-N Items 0~N개의 데이터를 비동기적으로 발행할 수 있는 Publisher✅ Infinite Stream: Flux는 반드시 종료되는 Stream일 필요는 없음. SignalSignal의미onNext(T)데이터 1개 전달onComplete()정상적으로 Stream 종료onError(Throwable)Error로 Stream 종료 예시) 여러 데이터 발행더보기Flux.just("A", "B", "C") .subscribe(System.o..

Java 2026.08.18

[Project Reactor] 1. Introduction to Reactive Programming

0. Reactive Programming이란?Reactive Programming은 비동기 데이터 Stream과 변화의 전파를 다루는 Programming Paradigm이다.✅ 데이터가 도착하면 Subscriber에게 전달✅ 값뿐 아니라 Error / Complete도 Signal로 전달✅ 처리 과정을 명령형이 아니라 선언형 Chain으로 표현 Iterator vs Reactive Streams구분IteratorReactive Streams데이터 요청 방식Consumer가 직접 가져옴Publisher가 Subscriber에게 전달대표 구조Iterable → IteratorPublisher → Subscriber처리 방식ImperativeDeclarative다음 데이터next() 호출onNext() S..

Java 2026.08.17

[Reactive Streams] 1. 비동기 스트림과 Backpressure

1. Reactive Streams란?비동기 Stream Processing에서 Non-Blocking Backpressure를 제공하기 위한 Specification이다.✅ 비동기 환경에서는 Producer와 Consumer가 서로 다른 속도로 동작함✅ Producer가 Consumer의 처리 속도를 고려하지 않고 계속 데이터를 전달하면 처리되지 못한 데이터가 Queue에 계속 쌓임⚠️ Producer → Queue 증가 → Memory 사용 증가 → 시스템 불안정➡️ Consumer가 자신이 처리할 수 있는 양을 Producer에게 알려주는 Backpressure 구조를 정의함➡️ 서로 다른 Reactive 구현체가 호환될 수 있는 공통 규칙을 제공함 2. Reactive Streams가 해결하려는 ..

Java 2026.08.17