본문 바로가기
Back-end/SpringBoot

[SpringBoot] webflux

by backend 개발자 지망생 2024. 12. 18.

독성 있게 보고 싶다면 ➡️ https://pretty-pilot-212.notion.site/webflux-11a708535dff807398d4fa6abb8ccf66

 

http 대신 sse를 사용하는 이유

→ http는 request, response 후에는 연결이 끊긴다.

→ sse는 요청 후에 응답을 해도 request만 끊기고, @TAILABLE로 인해 계속 데이터를 보낼 수 있다.

flux를 사용하려 할 때,,,

  • Tailable Cursor는 MongoDB에서 끝이 없는 커서로, 주로 로그 또는 채팅 시스템에서 실시간으로 데이터를 스트리밍하기 위해 사용됩니다.
  • Capped Collection은 고정된 크기를 가진 컬렉션으로, 가장 오래된 문서를 제거하면서 새로운 문서를 추가하는 방식으로 작동합니다. Tailable Cursor는 이런 Capped Collection에서만 사용 가능합니다.
  • 이 오류는 tailable cursor를 사용할 때, 그 대상 컬렉션이 capped collection이 아니기 때문에 발생했습니다.

해결 방법(몽고 쉘에서)

db.runCommand({
convertToCapped: "chat", // 컬렉션 이름
size: 100000 // 바이트 단위의 크기 (적절한 크기로 설정)
});

  • http

http로 채팅을 구현할 시, get요청을 계속 해줘서 채팅을 업데이트 해야 하는 방식이다.

  • websocket

유지되는 stateful 한 방식, 자기가 보낸 것은 클라이언트에 append 하며 보여준다. (서버에는 쌓임)

  • sse
  1. get요청을 보내면 서버를 통해 몽고db(realtime database)
  2. 몽고db애서는 @Tailable을 통해서 커서를 열고 서버에 계속 데이터를 보내줌
  3. flux(응답, sse protocol)을 통해 client에 response를 보내며, response가 유지되는 것

 

→ 유지되는 것을 바탕으로 추가된 3번을 보내준다