개발 낙서장

[TIL] 내일배움캠프 67일차 - SSE 본문

Java/Sparta

[TIL] 내일배움캠프 67일차 - SSE

권승준 2024. 4. 2. 21:47

 

 

오늘의 학습 키워드📚

SSE

채팅방을 구현하면서 다른 사람의 채팅 메세지를 수신하고 보내는 양방향 통신으로 웹소켓 프로토콜인 STOMP를 사용했다.
채팅방 안에서 메시지를 주고 받고 누가 보낸 메세지인지는 알 수 있었지만 채팅 방에 없을 경우에는 어떻게 해야 될지 고민이 생겼다.

  1. 폴링 방식
  2. 웹소켓 방식
  3. SSE

폴링(Polling)

폴링 기법은 클라이언트에서 서버에 주기적으로 HTTP 요청을 보내 지속적으로 데이터를 받는 방법이다.
주기를 짧게 할 수록 데이터를 자주 받을 수 있기 때문에 실시간 통신인 '척'은 할 수 있지만 그만큼 서버에 부하가 가는 방법이다.

그래서 나온 방법이 롱 폴링 기법인데 서버에 요청을 보내놓고 대기를 하다가 서버에서 이벤트를 발생시켜 응답을 보내주면 다시 요청을 보내 대기하는 방법이다.
기존 폴링 기법보다 개선된 방법이지만 이 역시 불필요한 요청이 지속적으로 발생할 수 있고 실시간 혹은 즉각적으로 응답을 받아야 할 때는 적합하지 않다.
다만 응답의 주기가 긴 작업에 대해서는 롱 폴링 방법이 쓰이기도 한다.

웹 소켓 방식

웹 소켓은 서버에 연결 요청을 보내고 연결에 성공하면 클라이언트-서버가 서로 연결되어 데이터를 주고받을 수 있는 방법이다.
HTTP 프로토콜이 아니기 때문에 양 방향 통신이 가능하고 따로 요청을 하지 않아도 클라이언트에서 메세지를 받을 수 있다.
하지만 양 방향 통신이 잦지 않은 경우 서버 리소스를 낭비하게 될 수 있다는 단점이 있다.
주로 실시간 채팅 등 클라이언트와 서버가 계속해서 데이터를 주고 받아야 하는 시스템에 사용된다.

SSE

SSE(Server-Sent Event)는 클라이언트에서 서버에 SSE 연결 요청을 하고 연결에 성공하면 일정 시간 동안 서버에서의 데이터 변경 사항을 받을 수 있는 방법이다.
클라이언트와 연결이 되면 일정 시간 동안 서버에서 이벤트가 발생할 때마다 클라이언트로 메세지를 보내는 단방향 통신이다.
클라이언트에서는 데이터를 받을 수만 있고 서버에서 클라이언트가 접속을 종료했다는 것을 인지하기 어렵다는 단점이 있다.
주로 알림 등 클라이언트에서 지속적으로 데이터 갱신이 필요할 경우에 사용한다.

나는 SSE를 활용해 채팅방 알림 등의 기능을 구현하기로 했다.
폴링 방식은 옛날 방식이기도 하고 채팅방 서비스를 이용하는 동안에는 짧은 주기로 계속해서 요청을 보내야 하기에 좋지 않다고 판단했다.
웹 소켓 방식은 실시간 통신이라 즉각적으로 사용자가 데이터의 변경을 알 수 있지만 데이터를 받는 기능만 필요하기에 SSE를 선택했다.


오늘의 회고💬

오늘도 역시 집중이 잘 되지 않았다. 프로젝트 기간이 많이 남은 것도 아닌데 마음을 다시 다잡아야 할 것 같다.

 

내일의 계획📜

SSE를 활용한 알림 및 채팅방 변경 감지 등 채팅방의 핵심적인 기본 기능은 완료할 예정이다.

Comments