[니꺼, 내꺼] 2주차 - 의사결정 과정 설명

2024. 12. 13. 11:04내일배움캠프/Barter

 해당 게시글은 2주차에 '알림' 이란 도메인 구현시 SSE 를 사용하게 된 과정을 작성한 글입니다.

 

1. 배경

 현재 진행 중인 프로젝트는 '물물교환' 이 중심이기에 사용자에게 자신의 교환이 어떻게 진행되고 있는지 알릴 필요가 있다고 판단해 구현하게 되었습니다. 하지만 단순하게 사용자가 찾아가는 알림이 아니라 사용자가 접속해있다면 실시간으로 서버에서 알림 메시지를 전달해주는 것이 사용자 서비스 만족이 더 높을 거라 판단해 팀원들과 상의하에 '실시간 알림 전송' 이라는 부분도 해당 도메인 구현시 포함하게 되었습니다.

 

2. 요구사항

 '물물교환' 의 상태가 변경되면 해당 행위를 이벤트로 보고 DB 의 NOTIFICATIONS 테이블에 저장해야하고 사용자가 접속해있다면 해당 이벤트 정보를 전달해주어야 합니다.

 

3. 선택지

 사용자에게 알림을 전송하는 것은 크게 'Polling(short-polling), Long-polling, Server-Sent-Events, WebSocket' 4가지 선택지가 있었습니다. 더 많은 선택지가 있겠지만 당시 빠르게 배워서 적용해볼 수 있는 기술을 찾다보니 위와 같은 선택지를 가지게 되었습니다.

 

4. 의사결정/사유

 4가지 선택지 중 SSE 를 선택하게 되었는데 그 이유는 아래와 같습니다.

  •  Polling 은 주기적으로 클라이언트에서 서버로 요청을 보내 응답을 받는데 이 때 전달할 이벤트 정보가 없어도 없다는 응답을 합니다. 이는 불필요한 '요청-응답' 이 발생하기에 선택에서 제외하였습니다.
  • Long-Polling 은 전달할 이벤트 정보가 없다면 대기하였다가 전달할 이벤트 정보가 생기면 그 때 응답을 하는 방식으로 Polling 에 비하면 불필요한 요청 수가 줄어들지만 결국 전달할 이벤트가 많아지면 요청수 또한 증가하기에 선택지에서 제외하였습니다.
  • WebSocket 은 '양방향' 통신으로 현재 구현하고자 하는 실시간 알림은 '사용자가 접속해있으면 서버에서 클라이언트로만 이벤트 정보를 전달' 하기에 현재 상황에서는 부피가 더 큰 기술이라 판단해 선택지에서 제외하였습니다.