Skip to content

쪽지 알림 기능을 위한 SSE(Sever Sent Events)

Min-h-96 edited this page Dec 12, 2022 · 2 revisions

알림 기능의 필요성

SSE(Server-Side Events)

쪽지 기능이라고 하기 위해서는 기본적으로 클라이언트 A에서 클라이언트 B로 어떤 데이터를 보내고자 할 때, A가 보낸 데이터를 B가 받아야 됩니다. 즉, A가 요청을 보내고 B가 응답을 받는 것 입니다.

하지만 일반적인 HTTP의 작동 방식은 요청을 보낸 클라이언트에게 응답을 보내는 것입니다. 따라서 A가 서버에 요청을 보냈어도 B에게 응답할 수 있는 무언가가 서버와 B 사이에 연결되어 있어야 합니다. 이러한 동작을 위해서 polling, server-sent events, websocket 과 같은 방법이 있습니다. 이 중에서 저희는 server-sent events 를 이용하기로 했습니다.

SSE를 고른 이유

  • 구현하는 방법이 비교적 간편합니다.
  • HTTP 프로토콜과 동일한 프로토콜을 사용합니다.
  • 새로운 쪽지가 왔을 경우에, 알림을 포함한 새로운 쪽지 내용만 클라이언트가 서버로부터 받으면 되는 상황이기 때문에 양방향 연결이 꼭 필요하지 않습니다.
  • Long polling 은 성능 저하의 가능성이 존재하고, Long polling 의 작동 방식의 특성 상 클라이언트의 다음 요청이 있을 때까지 서버가 응답할 수 없습니다. 참조 링크

이러한 이유로 SSE 를 이용하여 쪽지 기능 및 알람 기능을 구현하기로 했습니다.

NestJS에서 SSE 사용하기

NestJS에서 SSE를 사용하는 방법은 굉장히 간단했습니다. 사용하는 방법은 NestJS 공식 문서를 참고했습니다.

공식 문서에서 사용된 방법은 interval을 이용하여 주기적으로 연결되어있는 클라이언트에게 데이터를 보내는 예제였습니다. 하지만 저희는 주기적으로 클라이언트에게 이벤트를 전송하는 것이 아닌, A 사용자에게 새로운 쪽지를 보내는 것이 요청됐을 때만 A 사용자에게 이벤트를 전송하기를 원했습니다. 따라서, rxjs 의 fromEvent를 이용하기로 했습니다.

얼리버드

프로젝트

개발일지

스프린트 계획

멘토링

데일리 스크럼

데일리 개인 회고

위클리 그룹 회고

스터디

Clone this wiki locally