- WebFlux2024년 12월 26일
- imaginaring
- 작성자
- 2024.12.26.:41
- 스프링 5에서 도입된 비동기, 논블로킹 웹 프레임워크
- 전통적인 스프링 MVC가 동기식 <==> WebFlux는 Reactive Streams 기반의 비동기 방식
특징
- 논블로킹 - 스레드가 작업이 완료될 때까지 기다리지 않고 다른 작업 처리 가능, 효율적인 리소스 사용
- Reactive Streams 기반 - Publisher와 Subscriber 패턴을 통해 데이터 스트림 처리 (Flux, Mono와 같은 Reactor 라이브러리 활용)
- 서버지원 - Netty, Undertow 와 같은 논블로킹 서버와 호환 (기존의 Servlet 컨테이너, 톰캣에서도 동작 가능)
- 데이터 흐름 중심 - 데이터가 준비될 때 처리하는 데이터 스트림 기반 프로그래밍 지원
구조
- 애노테이션 기반 - 스프링 MVC와 유사한 방식으로 컨트롤러 작성
@RestController @RequestMapping("/api") public class UserController { @GetMapping("/users/{id}") public Mono<User> getUserById(@PathVariable String id) { return userService.findUserById(id); } @GetMapping("/users") public Flux<User> getAllUsers() { return userService.findAllUsers(); } }
- 함수형 프로그래밍 - Java 8 람다와 같은 함수형 스타일로 라우터 정의
@Configuration public class RouterConfig { @Bean public RouterFunction<ServerResponse> route(UserHandler handler) { return RouterFunctions.route() .GET("/users/{id}", handler::getUserById) .GET("/users", handler::getAllUsers) .build(); } }
Mono : 0~1개의 데이터 아이템을 비동기로 처리 (ex, 단일 객체 반환)
Flux : 0~N개의 데이터 아이템을 비동기로 처리 (ex, 컬렉션 반환)
특징 스프링 MVC WebFlux 처리 방식 동기 블로킹 (Blocking) 비동기 논블로킹 (Non-blocking) 스레드 모델 하나의 요청당 하나의 스레드 사용 스레드 풀을 공유하며 효율적 자원 사용 리액티브 지원 지원하지 않음 Reactor 기반 지원 적합한 환경 전통적인 웹 애플리케이션 고성능, 실시간 스트리밍 '프로그래밍 > 스프링' 카테고리의 다른 글
@Value 어노테이션 (0) 2025.01.02 레이어드 아키텍처 (0) 2024.12.26 MyBatis vs JPA (2) 2024.12.26 스프링 MVC (1) 2024.12.26 Bean 스코프 (0) 2024.12.26 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)