[Network] WebSocket이란?

김강욱·2024년 5월 12일
0

Network

목록 보기
1/4
post-thumbnail

이번 포스팅에서는 WebSocket에 대해서 알아보려고 합니다.

우선 WebSocket을 공부하기 전에 HTTP 통신과 Socket 통신에 대해서 간단하게 알아보도록 하겠습니다.

✏️ HTTP 통신이란?

HTTP(Hypertext Transfer Protocol)는 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜입니다.

클라이언트-서버 모델을 따르며, 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동합니다.

HTTP 통신은 클라이언트의 요청이 있을 때만 서버가 응답을 해주고 해당 정보를 보낸 후 바로 연결을 끊는 방식입니다.

이 방식은 실시간으로 변화되는 것을 확인할 수 없고(비연결성) 새로고침을 눌렀을 때만 변화되는 것을 확인할 수 있습니다.

예를 들어, 인스타그램 접속 후 위로 잡아 당기기(새로고침)이라는 요청을 주어야 서버가 다시 동작하여 클라이언트에게 새로운 정보를 보여줍니다.

이런 HTTP의 특성은 서버의 부하를 줄여 다른 접속을 원할하게 처리하기 위해 사용됩니다. 한번의 요청에 한번의 응답만 하면 되기 때문에 부하가 줄게 됩니다.

또한 서버는 클라이언트 상태를 보존하지 않습니다.(무상태 프로토콜)
간단하게 서버가 클라이언트의 상태를 보존하지 않는다는 것을 뜻합니다.

👌 HTTP 통신도 내부적으로 소켓을 사용한다?

위에서 설명드렸듯이 HTTP은 애플리케이션 계층의 프로토콜이며, TCP/IP 위에서 동작하게 됩니다.

TCP는 소켓을 사용하여 클라이언트와 서버 간의 연결을 설정하고 데이터를 교환하게 됩니다.

정리하자면 HTTP 통신은 클라이언트가 서버에 요청을 보내고 서버가 응답을 반환하는 방식으로 동작하고 이 요청-응답 사이클이 완료되면 TCP 연결이 닫히게 됩니다.

👌 HTTP 통신 특징

  1. 단방향 통신

    클라이언트가 요청을 보내는 경우에만 서버가 응답하는 단방향 통신입니다.

  2. 무상태성(Stateless)

    각각의 요청과 응답이 독립적이라는 의미이며, 서버는 이전의 클라이언트의 요청에 대한 정보를 기억하지 않습니다.

  3. 비연결성(Connectionless)

    요청-응답 패턴을 따르며, 클라이언트는 서버에 요청을 보내고, 서버는 그에 대한 응답을 반환한 후 연결을 끊게 됩니다. 이를 비연결성이라고 합니다.


✏️ Socket 통신이란?

Socket은 두 시스템 사이의 네트워크 연결을 나타내는 객체를 의미합니다.

두 소프트웨어가 서로 연결되려면 Socket 연결이 필요합니다. 여기서 Socket 연결은 두 시스템간의 정보, 예를 들어 네트워크 주소(IP 주소)와 포트 번호를 사용하여 서로 연결하는 것을 의미합니다. 이러한 정보를 바탕으로 Socket을 개설할 수 있습니다.

Socket 통신은 요청을 보내지 않아도 계속적으로 상태 변화에 따라서 실시간으로 통신을 하게 됩니다.

예를 들어, 실시간 스트리밍 서비스, 채팅 서비스, 온라인 게임 등에서 사용자 혹은 상대가 지속적으로 보내는 정보를 실시간으로 받아서 변화를 보여주게 됩니다.

🤐 Socket 통신 특징

  1. 양방향 통신

    서버와 클라이언트가 계속 연결을 유지하는 양방향 통신입니다. 클라이언트에서 서버로, 서버에서 클라이언트로 서로 통신을 할 수 있습니다.

  2. 실시간성

    서버와 클라이언트가 실시간으로 데이터를 주고 받을 수 있습니다. 실시간 동영상 Streaming이나 온라인 게임 등과 같은 경우에 자주 사용됩니다.


✏️ WebSocket이란?

이제 WebSocket에 대해서 알아보도록 하겠습니다.

WebSocket은 웹 서버와 클라이언트 간에 지속적인 양방향 통신을 가능하게 하는 기술입니다.

WebSocket은 프로토콜의 일종으로 HTTP 프로토콜과 마찬가지로 OSI 모델에서 애플리케이션 계층에서 동작하지만, 기본적인 동작 방식이 다릅니다.

WebSocket 연결은 사용자나 서버 측에서 명시적으로 연결 종료 요청을 하지 않는 한 계속 유지됩니다.

사용자가 웹 사이트를 닫거나 네트워크 연결이 끊어지는 등의 이유로 연결이 종료되면 WebSocket 연결도 같이 종료됩니다.

🤐 WebSocket 동작 방식


1. 핸드 쉐이크(HandShake)

WebSocket 연결은 HTTP 업그레이드 요청을 통해 시작됩니다. 클라이언트가 HTTP GET 요청을 보내는데, 이 때 헤더에 Upgrade: websocket이라는 정보를 포함합니다.

서버가 이 요청을 받으면, 101 상태 코드와 함께 Upgrade: websocket 응답을 보냅니다. 이렇게 하여 HTTP 연결이 WebSocket 연결로 업그레이드 됩니다. 이 과정을 핸드 쉐이크라고 부릅니다.

2. 데이터 교환

핸드 쉐이크가 성공적으로 이루어진 후, 서버와 클라이언트는 양방향 통신을 시작하게 됩니다.

데이터는 프레임이라는 작은 단위로 교환되며, 이 프레임은 텍스트 또는 바이너리 형식입니다.

3. 연결 종료

WebSocket 연결을 종료하려면, 한 당사자가 닫기 프레임을 보내 연결 종료를 시작합니다. 다른 쪽도 닫기 프레임을 보내 확인하면, 연결이 정상적으로 종료됩니다.

WebSocket은 전체적으로 이런 흐름으로 동작하며, 실시간 통신을 가능하게 합니다. 물론 이런 과정이 모두 브라우저와 WebSocket API, 그리고 웹 서버 내에서 자동으로 처리되므로, 일반적으로 개발자가 직접 핸들링할 필요 없습니다.

참고로 WebSocket API를 통해 손쉽게 WebSocket 연결을 만들고 데이터를 주고 받을 수 있습니다.

profile
TO BE DEVELOPER

0개의 댓글

관련 채용 정보