WebSocket 기능은 node.js로 구현해보았지만 이번에 이력서가 붙은 회사에서 기술 경험에 SSE라는게 있어서 사전 과제 이전에 기술을 경험해보고자하여 SSE에 대해 학습하게 되었습니다.
SSE : Server-Sent-Event의 약자로, 서버 → 클라이언트 단방향 스트리밍 기술.
즉, 서버가 브라우저로 지속적으로 이벤트를 푸시(Push) 하는 기능으로 주기적인 업데이트를 서버가 계속 보내야하는 상황일 때 사용합니다.
일반적으로 클라이언트가 서버에게 요청을 보내고, 서버는 이러한 요청이 있을 때만 그에 맞는 응답을 보내는 방식으로 소통하는데, SSE는 서버에서 클라이언트의 요청이 없어도 자유롭게 메세지를 보낼 수 있도록 SSE Web API가 제공됩니다.
사용 예시
- 실시간 알림
- AI 챗봇
- 차트 / 주식 / 환율
- 대기열(Queue)
- 채팅 "읽음 표시", 작성 중..
배경
HTTP 특징인 비연결성은 연결한 적이 있어도 연결을 끊어버린다는 단점이 있다.
그래서 이를 해결하기 위한 웹 기술은 Polling. Long Polling, WebSocket, SSE가 있다.
장점과 단점
장점
- HTTP를 통해 통신하므로 다른 프로토콜은 필요가 없고, 구현이 간단하다.
- 네트워크 연결이 끊어졌을 때 자동으로 재연결을 시도한다.
- 실시간으로 서버에서 클라이언트로 데이터를 전송할 수 있다.
- 서버 리소스 부담이 적고 빠르고 LLM text stream에는 가장 최적화되어 있다.
단점
- GET 메소드만 지원하고, 파라미터를 보내는데 한계가 있다.
- 단방향 통신이며, 한 번 보내면 취소가 불가능하다는 단점이 있다.
- 클라이언트가 페이지를 닫아도 서버에서 감지하기가 어렵다는것도 단점이다.
- SSE는 지속적인 연결을 유지해야 하므로, 많은 클라이언트가 동시에 연결을 유지할 경우 서버 부담이 커질 수 있다.
- 바이너리(이미지, 음성) 전송이 불가능하다.
- 모바일 네트워크 환경에서 끊김 많다.
[참고] : https://velog.io/@black_han26/SSE-Server-Sent-Events