-
Notifications
You must be signed in to change notification settings - Fork 0
쪽지 알림 기능을 위한 SSE(Sever Sent Events)
Min-h-96 edited this page Dec 12, 2022
·
2 revisions
쪽지 기능이라고 하기 위해서는 기본적으로 클라이언트 A에서 클라이언트 B로 어떤 데이터를 보내고자 할 때, A가 보낸 데이터를 B가 받아야 됩니다. 즉, A가 요청을 보내고 B가 응답을 받는 것 입니다.
하지만 일반적인 HTTP의 작동 방식은 요청을 보낸 클라이언트에게 응답을 보내는 것입니다. 따라서 A가 서버에 요청을 보냈어도 B에게 응답할 수 있는 무언가가 서버와 B 사이에 연결되어 있어야 합니다. 이러한 동작을 위해서 polling, server-sent events, websocket 과 같은 방법이 있습니다. 이 중에서 저희는 server-sent events 를 이용하기로 했습니다.
- 구현하는 방법이 비교적 간편합니다.
- HTTP 프로토콜과 동일한 프로토콜을 사용합니다.
- 새로운 쪽지가 왔을 경우에, 알림을 포함한 새로운 쪽지 내용만 클라이언트가 서버로부터 받으면 되는 상황이기 때문에 양방향 연결이 꼭 필요하지 않습니다.
- Long polling 은 성능 저하의 가능성이 존재하고, Long polling 의 작동 방식의 특성 상 클라이언트의 다음 요청이 있을 때까지 서버가 응답할 수 없습니다. 참조 링크
이러한 이유로 SSE 를 이용하여 쪽지 기능 및 알람 기능을 구현하기로 했습니다.
NestJS에서 SSE를 사용하는 방법은 굉장히 간단했습니다. 사용하는 방법은 NestJS 공식 문서를 참고했습니다.
공식 문서에서 사용된 방법은 interval
을 이용하여 주기적으로 연결되어있는 클라이언트에게 데이터를 보내는 예제였습니다. 하지만 저희는 주기적으로 클라이언트에게 이벤트를 전송하는 것이 아닌, A 사용자에게 새로운 쪽지를 보내는 것이 요청됐을 때만 A 사용자에게 이벤트를 전송하기를 원했습니다. 따라서, rxjs 의 fromEvent
를 이용하기로 했습니다.
- 📃 기획서
- 📂 Backlog
- 📊 ERD, 폴더 구조
- 🗓️ 회의록