🚇

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 설정이 불필요
흐름 설명
  1. ngrok http 3000 실행
  2. agent가 ngrok 클라우드에 아웃바운드 TLS 터널 수립
  3. 공개 URL(abc123.ngrok.io) 할당
  4. 외부 트래픽이 공개 URL로 도착
  5. ngrok 클라우드가 터널을 통해 로컬로 전달
  6. 로컬 응답이 터널을 타고 외부에 반환

동작 흐름

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 디바이스 원격 접근