Skip to content

chayoung-choi/springboot-webflux

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Webflux

image

Spring Framework 5에서 새롭게 추가된 모듈

클라이언트, 서버에서 Reactive 스타일의 애플리케이션 개발을 도와주는 모듈이며 non-blocking으로 Reactive Stream을 지원

🧩 Spring WebFlux가 만들어진 이유는 무엇인가?

  • 적은 스레드로 동시성을 처리하고, 보다 적은 하드웨어 자원으로 확장하기 위해

  • 함수형 프로그래밍 - Java 8에서 람다식 추가 됨으로 함수 API 가능성 확장

  • MSA 아키텍처로 가면서 작고 많은 모듈로 쪼개지고, 배로 증가한 통신 트래픽을 기존 blocking 방식에서 처리 한계(스레드풀 발생 확률 ↑)

Webflux 는 Asynchronous Non-blocking I/O 방식을 활용하여 성능을 끌어 올릴 수 있는 장점

🤔 Spring MVC vs. WebFlux

image

  • 동작하는 Spring MVC 애플리케이션이 있다면 Spring WebFlux로 변환 필요 ❌
  • Spring WebFlux는 Java 8 lambda 또는 Kotlin과 함께 사용하는 가볍고 기능적인 웹 프레임 워크에 유용
  • 애플리케이션이 JPA, JDBC 또는 네트워킹 API에 의존하는 경우 Spring MVC가 최선의 선택

💡 Mono와 Flux

Spring Webflux에서 사용하는 Reactive Library 👉 Reactor

Reactor = Reactive Streams의 구현체

Flux와 Mono는 Reactor 객체이며, 차이점은 발행하는 데이터 갯수

Mono Flux
0 ~ 1 개의 데이터 전달 0 ~ N 개의 데이터 전달
image image

Terminal로 비교하기

// 10만건 데이터 Redis에 로드
curl -i localhost:8080/load

// Servlet 조회
curl -i localhost:8080/normal-list

// Reactive 조회
curl -i localhost:8080/reactive-list
Servlet Stack Reactive Stack
Nov-24-2022 10-09-17 Nov-24-2022 10-25-39

Test 코드로 비교하기

  • IOTest.java

Web으로 비교하기

http://localhost:8080

Servlet Stack Reactive Stack
servlet-stack reactive-stack

참고 자료

About

springboot webflux study

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published