채팅구현을 위한 네트워크 기본지식

2024. 11. 5. 16:37외부 활동/글또 10기

728x90

1. HTTP, TCP 개념

  • HTTP와 TCP는 각각의 목적과 특성에 따라 사용되는 네트워크 프로토콜입니다.
  • HTTP는 주로 웹 브라우징과 같은 하이퍼텍스트 전송에 사용되며, TCP는 데이터 전송의 신뢰성을 보장합니다.
  • HTTP는 상태 비저장 프로토콜로 각 요청과 응답이 독립적으로 처리지만, TCP는 상태 저장 프로토콜로 연결을 설정하고 유지합니다.

HTTP (HyperText Transfer Protocol)

  • HTTP는 주로 웹 클라이언트와 서버 간에 데이터를 주고받는 데 사용되는 애플리케이션 계층의 프로토콜입니다.
  • HTTP는 클라이언트-서버 모델을 기반으로 하며, 클라이언트가 요청을 보내면 서버가 응답을 반환하는 방식으로 동작합니다.
  • HTTP는 상태 비저장 프로토콜로, 각 요청과 응답이 독립적으로 처리됩니다. 이는 서버가 클라이언트의 이전 요청 상태를 기억하지 않는다는 것을 의미합니다.
  • HTTP의 주요 특징 중 하나는 텍스트 기반 프로토콜로, 사람이 읽을 수 있는 형식으로 데이터를 전송합니다.

TCP (Transmission Control Protocol)

  • TCP는 신뢰성 있는 데이터 전송을 위해 사용되는 전송 계층의 통신 프로토콜입니다.
  • TCP는 데이터 패킷의 순서와 무결성을 보장하기 위해 3-way handshake 과정을 통해 송신자와 수신자 간의 연결을 설정하고 유지하며, 데이터가 손실되거나 오류가 발생했을 때 재전송을 관리하는 통신 규약입니다.
  • TCP가 전송하는 데이터가 IP 계층으로 내려갈 때 TCP 헤더가 붙고 IP 패킷에 포함되며, 이후 물리적 계층에서 데이터 프레임으로 캡슐화되어 네트워크를 통해 전송됩니다.

 

 

2. 채팅구현에서 TCP

 

  • TCP는 연결된 상태에서 데이터를 지속적으로 송수신하며, 데이터가 순서대로 도착하도록 보장하기 때문에 실시간 메시지 전달에 적합합니다. 특히 채팅에서는 메시지가 누락되거나 순서가 바뀌는 것을 방지하기 위해 TCP가 UDP보다 많이 쓰입니다.

 

 

3. 채팅을 구현하기 위한 다양한 방법

 

WebSocket

실시간 양방향 통신을 제공하는 프로토콜로, 클라이언트와 서버 간의 지속적인 연결을 유지합니다.

  • 장점:
    • 실시간 데이터 전송이 가능하여 지연 시간이 최소화됩니다.
    • 서버에서 클라이언트로 데이터를 푸시할 수 있어 효율적입니다.
  • 단점:
    • 리소스를 많이 소모할 수 있으며, 구현이 복잡할 수 있습니다.

 

Socket.IO

WebSocket을 기반으로 다양한 기능을 추가하여 실시간 통신을 쉽게 구현할 수 있도록 돕습니다.

  • 장점:
    • 자동으로 WebSocket과 폴링을 전환하여 안정성을 높입니다.
    • 이벤트 기반 통신이 가능하여 코드가 간결해집니다.
  • 단점:
    • Socket.IO의 의존성이 생기며, 특정 라이브러리에 종속됩니다.

 

Long Polling

클라이언트가 서버에 요청을 보내고 서버가 응답할 준비가 될 때까지 연결을 유지하는 방식입니다.

  • 장점:
    • 구현이 상대적으로 간단하며, 기존 HTTP 프로토콜을 사용합니다.
  • 단점:
    • 완전한 실시간성을 보장하지 않으며, 서버 리소스를 많이 소모할 수 있습니다.

 

