TCP와 UDP: API 호출 뒤에 숨은 네트워크 내부 구조
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발, 인프라/DevOps/보안, 데이터 분석
대상자
- REST API 개발자, 실시간 앱(비디오 채팅, IoT) 개발자, WebRTC 구현자
- 중간~고급 수준 (네트워크 프로토콜 이해 필요)
핵심 요약
- TCP는 신뢰성을 우선시하여 HTTP/S, API 호출에 적합 (예:
Express.js
+HTTPS
), 하지만 지연(latency)이 높음 - UDP는 실시간성을 위해 사용되며, WebRTC는 UDP를 주로 사용 (예:
SRTP
암호화된 스트리밍) - WebRTC는 STUN/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
- WebRTC는 UDP를 기본으로 사용 (예:
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 추가 시도