나만의 학습 기록

최종 목적은 기술 블로그💩

백엔드 공부

실시간 통신 방식 WebSocket

밈밍민믹 2026. 5. 31. 14:18

안녕하세요. 벌써 일요일이네요. 일주일이 정말 눈 깜빡하는 사이에 지나가는 것 같습니다.

이번에는 웹소켓에 대한 학습을 진행할 예정입니다. 실제로 웹소켓을 통한 채팅 기능을 구현해본적이 있어서 이론적으로 한번 더 학습하는게 되겠네요. 그럼 시작하도록 하겠습니다.


WebSocket

WebSocket은 클라이언트와 서버가 하나의 연결을 유지하면서 양방향으로 데이터를 주고받을 수 있도록 하는 통신 프로토콜입니다.

HTTP는 기본적으로 클라이언트가 요청을 보내야 서버가 응답할 수 있는 구조입니다. 반면 WebSocket은 최초 연결 이후 클라이언트와 서버 사이에 연결을 유지하기 때문에 서보도 필요한 시점에 클라이언트에게 데이터를 보낼 수 있습니다.

 

즉, WebSocket은 실시간성이 중요한 기능에서 사용하기 좋은 통신 방식입니다.

 

 

HTTP 통신 방식의 한계

HTTP는 요청-응답 방식으로 동작합니다. 클라이언트가 서버에 요청을 보내면 서버가 응답하고, 하나의 요청 흐름은 종료됩니다. 이 구조는 명확하지만, 서버에서 발생한 변경 사항을 클라이언트에게 즉시 전달하기 어렵다는 한계가 있습니다.

만약 HTTP만으로 실시간 채팅을 구현하려면 클라이언트가 일정 시간마다 서버에 새 메시지가 있는지 계속 물어봐야 합니다. 이를 Polling이라고 합니다.

Polling 방식은 구현이 단순하지만 새 데이터가 없어도 계속 요청을 보내야 하므로 불필요한 트래픽이 발생할 수 있습니다. 또한 요청 주기에 따라 실시간성이 떨어질 수 있습니다.

WebSocket의 동작 흐름

WebSocket은 처음부터 WebSocket 연결로 시작하는 것이 아니라, HTTP 요청을 통해 연결을 시작합니다.

클라이언트가 서버에 WebSocket 연결을 요청하면, 서버는 이를 승인하고 기존 HTTP 연결을 WebSocket 연결로 업그레이드합니다. 이후에는 하나의 연결을 유지하면서 양방향 통신을 수행합니다.

이때 'Upgrade' 헤더와 'Connection' 헤더가 사용됩니다. 서버가 WebSocket 연결을 허용하면 HTTP 요청-응답 방식이 아니라 WebSocket 프로토콜 기반의 지속 연결로 전환됩니다.

이후 클라이언트와 서버는 연결을 끊지 않고 필요한 시점마다 메시지를 주고받을 수 있습니다.

WebSocket과 HTTP의 차이

HTTP는 클라이언트가 필요한 데이터를 요청하는 구조에 적합하고, WebSocket은 연결을 유지하면서 실시간으로 데이터를 주고받아야하는 기능에 적합합니다. 

구분 HTTP WebSocket
통신 방식 요청-응답 양방향 통신
연결 방식 요청마다 연결 또는 응답 후 종료 연결을 유지
서버 → 클라이언트 전송 클라이언트 요청이 있어야 가능 서버가 직접 전송 가능
적합한 기능 게시글 조회, 로그인, 주문 요청 채팅, 실시간 알림, 실시간 상태 변경
실시간성 낮거나 별도 방식 필요 높음

 

WebSocket을 사용하는 상황

WebSocket은 서버와 클라이언트 사이에서 실시간으로 데이터가 오가야 하는 상황에서 사용할 수 있습니다.

사용 상황 설명
실시간 채팅 사용자가 보낸 메시지를 즉시 상대방에게 전달
실시간 알림 댓글, 좋아요, 주문 상태 변경 등을 즉시 알림
주식/코인 가격 가격 변동 정보를 실시간으로 전달
멀티 게임 플레이어 위치, 상태, 이벤트를 실시간 동기화

 

WebSocket 사용 시 주의할 점

WebSocket은 실시간 통신에 유용하지만, 운영 환경에서는 몇 가지 주의할 점이 있습니다.

  1. 연결 관리
    • 사용자가 많아질수록 유지해야 하는 연결 수가 증가
  2. 인증 처리
    • 연결 시점에 사용자를 식별하고 권한을 확인해야 함
  3. 재연결 처리
    • 네트워크 불안정으로 연결이 끊어졌을 때 재연결 로직 필요
  4. 서버 자원
    • 지속 연결이므로 메모리와 커넥션 관리 필요
  5. 프록시 설정
    • Nginx 같은 웹 서버를 사용할 경우 Upgrade 헤더 설정 필요

오늘은 WebSocket에 대해 간략하게 알아보았습니다. 다음 시간에는 웹서버 : Nginx에 대해서 알아보도록 하겠습니다. 수고하셨습니다.