개발 일기

[Computer Network] 실시간 웹 통신 - 2. 소켓 통신 본문

Computer Science/Computer Network

[Computer Network] 실시간 웹 통신 - 2. 소켓 통신

개발 일기장 주인 2024. 10. 9. 19:56

앞 게시글에서 Polling, Long Polling 그리고 SSE에 대해 정리해봤는데 채팅 기능을 구현하기 위한 웹 소켓에 대해 정리해보고자 한다.


우선 소켓(Socket)에 대해 알아보자.

소켓(Socket)

  • 소켓은 네트워크 상에서 데이터를 송수신하는 두 호스트의 프로세스를 연결하는 종착점
     한쪽 프로세스가 데이터를 소켓에 쓰면, 네트워크를 통해 반대쪽 소켓으로 전달된다.
  • OSI 7계층 중 Application Layer에 속하는 프로세스들은 데이터 송수신을 위해 반드시 소켓을 거쳐 Transport Layer으로 데이터를 전달해야한다.  즉, 소켓은 전송 계층과 응용 프로그램 사이의 인터페이스 역할을 하며 떨어져 있는 두 호스트를 연결해준다.
  • HTTP 통신도 소켓 통신이지만 반대로 소켓 통신을 HTTP 통신이라고는 할 수 없다.
  • IP 주소, 프로토콜 그리고 포트 번호로 정의된다.

스트림 소켓(Stream Socket)과 데이터그램 소켓(Datagram Socket)

소켓은 두 가지로 구분할 수 있다.

 

Stream Socket

  • 프로토콜: TCP (Transmission Control Protocol)
  • 연결 지향적: 데이터 전송 전에 통신할 상대방과 연결을 맺는다. 이 연결은 데이터 전송이 끝날 때까지 유지된다.
    ➜ 양방향
  • 속도보다 신뢰성 중시: 데이터의 정확한 전송을 보장하기 위해 필요한 오버헤드 때문에 Datagram Socket보다 상대적으로 느리지만 데이터는 순서대로, 오류 없이 전송됩니다. 손실된 데이터는 재전송된다.
  • 주로 사용되는 예시: HTTP, FTP, 이메일 전송 등 신뢰성이 중요한 데이터 전송에 사용

 

Datagram Socket

  • 프로토콜: UDP (User Datagram Protocol)
  • 비연결 지향적: 연결을 맺지 않고 데이터를 전송하기 때문에 데이터를 보내기 전에 수신자와의 연결을 설정할 필요가 없습니다.
    ➜ 단방향
  • 신뢰성 보다 속도 중시: 연결 설정 과정이 없고, 오버헤드가 적기 때문에 상대적으로 빠른 데이터 전송이 가능하지만  전송된 데이터의 도착을 보장하지 않으며, 데이터가 순서대로 도착한다는 보장 없다.
  • 주로 사용되는 예시: 실시간 멀티미디어 스트리밍(영상, 음성), 온라인 게임, VoIP(인터넷 전화) 등 속도가 중요한 실시간 서비스에 사용

(좌)Stream Socket / (우)Datagram Socket

위 그림에서도 알 수 있듯이 datagram socket은 accept의 과정 없이 없다.


인터넷을 보면 소켓 통신과 HTTP 통신을 비교하는 글이 많던데 올바른 비교인지 모르겠다.

나는 현재까지 공부했을때 소켓 통신과 웹소켓도 별도로 느껴지며 웹소켓과 HTTP통신 이 두 개를 비교하는 것은 같은 같은 Layer에서 발생하는 것 같지만 소켓 통신과 HTTP 통신은 서로 다른 Layer에서 동작하는 개념이라 비교가 되는지 모르겠다.

 

1. 소켓 통신(Socket Communication) vs. HTTP 프로토콜

  • 소켓 통신은 전송 계층(Transport Layer)에서 이루어지지만 HTTP 프로토콜은 응용 계층(Application Layer)에서 발생한다.
  • 웹에서 클라이언트와 서버 간에 요청과 응답을 주고받기 위한 애플리케이션 계층 프로토콜로 주로 웹 페이지를 요청하고 전달하는 데 사용되는데 HTTP가 데이터를 전송할때 TCP 소켓(Stream Socket)을 사용하는 것이다.

  HTTP 프로토콜은 Stream Socket을 통해 데이터를 전송하지만, 각 요청은 무상태적입니다. 따라서 HTTP는 연결 지향적인 소켓을 사용하더라도 각 요청과 응답은 서로 독립적이다.