Webflux 왜 쓰는지?

송현진·2023년 5월 24일
0

Spring Webflux ‘왜’ 나옴?

예시) A가 저녁 뭐냐고 물었을 때 대답을 얻기까지 과정은 아래의 프로세스에 따라서 진행이 된다. 하지만 두가지 문제점이 있다.

  • 멍때리는 시간 존재. 그 시간에 다른 일 못함.
  • 알고싶은 정보 알기 위해 항상 물어봐야 함.

문제점을 해결할 수 있는 게 Reactive programming(반응형 프로그래밍)이다.

Reactive programming(반응형 프로그래밍)이란? 요청이 있을 때 멍때리지 않고 응답하는 방식

Reactive programming 배경

client, server, db 라고 생각하고 흐름 이해해보자

만약 db에서 10초 걸린다고 했을 때 server가 그걸 기다리면서 멍때린다면 어떤 문제가 생길까?

A의 요청을 해결하기 위해 계속 멍 때리기 때문에 다른 클라이언트의 요청을 받지 못한다.

그래서 기존엔 이러한 문제 때문에 Thread 방식을 사용했다.

Time slicing 방법으로 해야할 일을 쪼개서 진행했다. 하지만 이러한 경우에 context switching 문제가 생긴다.

  • Time Slicing은 GPU의 시간 분할 스케줄러
  • context switching : 작업의 주체가 현재 context를 잠시 중단하고 다른 context를 실행하는 것

Thread 방식으로 처리해도 느리면 어떻게 처리할까? 바~~로 비동기처리

이벤트 루프, 비동기처리로 멍때리지 말자

serverdb에 요청 보냈을 때 10초 걸린다고 바로 응답을 준다. serverclient한테 바로 응답을 준다. 그렇다면 server는 할 일이 없어지기 때문에 다른 요청 받을 수 있다. 그렇기에 비동기처리가 가능해진다.

단, A가 요청한 이벤트를 기억해야 하는데, 이것을 이벤트 루프라고 부른다.

이렇게 이벤트 루프 덕분에 서버는 멍 때리지 않고 여러가지 요청을 동시에 받고 기억할 수 있어서 비동기처리가 가능해진다.

Stream, 계속 물어보지 않게 응답유지

HTTP 프로토콜 방식은 무상태이기 때문에 client가 요청을 보내고 server가 응답을 한 번 보내면 그 선이 끊긴다. 그러면 이벤트 루프에서 기억하던 응답을 다시 보낼 수 없게 된다.

그래서 응답을 안끊고 계속 유지시켜야한다. 응답을 stream으로 유지시키는 방식을 SSE 프로토콜 방식이라고 한다.

아래 그림의 왼쪽처럼 요청 있고 응답 유지하는 것은 웹소켓방식

오른쪽처럼 요청 필요없어서 끊고 응답만 유지시키는 것이 SSE(Server Send Event) 프로토콜 방식

4번 째 이미지에서 봤듯이 MonoFlux에 대해 알아보다 간단하게 말하자면

Mono 는 0~1개 응답을 해주고 Flux 는 1~N개의 대답을 해준다는 큰 차이만 알고 가면 될 거 같다.

profile
개발자가 되고 싶은 취준생

0개의 댓글