BackEnd/Spring WebFlux 9

[WebFlux_2] @RestController vs @Component

✅ Spring WebFlux의 핵심 구조: DispatcherHandler와 그 내부 구조앞에서 @RestController와 @Component 방식의 차이를 다뤘다면, 이번에는 이 둘이 내부적으로 어떤 구조에서 동작하며, 왜 그 차이가 발생하는지를 정리해본다.🔸 DispatcherHandler란?DispatcherHandler는 Spring WebFlux의 중앙 진입점이다. Spring MVC에서의 DispatcherServlet과 역할이 동일하며, HTTP 요청을 받아 핸들러를 찾고 실행한 뒤 결과를 반환하는 흐름을 제어한다. WebFlux는 논블로킹 환경에서 동작하기 때문에 DispatcherHandler도 내부적으로 Mono와 Flux를 사용해 모든 처리를 리액티브하게 실행한다.🔸 Rest..

[WebFlux_1] @RestController vs @Component

Spring WebFlux를 사용할 때 가장 먼저 마주치는 애노테이션 중 하나가 @RestController입니다. 그런데 같은 스프링 빈으로 등록되는 @Component와 무엇이 다른 걸까요? 이 글에서는 @RestController와 @Component의 차이를 기본 개념부터 실무 사용 포인트, 내부 동작까지 정리합니다. 1️⃣ WebFlux란?Spring WebFlux는 Spring 5부터 도입된 리액티브 논블로킹 웹 프레임워크입니다.서블릿 기반 대신 Netty, Undertow 등 리액티브 서버를 기반으로 동작주요 리턴 타입: Mono, Flux (Project Reactor 기반)비동기 스트림 처리에 최적화2️⃣ @RestController vs @Component 기본 차이 항목@RestCon..

Kotlin + Spring WebFlux 테스트 구조 설계기

WebTestClient 기반 공통 로깅과 JSON 출력까지 자동화✅ 목표WebFlux는 비동기 기반이기 때문에 기존 MockMvc 방식과는 다르게 WebTestClient를 사용합니다.테스트가 복잡해지기 전에, 저는 다음을 목표로 구조를 설계했습니다:모든 테스트에서 요청/응답 로그 자동 수집응답 시간, 헤더, JSON 바디를 보기 좋게 출력중복 없이 재사용 가능한 공통 베이스 테스트 클래스 구성🛠️ 프로젝트 환경 요약// build.gradle.ktsdependencies { implementation("org.springframework.boot:spring-boot-starter-webflux") // WebFlux implementation("org.springframewor..

Spring WebFlux에서 MySQL을 사용하는 방법: JDBC vs R2DBC 완전 정리

