WebSocket에 대해서

MIN·2025년 5월 20일

weekly

목록 보기
20/31

WebSocket을 설명하기전에

HTTP

  • Http는 클라이언트가 요청을 보내야 응답을 반환해주는 단방향 모델이다.
  • 연결은 요청마다 초기화됨. 폴링, 롱폴링으로 실시간 기능을 구현할 순 있지만 비효율적

WebSocket

  • 초기 핸드셰이크(HTTP 기반) 후 지속적인 풀듀플렉스(Full-Duplex) 연결 유지 할 수있음.
  • 서버가 먼저 클라이언트에게 요청도 가능하다.
  • 양방향 통신이 가능하다.

WebSocket은 어떤 기능에 적합한지 ?

비교하기 위한 표

구분HTTPWebSocket
통신 방식클라이언트 → 서버 (요청/응답)서버 ↔ 클라이언트 (양방향)
연결 방식요청마다 새 연결지속적인 연결 유지
실시간성폴링/롱폴링 필요기본적으로 실시간 지원
예시게시글 보기, 검색 등채팅, 실시간 알림, 게임 등

WebSocket이 적합한 기능

  • 실시간 채팅 : 여러 사용자 간의 메세지 교환이 가능해야함
  • 실시간 알림 : 모바일 앱의 푸쉬알림이나 SNS업데이트 등이 있음
    이외에도 실시간으로 동기화가 가능한 온라인게임이나 실시간 데이터스트리밍(주식) 등이 있다

HTTP로도 가능하지만 WebSocket을 사용해야하는 이유

  • 단순히 데이터를 조회용 이거나 정적 콘텐츠를 제공하는 경우 (게시글 로드, 검색 결과)
  • 데이터 업데이트가 드문 경우 HTTP로 충분함
  • 서버가 수많은 동시 연결을 처리할 수 없는 경우, WebSocket의 지속적 연결은 부담이 될 수 있음

브로드 캐스팅(Broadcasting)

서버가 여러 클라이언트에게 동시에 메시지를 보낼 수 있는 기능
웹소켓을 이용하여 기능을 구현하다보면 여러 사용자에게 동시에 데이터를 전달도 해야하는 기능이 필수!

예시
• 채팅방에서 한 사용자가 메시지 전송 → 같은 방에 있는 모든 사용자에게 전달
• 실시간 알림 기능에서 새로운 알림 전송 → 앱에 연결된 모든 사용자에게 전달

이것을 구현하려면 WebSocket에서 room 이라는 개념을 제공하는데

Room

  • 하나의 웹소켓 서버에서 사용자들을 그룹으로 지정해서 분리하는것

사용 이유

  • 모든 유저에게 브로드캐스팅을 하게되면 리소스 낭비가 된다.

관련 메서드

  • socket.join('roomName') - 해당 사용자를 특정 room에 참가시킴
  • socket.leave('roomName') - 해당 사용자를 room에서 나가게 함
  • io.to('roomName').emit(...) - 해당 room에 있는 사용자들에게만 메시지를 보낸다

✅ 정리

Room은 브로드캐스팅을 제어할 수 있는 유닛으로 실시간 채팅, 협업도구
알림에서 특히 알맞은 특정 다수에게 실시간정보를 보내야 할 때 필수적임!

0개의 댓글