🚇
ngrok은 어떻게 동작하나?
리버스 터널로 로컬 서버를 인터넷에 노출
ngrok의 핵심은 "리버스 터널"입니다. 내 PC에서 ngrok 에이전트가 ngrok 클라우드 서버에 아웃바운드 TCP/TLS 연결을 먼저 수립합니다. ngrok 클라우드가 공개 URL(예: abc123.ngrok.io)을 할당하고, 외부에서 이 URL로 들어오는 HTTP 요청을 해당 터널을 통해 내 로컬 서버로 전달합니다. 포트 포워딩이나 방화벽 설정 없이도 로컬 서비스를 인터넷에 노출할 수 있는 이유가 바로 이것입니다.
구조 다이어그램
🌍
외부 클라이언트
브라우저 / Webhook
④ HTTP 요청
→
☁️
ngrok Cloud
abc123.ngrok.io
공개 URL 할당
⑤ 터널 전달
② 아웃바운드 TLS
←
🚇
💻
내 PC (방화벽 뒤)
ngrok agent
localhost:3000
핵심: ngrok agent가 <strong>먼저 아웃바운드 연결</strong>을 열기 때문에 방화벽/NAT 설정이 불필요
흐름 설명
ngrok http 3000실행- agent가 ngrok 클라우드에 아웃바운드 TLS 터널 수립
- 공개 URL(abc123.ngrok.io) 할당
- 외부 트래픽이 공개 URL로 도착
- ngrok 클라우드가 터널을 통해 로컬로 전달
- 로컬 응답이 터널을 타고 외부에 반환
동작 흐름
1
ngrok agent가 로컬에서 실행 (ngrok http 3000)
2
agent가 ngrok 클라우드에 아웃바운드 TLS 연결 수립 (리버스 터널)
3
ngrok 클라우드가 공개 URL 할당 (abc123.ngrok.io)
4
외부 클라이언트가 공개 URL로 HTTP 요청 전송
5
ngrok 클라우드가 터널을 통해 요청을 로컬 서버로 전달
6
로컬 서버의 응답이 터널을 타고 외부 클라이언트에 반환
장점
- ✓ 방화벽/NAT 뒤에서도 동작
- ✓ 공개 URL 즉시 생성
- ✓ HTTPS 자동 지원
- ✓ 포트 포워딩 불필요
단점
- ✗ ngrok 클라우드 의존 (단일 장애점)
- ✗ 무료 플랜 제한 (세션 시간, 대역폭)
- ✗ 레이턴시 추가 (클라우드 경유)
- ✗ 프로덕션 용도로는 부적합
사용 사례
Webhook 로컬 개발/디버깅
모바일 앱에서 로컬 API 테스트
데모/프레젠테이션
IoT 디바이스 원격 접근