TCP vs UDP: API Calls & Real-Time Networking Explained

TCP와 UDP: API 호출 뒤에 숨은 네트워크 내부 구조

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발, 인프라/DevOps/보안, 데이터 분석

대상자

  • REST API 개발자, 실시간 앱(비디오 채팅, IoT) 개발자, WebRTC 구현자
  • 중간~고급 수준 (네트워크 프로토콜 이해 필요)

핵심 요약

  • TCP신뢰성을 우선시하여 HTTP/S, API 호출에 적합 (예: Express.js + HTTPS), 하지만 지연(latency)이 높음
  • UDP실시간성을 위해 사용되며, WebRTCUDP를 주로 사용 (예: SRTP 암호화된 스트리밍)
  • WebRTCSTUN/TURN/DTLS/SRTP 프로토콜을 복합적으로 활용하며, ICE를 통해 UDP 우선로 네트워크 경로를 자동 선택

섹션별 세부 요약

1. TCP와 UDP의 기초 비교

  • TCP연결 지향(Connection-oriented), UDP연결 비지향(Connectionless)
  • TCP데이터 전송 보장, UDP보장 없음
  • TCP 사용 사례: HTTP, API, 파일 전송 / UDP 사용 사례: VoIP, 스트리밍, 게임

2. TCP 기반 REST API의 특징

  • 신뢰성 보장: 재시도 로직, HTTP/HTTPS 전송
  • 지연 문제: Express.js + HTTPS는 TCP 위에서 동작하며, 불안정한 네트워크에서는 성능 저하
  • Axios/Fetch는 TCP를 기반으로 데이터 전송 보장

3. UDP 기반 실시간 앱과 WebRTC

  • WebRTCUDP를 기본으로 사용 (예: SRTP 암호화)
  • STUN (NAT 대체), TURN (중계 서버), DTLS/SRTP (보안)을 복합적으로 활용
  • ICE (Interactive Connectivity Establishment)를 통해 UDP 우선으로 네트워크 경로 선택

4. WebRTC 신호 전송 예제

  • Express.js + Socket.IO를 사용한 신호 서버 구현
  • server.js 코드 예시:

```javascript

const io = require('socket.io')(server, { cors: { origin: '*' } });

io.on('connection', socket => {

socket.on('signal', ({ to, data }) => {

io.to(to).emit('signal', { from: socket.id, data });

});

});

```

  • 신호 전송은 TCP/WebSocket을 사용하지만, 미디어 전송은 UDP를 통해 이루어짐

5. WebRTC 디버깅 방법

  • UDP 포트 차단 또는 엄격한 NAT로 인해 연결 실패 시 대응 방안
  • chrome://webrtc-internals/ 또는 Wireshark를 사용해 네트워크 트래픽 분석
  • ICE/STUN/TURN 설정을 통해 적절한 네트워크 경로 선택

결론

  • TCP는 데이터 무결성에 유리, UDP는 실시간성에 유리 (예: WebRTC + SRTP)
  • WebRTC 구현 시 STUN/TURN 서버(예: coturn, stun.l.google.com:19302)와 ICE 설정을 철저히 검토
  • Wireshark 또는 chrome://webrtc-internals/를 통해 네트워크 트래픽 모니터링
  • simple-peer 또는 peerjs를 활용해 MERN 앱에 WebRTC 추가 시도