웹 알림 구현 방식
Polling(클라이언트에서 주기적으로 알림 체크)
클라이언트에서 api를 호출해 알림이 있는지 확인하는 방식. 요청을 받은 서버는 클라이언트에게 즉시 응답을 보낸다.

- 화면이 바뀔때마다 api를 호출해 알림이 있는지 확인하거나
- 주기를 설정하여 자동으로 api를 호출하여 알림이 있는지 확인
장점
- 구현이 비교적 간단함
- client - server 연결 상태에 대한 관리 부담이 없다.
단점
- 유저에게 전달할 알림이 없어도 api가 호출되기 때문에 자원 낭비가 될 수 있음
- 트래픽이 높은 서비스에는 부적합
Long-Polling(서버에서 주기적으로 알림 체크)
Polling 방식과 비슷하지만 클라이언트의 요청을 받는 즉시 응답을 하는게 아니라 알림이 있을때만 응답을 보내 불필요한 응답을 줄여준다. 실시간 메세지 전달이 중요하지만 메시지 발생 빈도가 낮은 경우에 적합

- client의 요청을 받은 서버는 응답으로 보내줄 새 알림이 없다면 응답을 보내지 않고 대기
- timeout 설정된 시간까지 새 알림이 없다면 응답을 보내고 client는 새로운 요청을 서버에 전송
장점
- 폴링 방식보다 비교적 효율적
단점
- 알림이 빈번하게 발생하면 폴링 방식이랑 별 차이 없음
- 클라이언트와 서버의 커넥션을 관리해야함
- 관리를 잘못할 경우 서비스 장애로 이어질 확률이 매우 높음
Web-socket
- 양방향 통신을 위해 개발된 기술인데 알림에 적합한가?
Server-sent Events
서버 → 클라이언트 방향으로만 흐르는 단방향 통신 방법. 폴링처럼 반복적으로 http 요청을 보낼 필요 없이 http 연결을 통해 서버에서 클라이언트로 데이터를 보낼 수 있다.

장점
- 알림 메커니즘과 가장 잘 어울림
- 기존 폴링의 성능적인 단점을 해결하면서 웹소켓보다 훨씬 가벼움
단점
- 클라이언트와 서버의 커넥션 관리문제는 여전히 존재
- 어느정도의 학습 곡선이 필요
- 프론트 : eventsource
- 백엔드 : SseEmitter
Ref
- SSE