MDP

알림 기능 및 DB 조사 - 알림 기능 본문

프로젝트/Extra

알림 기능 및 DB 조사 - 알림 기능

모다팡 2024. 7. 22. 12:01

이번 프로젝트에서 채팅 기능, 의상 컨펌 게시판 기능, 댓글, 좋아요 등 다양한 기능에서 알림 기능을 사용해야 되기 때문에 

스프링부트를 활용하여 알림 기능을 구현하는 방법에 대해 조사하려고 한다.

 

실시간 통신 방법

Polling

  • 일정 주기를 가지고 서버의 API를 호출하는 방법
  • HTTP 통신을 기반으로 하기 때문에 호환성이 좋다.
  • 예를 들어, 5초마다 알림 목록을 호출하면, 업데이트 내역이 5초마다 갱신되어 변경 사항을 적용할 수 있음.

단점

  • 업데이트 주기가 길면 실시간으로 데이터가 갱신되지 않고, 짧으면 갱신 사항이 없음에도 서버에 요청이 들어와 불필요한 서버 부하가 발생할 수 있음.

Polling 방식

 

Long-Polling

  • Polling과 비슷하지만, 업데이트 발생 시에만 응답을 보내는 방식.
  • 서버로 요청이 들어올 경우, 일정 시간 동안 대기하다가 요청한 데이터가 업데이트되면 웹 브라우저에게 응답을 보냄.
  • Polling에서 불필요한 응답을 줄이기 위해 사용할 수 있는 방법.
  • 실시간으로 데이터가 들어올 수 있음.

단점

  • 데이터 업데이트가 빈번하게 일어난다면, 연결을 위한 요청도 자주 발생하므로 Polling과 유사하게 서버에 부하가 발생할 수 있음.

Long-Polling

SSE (Server-Sent Events)

  • 웹 브라우저에서 서버 쪽으로 특정 이벤트를 구독하면, 서버에서는 해당 이벤트 발생 시 웹 브라우저 쪽으로 이벤트를 보내주는 방식.
  • 한 번만 연결 요청을 보내면, 연결이 종료될 때까지 재연결 과정 없이 서버에서 웹 브라우저로 데이터를 계속 보낼 수 있음.

단점

  • 서버에서 웹 브라우저로만 데이터 전송이 가능하고, 그 반대는 불가능함.
  • 최대 동시 접속 횟수가 제한될 수 있음.

SSE

WebSocket

  • 서버와 웹 브라우저 사이 양방향 통신이 가능.
  • 변경 사항에 빠르게 반응해야 하는 채팅이나 리소스 상태에서 지속적 업데이트가 필요한 문서 동시 편집과 같은 서비스에 많이 사용됨.

단점

  • 양방향 통신이 지속적으로 이루어질 수 있지만, 연결을 유지하는 것 자체가 비용이 들기 때문에 트래픽이 많아지면 서버에 큰 부담이 될 수 있음.

Web Socket

결론

HTTP에 연결 방식에 대한 부담이 적은 SSE와 WebSocket  방식으로 선택을 하려고 하는데, 알림 서비스의 경우 클라이언트가 서버로 데이터 전송이 필요하지 않기 때문에 단방향 통신만 구현되도 문제가 되지 않아서 SSE의 단점이 영향을 끼치지 않아서 SSE 방식으로 구현을 해보려고 한다.

 

참고 자료

https://taemham.github.io/posts/Implementing_Notification/

 

[백엔드 스프링부트] 알림 기능은 어떻게 구현하는게 좋을까?

This is a wannabe backend developer’s dev blog.

taemham.github.io

https://tecoble.techcourse.co.kr/post/2022-10-11-server-sent-events/

 

Spring에서 Server-Sent-Events 구현하기

tecoble.techcourse.co.kr