Overivew
- Web-flux는 clinet,server에서 reactive (비동기 + 논블로킹) 스타일의 어플리케이션 개발을 도와주는 모듈입니다
정리

시나리오
- 사용자로부터 요청을 받고 S3에 파일첨부하는 로직을 예시로 들어보자
동기 + 블로킹
- 블로킹 방식의 경우 쓰레드풀에 있는 쓰레드 하나당 하나의 일만 할 수 있다
- S3에 파일이 첨부되기 까지 기다린다 (동기)
- 하나의 쓰레드는 하나의 일만 처리할 수 있기떄문에 만약 쓰레드풀이 가득찼다면 대기상태가 되고, 여유가 있다면 쓰레드풀에서 하나를 꺼내와서 바로 일을 시작한다
비동기 + 논블로킹
- 논블로킹 방식의 경우 하나의 쓰레드가 이벤트루프를 통한 방식을 통해 여러가지의 일을 할 수 있다
- S3에 파일이 로직이 실행되는 순간 바로 반환한다 (비동기)
- 하나의 쓰레드에서 여러개의 일을 처리할 수 있다 (적은 쓰레드로 많은 일을 처리 할 수 있다)
다른 시나리오를 보며 실제 사용 예시를 보자
- 시나리오: 사용자가 게시글을 추가하였을떄, 게시글을 추가한 사용자의 팔로워들에게 슬랙 알람을 보낸다
게시글 작성

이벤트 호출

- 흐름은 아래와 같다
- 게시글을 작성한 유저를 팔로우한 대상들을 찾는다
- 팔로우한 사람들을 한명씩 email을 찾는다
- 해당 email을 slack에서 조회해보았을때 있는지 찾고
- 있다면 대상(slackId)와 닉네임 메세지를 조합한다
- 마지막으로 비동기로 호출을 시작한다
findSlackIdByEmail

- 해당 메서드의 경우 논블로킹 방식으로 동작되기 때문에, 하나의 쓰레드에서 여러개의 일을 처리 할 수 있다
sendPush

오늘 나는 무엇을 알았는가?
- 논블로킹 방식이란, 하나의 쓰레드에서 이벤트 루프방식을 통하여 여러개의 일을 처리 할 수 있다
참조 블로그
https://heeyeah.github.io/spring/2020-02-29-web-flux/