2026.03.18 | 조회 : 9

WebRTC 기반 화상 채팅이나 데이터 전송 서비스를 운영하다 보면, 특정 환경에서 연결이 실패하는 문제가 발생합니다. 특히 모바일 네트워크(LTE), 사내망, NAT 환경에서는 P2P 연결이 제대로 이루어지지 않는 경우가 많습니다.
이 문제를 해결하기 위해 TURN 서버를 별도로 구축하고, 실제 서비스에 적용하는 과정을 정리합니다. 이번 글에서는 VPS 서버 + coturn + Let’s Encrypt SSL + WebRTC 연동까지 실제 운영 기준으로 설명합니다.
WebRTC는 기본적으로 STUN을 이용해 P2P 연결을 시도합니다.
turn.example.com → XXX.XXX.XXX.XXX
sudo apt update
sudo apt install coturn -y
sudo systemctl stop coturn
sudo systemctl disable coturn
/etc/turnserver.conf
listening-port=3478
tls-listening-port=5349
listening-ip=0.0.0.0
relay-ip=0.0.0.0
external-ip=XXX.XXX.XXX.XXX
use-auth-secret
static-auth-secret=YOUR_SECRET_KEY
realm=turn.example.com
server-name=turn.example.com
fingerprint
lt-cred-mech
min-port=49152
max-port=65535
cert=/etc/letsencrypt/live/turn.example.com/fullchain.pem
pkey=/etc/letsencrypt/live/turn.example.com/privkey.pem
log-file=/var/log/turnserver.log
sudo systemctl stop nginx
sudo certbot certonly --standalone -d turn.example.com
sudo systemctl start nginx
sudo ufw allow 3478/tcp
sudo ufw allow 3478/udp
sudo ufw allow 5349/tcp
sudo ufw allow 49152:65535/udp
sudo systemctl start coturn
sudo systemctl enable coturn
tail -f /var/log/turnserver.log
const pc = new RTCPeerConnection({
iceTransportPolicy: "all",
iceServers: [
{ urls: "stun:stun.l.google.com:19302" },
{
urls: [
"turn:turn.example.com:3478?transport=udp",
"turns:turn.example.com:5349"
],
username: turnUser,
credential: turnCredential
}
]
});
chrome://webrtc-internals
이번 작업을 통해 다음을 완료했습니다.
이 구조를 적용하면 모바일, 회사망, NAT 환경에서도 안정적인 WebRTC 서비스를 운영할 수 있습니다.