독성 있게 보고 싶다면 ➡️ 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
- get요청을 보내면 서버를 통해 몽고db(realtime database)
- 몽고db애서는 @Tailable을 통해서 커서를 열고 서버에 계속 데이터를 보내줌
- flux(응답, sse protocol)을 통해 client에 response를 보내며, response가 유지되는 것
→ 유지되는 것을 바탕으로 추가된 3번을 보내준다
'Back-end > SpringBoot' 카테고리의 다른 글
Kotlin으로 OpenApi(Swagger)에서 multipart와 dto(vo) 같이 받는 법 (0) | 2025.02.10 |
---|---|
[SpringBoot] security 간단 이론 (0) | 2025.01.15 |
[SpringBoot] WebSocket ver.Spring (0) | 2024.12.18 |