Fundamentals/Computer Science

[네트워크] TCP 기반 웹소켓 기술

dev seon 2024. 12. 16. 19:45

 

최근 네트워크 계층에 대해 공부하면서,

데이터를 안정적이고 효율적으로 주고받는 데 중요한 역할을 하는 전송 계층에 대해 깊이 이해하게 되었습니다.

특히, 전송 계층에서 제공하는 TCP 기반의 통신 방식을 활용한 기술 중 하나인

웹소켓(WebSocket)은 실시간 애플리케이션에서 필수적인 도구로 자리 잡고 있습니다.

이번 글에서는 전송 계층의 기본 개념을 바탕으로, 제가 최근 프로젝트에서 직접 활용했던 웹소켓 기술에 대해 정리해보고자 합니다.

1. 전송 계층이란?

1.1 네트워크 계층 vs전송 계층

네트워크 계층은 데이터를 목적지에 전달하기 위해 경로를 결정하는 역할을 합니다.

반면, 전송 계층은 이 데이터를 애플리케이션 계층에 적절히 전달하며 신뢰성을 보장합니다.

  • 네트워크 계층의 주요 기능: 패킷 포워딩, 라우팅
  • 전송 계층의 주요 기능: 데이터 분할, 전송 오류 제어, 흐름 제어, 연결 관리

전송 계층의 가장 큰 특징은 애플리케이션 간의 통신을 위한 종단 대 종단(end-to-end) 연결을 제공한다는 점입니다.

1.2 전송 계층의 주요 프로토콜

전송 계층의 주요 프로토콜에는 TCP와 UDP가 있습니다.

  • TCP (Transmission Control Protocol): 연결 지향적 프로토콜로, 데이터의 신뢰성을 보장하며 데이터가 올바르게 도착하도록 흐름을 제어하고 손실된 데이터는 재전송합니다.
    • 장점: 데이터 신뢰성과 순서가 보장됩니다.
    • 단점: 상대적으로 전송 속도가 느립니다.
  • UDP (User Datagram Protocol): 비연결형 프로토콜로, 빠른 데이터 전송이 가능하지만 신뢰성을 보장하지 않습니다.
    • 장점: 전송 속도가 빠르고 오버헤드가 낮습니다.
    • 단점: 데이터가 손실될 수 있고 순서가 보장되지 않습니다.

2. TCP/IP 소켓

2.1 TCP/IP 소켓이란?

소켓(Socket)은 네트워크 상의 두 컴퓨터 간 통신을 가능하게 해주는 인터페이스입니다.

TCP/IP 소켓은 전송 계층(TCP/UDP) 위에서 작동하며, 데이터를 송수신하기 위한 종단 간 연결을 관리합니다.

  • TCP 소켓: 신뢰성을 제공하며 데이터가 순서대로 도착하도록 보장합니다.
  • UDP 소켓: 빠른 데이터 전송을 목표로 신뢰성보다는 속도를 우선시합니다.

2.2 TCP 소켓의 특징

  • 연결 지향적: 클라이언트와 서버 간에 3-way 핸드셰이크를 통해 연결을 설정합니다.
  • 신뢰성 보장: 데이터의 손실이나 순서 뒤바뀜을 방지합니다.
  • 사용 사례: 웹 브라우징(HTTP), 파일 전송(FTP)

2.3 UDP 소켓의 특징

  • 비연결형: 별도의 연결 설정 없이 데이터를 전송합니다.
  • 빠른 전송 속도: 신뢰성을 보장하지 않기 때문에 데이터 전송 오버헤드가 적습니다.
  • 사용 사례: 스트리밍, 온라인 게임, VoIP

3. 웹소켓(WebSocket) 기술의 등장

3.1 웹소켓의 정의와 필요성

기존 HTTP 통신 방식은 반이중 통신으로 요청-응답 패턴에 따라

클라이언트가 먼저 요청을 보내야 서버가 응답할 수 있었습니다.

그러나 이런 방식은 실시간 통신을 구현하기에 비효율적이었습니다.

웹소켓(WebSocket)은 TCP 기반의 양방향 통신 프로토콜로, 클라이언트와 서버 간의 실시간 데이터 교환을 가능하게 합니다.

3.2 HTTP와의 차이점

특징 HTTP WebSocket
통신 방식 요청-응답 기반 양방향 통신
연결 상태 비연결 상태 유지 연결 상태 유지
헤더 크기 큰 헤더 오버헤드 발생 프레임 헤더 최소화

웹소켓은 클라이언트와 서버 간의 연결을 유지하며,

필요할 때마다 데이터를 주고받을 수 있는 전이중 통신을 제공합니다.

즉, 송신과 동시에 수신을 할 수 있는 방식입니다.

3.3 웹소켓 통신 흐름

  1. 핸드셰이크 과정:이때 소켓 호출을 위해 ws라는 특수 프로토콜을 사용합니다.
    Connection: Upgrade //클라이언트에서 http -> wss로 프로토콜을 바꾸려고 함
    Upgrade: websocket //요청한 프로토콜이 websocket임
    
    서버가 요청을 받으면 웹 소켓 연결을 수락하는 응답을 보내게 됩니다.
  2. 클라이언트가 HTTP 요청을 통해 웹소켓 연결을 요청하고, 서버는 HTTP 응답을 통해 연결을 승인합니다.
  3. 연결 유지: 연결이 수립되면 클라이언트와 서버 간에 지속적으로 데이터를 교환할 수 있습니다.
  4. 연결 종료: 클라이언트 또는 서버가 연결 종료 메시지를 보내고 연결이 종료됩니다.

4. 웹소켓의 주요 특징과 장점

4.1 실시간 양방향 통신

  • 클라이언트-서버 양방향 통신: HTTP와 달리 클라이언트와 서버가 독립적으로 데이터를 송수신할 수 있습니다.
  • 지연 감소: 실시간 데이터를 필요로 하는 애플리케이션에 적합합니다.

4.2 효율적인 데이터 전송

  • 프레임 기반 데이터 전송: 웹소켓은 헤더 크기가 매우 작아 오버헤드가 적습니다.
  • 지속적 연결: HTTP처럼 매번 새로운 연결을 생성하지 않습니다.

4.3 연결 상태 유지

  • 유지 비용 절감: 연결이 유지되면서 불필요한 연결 설정 비용이 제거됩니다.
  • 상태 정보 공유: 연결된 클라이언트 간의 상태를 공유하기 용이합니다.

5. 웹소켓과 네트워크 전송 계층의 관계

5.1 웹소켓이 TCP 기반인 이유

웹소켓은 실시간 양방향 통신을 가능하게 하면서도 신뢰성을 보장해야 하므로 TCP 기반으로 동작합니다.

5.2 전송 계층에서의 QoS 관리와 웹소켓

QoS(Quality of Service)는 네트워크 트래픽의 우선순위를 조정하여 데이터 전송 품질을 보장합니다.

  • 웹소켓과 QoS: TCP를 기반으로 하여 흐름 제어, 혼잡 제어 등을 통해 안정적 데이터를 전송할 수 있습니다.
  • 실시간 애플리케이션에서는 QoS 설정을 통해 지연(Latency)과 대역폭(Bandwidth) 최적화가 가능합니다.