webSocket 정의, 동작방식, 유의할 점

mocaccino·2024년 11월 25일

백엔드로드맵

목록 보기
18/19

webSocket이란 무엇인가?

WebSocket은 클라이언트와 서버 간 양방향으로 지속적인 데이터 교환이 가능한 지속적인 연결을 제공한다.

웹소켓은 라이브 채팅, 온라인 게임, 실시간 데이터 대시보드와 같은 실시간 업데이트가 필요한 응용 프로그램에서 주로 사용된다.

HTTP 위에서 동작하는 WebSocket

WebSocket은 처음에는 HTTP 프로토콜을 통해 핸드셰이크(handshake)를 수행하여 연결을 시작한다.
그 후 WebSocket 프로토콜로 업그레이드되어 저지연 통신을 제공한다.
이 방식은 HTTP Polling이나 Long Polling 방식보다 네트워크 오버헤드를 줄이고 실시간성을 강화하는 데 효과적이다.

webSocket이 동작하는 방식

연결 유지 (Persistent Connection)

WebSocket은 한번 연결이 생성되면 명시적으로 닫지 않는 한 끊어지지 않는 지속적인 연결을 유지한다.
이는 일반적인 HTTP 요청/응답 모델과 구별되는 점이다. HTTP는 요청-응답 주기가 끝나면 연결이 해제되기 때문이다.

이벤트 드리븐 (Event-Driven)

WebSocket은 이벤트 드리븐 방식으로 작동한다.

이벤트 드리븐이란 특정 이벤트가 발생했을 때 해당 이벤트를 감지한 서버가 관련 데이터를 스트리밍하거나, 연결된 모든 클라이언트에게 브로드캐스팅하는 형태이다.

  • 일반적인 HTTP 방식: 요청을 보낸 클라이언트 한 명에게만 응답
  • WebSocket 방식: 이벤트 발생 시 연결된 모든 클라이언트에게 응답

 예  채팅 애플리케이션에서는 한 사용자가 메시지를 전송하면, WebSocket 서버는 해당 메시지를 동시에 모든 연결된 사용자들에게 전달한다.

WebSocket 사용 시 주의할 점

WebSocket을 꼭 사용해야 할까?

단순한 채팅 프로그램의 경우 HTTP Polling 방식으로도 충분히 구현가능하다.
하지만 HTTP는 연결이 반복적으로 생성 및 종료되므로 서버에 오버헤드가 커질 수 있는데, WebSocket은 이러한 단점을 보완하기에 적합합니다.

실무에서의 주의사항 및 경험

  1. 내부 IP가 자주 변경되는 서버와의 연결 문제
    WebSocket은 연결이 끊기지 않는 특성 때문에, 서버 2와 같이 내부 IP가 자주 변경되는 환경에서 연결 이상을 감지하기 어려운 문제가 있었다.
    이 경우 WebSocket 대신 HTTP 기반 방식으로 변경하여 문제를 해결했던 사례가 있다.

  2. 기획 및 보안 정책의 제약
    일부 보안 정책이나 특정 요구사항에서는 WebSocket 사용이 제한될 수 있기 때문에, 무조건 WebSocket을 고집하기보다 요구사항에 맞는 통신 방식을 검토해야 합니다.

WebSocket을 활용한 기술 설계

연결 상태 관리

WebSocket 연결 상태를 정기적으로 점검하거나, 클라이언트와의 연결을 확인할 수 있는 Ping-Pong 메시지를 구현하면 내부 IP가 자주 변경되는 서버와의 연결 문제를 해결할 수 있는 방안이 된다.

오류 처리

서버가 예기치 못한 이유로 종료되거나 네트워크 환경이 불안정할 경우 재연결을 시도하는 로직을 포함해야 한다.

적합한 사례 검토

실시간성 요구가 낮거나 간헐적인 데이터 전송이 필요한 경우 HTTP Polling이 더 적합할 수 있다. 요구사항에 맞는 기술을 사용해야 한다.

profile
레거시문서를 줄이자. 계속 업데이트해서 최신화한다.

0개의 댓글