Spring WebFlux를 사용할 때 가장 헷갈리는 부분이 있다. 바로 "DB 연결은 어떻게 하지?" "JPA를 쓸 수는 없을까?" 하는 문제다.이 글에서는 WebFlux에서 MySQL을 어떻게 연결하고, R2DBC를 어떻게 사용하는지, 그리고 JPA를 왜 사용할 수 없는지를 순서대로, 쉽게 정리한다.1. WebFlux에서 DB(MySQL) 연결 방법Spring WebFlux는 기본적으로 Non-Blocking 처리를 목표로 한다. 그렇기 때문에 데이터베이스 연결 역시 Non-Blocking 드라이버를 사용해야 성능을 제대로 발휘할 수 있다.✅ WebFlux에서 MySQL을 연결하려면 R2DBC 드라이버를 사용해야 한다.1.1 필요한 의존성 추가 (Gradle)dependencies { imple..

부록 - Spring Boot MVC vs Spring WebFlux 비교

Spring Boot MVC와 Spring Boot WebFlux는 개발자가 작성하는 코드 스타일은 비슷하지만, 내부 구조, 기술 스택, 처리 방식이 본질적으로 다르다. 이 글에서는 MVC와 WebFlux를 특징 요약, 흐름도, 비교 테이블, 사용 기술 스택 중심으로 깔끔하게 정리한다.0. Spring MVC vs Spring WebFlux - 특징 요약📌 Spring MVC 특징Servlet API 기반 전통적인 웹 애플리케이션 프레임워크Blocking 방식: 요청 처리 동안 쓰레드를 점유개발 난이도 낮음: 코드가 직관적이고, 동기 흐름Blocking 데이터베이스 (JDBC, JPA) 사용에 최적화전통적인 웹사이트, 사내 시스템에 적합📌 Spring WebFlux 특징Reactive Streams ..

Spring WebFlux 심화 시리즈 (4) - WebClient를 활용한 대용량 데이터 처리

WebClient는 WebFlux의 비동기 HTTP 클라이언트로, 외부 API 호출 시 Non-Blocking 통신을 가능하게 한다. 대용량 데이터를 받아야 하는 경우, 효율적인 WebClient 사용법이 중요하다.1. 기본 개념WebClient는 응답을 받으면서 스트리밍 처리가 가능하다.응답 전체를 기다리지 않고 데이터 조각(chunk)을 받을 수 있다.특히 대량 데이터(API 응답이 수 MB 이상)일 때 유리하다.2. 실전 예제2.1 WebClient 설정@Beanfun webClient(builder: WebClient.Builder): WebClient { return builder.baseUrl("https://external.api.com").build()}2.2 대량 데이터 호출 예시@..

Spring WebFlux 심화 시리즈 (3) - Flux로 페이징 처리하는 방법

Spring WebFlux 심화 시리즈 (3) - Flux로 페이징 처리하는 방법대량의 콘텐츠를 WebFlux로 스트리밍할 때, 모든 데이터를 한 번에 클라이언트로 보내는 것은 비효율적이다. 특히 데이터가 수천 건 이상일 경우, 반드시 페이징 처리가 필요하다. 이 글에서는 WebFlux 환경에서 Flux를 이용해 페이징 처리하는 방법을 정리한다.1. 기본 개념전통적인 MVC에서는 PageRequest를 사용해 DB 쿼리 단계에서 페이징한다.WebFlux에서도 원칙은 같다: DB 쿼리에서 필요한 데이터만 가져와야 한다.Flux를 사용하더라도, 전체 데이터를 Flux로 읽고 나서 자르는 것은 비효율적이다.2. 실전 예제 (R2DBC 기준)2.1 ContentService 예시@Serviceclass Cont..

Spring MVC vs Spring WebFlux 시리즈 (2) - 콘텐츠 리스트를 WebFlux로 반환하는 방법

WebFlux에서는 데이터가 여러 건일 때 어떻게 처리할까? 이 글에서는 콘텐츠 리스트를 WebFlux 방식으로 반환하는 실질적인 방법을 정리한다.1. 기본 상황 정리콘텐츠 리스트 (예: 게시글 목록, 동영상 목록 등)= 여러 건의 데이터 반환= WebFlux에서는 Flux로 처리한다.2. 핵심 포인트항목설명반환 타입Flux (0개 ~ N개)컨트롤러 어노테이션@RestController, @GetMapping (Annotation 기반)데이터 준비비동기 방식 (Reactive Repository 또는 Service)DB 연동R2DBC (Reactive DB 드라이버) 사용 추천3. 예제 코드 (Spring WebFlux)3.1 Content 모델 예시data class Content( val id:..

Spring MVC vs Spring WebFlux 시리즈 (1) - 왜 WebFlux를 선택하는가?

Spring 생태계에는 두 가지 웹 프레임워크가 존재한다: Spring MVC와 Spring WebFlux. 둘 다 웹 애플리케이션을 개발하는 데 사용되지만, 내부 아키텍처와 동작 방식에 명확한 차이가 있다. 이 글에서는 MVC와 WebFlux를 비교하고, Blocking과 Non-Blocking의 기술적 차이까지 포함해 정리한다.1. 기본 비교: Spring MVC vs Spring WebFlux항목Spring MVCSpring WebFlux처리 모델동기 (Blocking)비동기 (Non-Blocking)요청당 쓰레드요청마다 하나 점유필요할 때만 쓰레드 사용API 스타일@RestController@RestController, RouterFunction지원 데이터베이스JDBC, JPA (Blocking)..