Spring WebFlux - 1

둥그냥·2022년 1월 19일
0

STOVE DEV CAMP

목록 보기
2/5

Spring

  • 오리지날은 Spring WebMVC로 서블릿 API와 서블릿 컨테이너를 위한 것
  • Spring WebFlux는 스프링 버전 5.0 이후로 추가됨
    • (스프링5는 Spring Boot 2 부터 도입이 되었다)
    • Reactive Stack 를 사용할지 Servlet Stack 를 사용할지 둘 중 하나를 선택을 해야 한다.

Spring WebFlux란

  • 장점 : Webflux 는 Asynchronous Non-blocking I/O 을 방식을 활용하여 성능을 올림
    단점 : Blocking 코드가 있다면, 안 하느니만 못함
    ex) Java Non Blocking 지원하는 DB Driver -> R2DBC

  • 리액티브 스트림 back pressure(백프레셔)를 지원함

리액티브란
변경에 대한 반응에 중점을 두어 만들어진 프로그래밍 모델
ex) 논 블로킹 -> 동작을 중단(blocking)하는 대신 반응함

논블로킹이란

  • 동기와 비동기 = 함수가 바로 리턴되는지 여부
  • 블록킹과 논블록킹 = 백그라운드 작업 여부를 확인하는가 여부
    동기-블록킹 => 함수를 호출하면 백그라운드 작업이 완료되었는 계속 확인하고 완료되면 함수가 리턴
    비동기-논 블록킹 => 함수를 호출하고 백그라운드 작업이 끝났는지 확인하지 않고 리턴을 하고 바로 다른 작업

백프레셔(back pressure)란
Publisher 에서 발행하고, Subscriber에서 구독할 때, Publisher 에서 데이터를 Subscriber 로 Push 하는 방식이 아니라, Pull 방식으로 Subscriber 가 Publisher 로 처리할 수 있는 양의 크기만큼 데이터를 요청 함으로써 Subscriber의 장애를 방지하기 위함이다.
즉, 다이나믹 풀 방식의 데이터 요청을 통해서 구독자가 수용할 수 있는 만큼 데이터를 요청하는 방식이다.

reactive streams란
논블로킹(Non-blocking) 백프레셔(back pressure)를 이용한 비동기 데이터 처리의 표준


Spring MVC vs Spring WebFlux

SPring MVC vs Spring WebFlux

Spring MVC

  • Servlet 기반
  • sync + blocking 방식으로 동작
  • 결국 하나의 처리를 할 때 Response를 기다리며 thread를 지연
    • block 되지 않게 Multi Thread를 사용
      -> Thread 간의 Context Switch 발생 시 비용이 생겨 비효율적

Spring WebFlux

  • async + non blocking
    • callback이라서 Blocking이나 Polling 방식 사용 안함

0개의 댓글