Web Flux ?

Terror·2024년 11월 20일

최종 프로젝트

목록 보기
28/28

Overivew

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

정리

시나리오

  • 사용자로부터 요청을 받고 S3에 파일첨부하는 로직을 예시로 들어보자

동기 + 블로킹

  • 블로킹 방식의 경우 쓰레드풀에 있는 쓰레드 하나당 하나의 일만 할 수 있다
  • S3에 파일이 첨부되기 까지 기다린다 (동기)
  • 하나의 쓰레드는 하나의 일만 처리할 수 있기떄문에 만약 쓰레드풀이 가득찼다면 대기상태가 되고, 여유가 있다면 쓰레드풀에서 하나를 꺼내와서 바로 일을 시작한다

비동기 + 논블로킹

  • 논블로킹 방식의 경우 하나의 쓰레드가 이벤트루프를 통한 방식을 통해 여러가지의 일을 할 수 있다
  • S3에 파일이 로직이 실행되는 순간 바로 반환한다 (비동기)
  • 하나의 쓰레드에서 여러개의 일을 처리할 수 있다 (적은 쓰레드로 많은 일을 처리 할 수 있다)

다른 시나리오를 보며 실제 사용 예시를 보자

  • 시나리오: 사용자가 게시글을 추가하였을떄, 게시글을 추가한 사용자의 팔로워들에게 슬랙 알람을 보낸다

게시글 작성

  • 게시글을 저장한후, 이벤트를 호출한다

이벤트 호출

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

findSlackIdByEmail

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

sendPush

  • sendPush도 이하동문이다

오늘 나는 무엇을 알았는가?

  • 논블로킹 방식이란, 하나의 쓰레드에서 이벤트 루프방식을 통하여 여러개의 일을 처리 할 수 있다

참조 블로그

https://heeyeah.github.io/spring/2020-02-29-web-flux/

profile
테러대응전문가

0개의 댓글