[Day92] NodeJS - 웹소켓(WebSocket)-1

Validator·2023년 10월 29일
post-thumbnail

1. 네트워크 통신의 기초

네트워크 통신은 컴퓨터들 사이에 데이터를 주고받는 과정을 말한다. 이 과정에서는 여러 가지 프로토콜(Protocol)이 사용된다. 프로토콜이란, 통신을 할 때 필요한 규칙이나 절차를 정의한 것을 말한다. 인터넷은 TCP/IP 프로토콜 스위트를 기반으로 동작하며, 이 중 TCP(Transmission Control Protocol)와 IP(Internet Protocol)는 가장 중요한 프로토콜들이다.

TCP (Transmission Control Protocol)

TCP는 연결 지향적(Connection-oriented) 프로토콜로, 데이터 전송 전에 먼저 연결을 설정하고, 데이터 전송 후에 연결을 해제한다. TCP는 데이터의 순서를 보장하고, 데이터가 정확하게 도착했는지 확인한다. 이러한 특성 때문에 TCP는 신뢰성 있는 데이터 전송이 필요한 애플리케이션에서 주로 사용된다.

UDP (User Datagram Protocol)

반면, UDP는 연결 지향적이지 않은(Connectionless) 프로토콜로, 데이터 전송 전에 연결을 설정하지 않고, 데이터 전송 후에 연결을 해제하지 않는다. UDP는 데이터의 순서를 보장하지 않으며, 데이터가 정확하게 도착했는지 확인하지 않는다. 이러한 특성 때문에 UDP는 신뢰성보다는 빠른 데이터 전송이 중요한 애플리케이션에서 주로 사용된다.

2. 3-Way Handshake의 개념

3-Way Handshake는 TCP 연결을 시작할 때 사용되는 프로세스다. 이 프로세스는 클라이언트와 서버 사이에 신뢰성 있는 연결을 설정하는 데 사용된다. 3-Way Handshake는 다음과 같은 순서로 진행된다.

  1. SYN (Synchronize Sequence Numbers): 클라이언트가 서버에게 SYN 패킷을 전송하여 연결 요청을 한다.
  2. SYN-ACK (Synchronize-Acknowledgment): 서버가 클라이언트에게 SYN-ACK 패킷을 전송하여 연결 요청을 수락한다.
  3. ACK (Acknowledgment): 클라이언트가 서버에게 ACK 패킷을 전송하여 연결을 확정한다.

이러한 3단계의 과정을 거쳐서 클라이언트와 서버 사이에 신뢰성 있는 TCP 연결이 설정된다. 이 연결을 통해 데이터를 안전하게 주고받을 수 있다.


3. WebSocket의 개념

WebSocket은 실시간 양방향 통신을 가능하게 하는 프로토콜이다. WebSocket은 HTTP 기반으로 초기 연결을 설정한 후, TCP 연결 위에서 전이중 통신(duplex communication)을 제공한다. 이 프로토콜은 웹 애플리케이션에서 실시간 데이터 전송이 필요할 때 유용하다. 예를 들어, 채팅 애플리케이션, 실시간 주식 티커, 실시간 뉴스 업데이트 등에서 사용할 수 있다.

WebSocket과 HTTP의 차이

  1. 연결 유지 (Connection Maintenance):

    • HTTP: HTTP는 요청-응답 모델을 사용하며, 클라이언트가 요청을 보내면 서버가 응답을 반환하고 연결이 종료된다. 각 요청에 대해 새로운 연결이 필요하며, 이로 인해 많은 오버헤드가 발생할 수 있다.
    • WebSocket: WebSocket은 한 번 연결이 설정되면 연결이 유지되며, 클라이언트와 서버는 양방향 통신을 할 수 있다. 이로 인해 실시간 데이터 전송이 가능하다.
  2. 데이터 전송 (Data Transmission):

    • HTTP: HTTP는 단방향 통신이며, 클라이언트가 서버에 요청을 보내고 서버가 응답을 반환한다.
    • WebSocket: WebSocket은 전이중 통신을 제공하며, 클라이언트와 서버 모두 동시에 데이터를 전송할 수 있다.

4. WebSocket과 3-Way Handshake

WebSocket은 초기 연결 설정을 위해 HTTP를 사용하며, 이 과정에서 3-Way Handshake도 이루어진다. WebSocket 연결 설정은 다음과 같은 순서로 진행된다.

  1. HTTP 요청: 클라이언트가 서버에게 HTTP 요청을 전송한다. 이 요청은 "Upgrade: websocket" 헤더를 포함하여 서버에게 WebSocket 연결을 요청한다.
  2. HTTP 응답: 서버가 클라이언트에게 HTTP 응답을 전송한다. 이 응답은 "101 Switching Protocols" 상태 코드와 "Upgrade: websocket" 헤더를 포함하여 클라이언트의 요청을 수락한다.
  3. WebSocket 연결: 이 시점에서 HTTP 연결은 WebSocket 연결로 업그레이드되며, 클라이언트와 서버는 TCP 기반의 WebSocket 프로토콜을 사용하여 양방향 통신을 시작한다.

WebSocket 연결 설정 과정에서의 3-Way Handshake는 TCP 연결 설정과 동일하게 동작한다. 클라이언트와 서버는 SYN, SYN-ACK, ACK 패킷을 주고받아 TCP 연결을 설정하며, 이후 WebSocket 프로토콜을 사용하여 양방향 통신을 진행한다.

5. WebSocket의 활용방안

WebSocket의 실시간 양방향 통신 기능은 다양한 애플리케이션에서 활용할 수 있다. 그 활용 예는 다음과 같다.

  1. 채팅 애플리케이션: 사용자들 간에 실시간으로 메시지를 주고받을 수 있어야 하는 채팅 애플리케이션에 적합하다.
  2. 실시간 알림 서비스: 실시간으로 알림을 제공해야 하는 서비스에 유용하다. 예를 들어, 주식 가격 변동 알림, 뉴스 업데이트 알림 등이 있다.
  3. 온라인 게임: 멀티플레이어 온라인 게임에서는 실시간으로 게임 상태를 동기화해야 하므로 WebSocket이 유용하다.
  4. 실시간 데이터 모니터링: 실시간으로 데이터를 모니터링하고 분석해야 하는 시스템에 유용하다.

WebSocket은 높은 실시간성과 양방향 통신 기능으로 인해 많은 실시간 웹 애플리케이션에서 중요한 역할을 수행한다.

0개의 댓글