Polling

클라이언트가 주기적으로 서버에 요청을 보내는 방식입니다.

  • 장점:
    • 구현이 매우 간단하며, RESTful API와 잘 어울립니다.
  • 단점:
    • 비효율적이며, 지연 시간이 발생할 수 있습니다. 실시간성이 떨어집니다.

 

Streaming

서버가 클라이언트에 지속적으로 데이터를 전송하는 방식으로 HTTP/2의 Server-Sent Events(SSE)를 사용할 수 있습니다.

  • 장점:
    • 클라이언트가 서버로부터 지속적으로 데이터를 받을 수 있어 실시간성이 높습니다.
  • 단점:
    • 양방향 통신이 아니므로 클라이언트에서 서버로 데이터를 전송하려면 추가적인 요청이 필요합니다.

 

메시지 큐

비동기적으로 메시지를 처리하고, 여러 사용자 간의 데이터 전송을 관리할 수 있습니다.

  • 장점:
    • 시스템의 확장성과 복원력을 높일 수 있습니다.
    • 대량의 메시지를 효율적으로 처리할 수 있습니다.
  • 단점:
    • 추가적인 인프라와 복잡성을 요구하며, 초기 설정이 필요합니다.

 

 

4. 채팅으로 인한 네트워크 비용 줄이기 위한 방법

 

  • UDP사용하면 TCP에 비해 오버헤드가 적고 데이터 전송 속도가 빠르기 때문에 데이터의 신뢰성이 중요하지 않거나 약간의 손실이 허용될 수 있는 실시간 채팅의 경우 경우 UDP를 사용하는 것이 효율적일 수 있습니다.
  • TCP의 창 크기를 확장하여 한 번에 더 많은 데이터를 전송할 수 있습니다. 대역폭 지연 곱에 기반하여 최적의 창 크기를 설정함으로써 네트워크 성능을 개선할 수 있습니다. TCP 창 확장 기능을 통해 최대 1GiB의 창 크기를 지원할 수 있어 대량 전송 성능을 향상시킬 수 있습니다.
  • TCP의 혼잡 제어 및 흐름 제어 알고리즘을 최적화하여 네트워크 혼잡을 줄이고 데이터 전송 속도를 개선할 수 있습니다. TCP BBR알고리즘 같은 경우 대역폭과 RTT를 기반으로 혼잡을 관리하여 전송 성능을 극대화하기 때문에 고속 네트워크 환경에서 효과적입니다.
  • TCP의 Fast Retransmit 및 Fast Recovery 메커니즘을 활용하면 패킷 손실 시 재전송 속도를 높일 수 있습니다. 중복 ACK를 통해 손실된 패킷을 빠르게 감지하고 재전송함으로써 지연 시간을 최소화할 수 있습니다.
  • HTTP/2와 WebSocket 프로토콜은 실시간 통신에 최적화되어 있습니다. HTTP/2는 멀티플렉싱 기능을 제공하여 여러 요청을 동시에 처리할 수 있으며 WebSocket은 HTTP 요청을 반복적으로 보내는 대신 하나의 연결로 여러 메시지를 주고받을 수 있어 지속적인 연결을 유지하면서 양방향 통신을 가능하게해 TCP의 오버헤드를 줄이고 실시간 데이터 전송할 수 있습니다.
  • 네트워크 인프라를 최적화하여 지연 시간을 줄이고 대역폭을 증가시킬 수 있습니다. 예로 CDN을 사용하여 사용자와 서버 간의 물리적 거리를 줄여 데이터 전송 속도를 향상시키는 방법도 있고 사용한 만큼 비용이 발생하는 Lambda 같은 서버리스 서비스를 사용해 채팅 트래픽이 적을 때 비용을 줄일 수 있습니다.

 

 

 

 

 

그림 출처: 모든 개발자를 위한 HTTP 웹 기본 지식 강의 | 김영한 - 인프런 (inflearn.com)

728x90