1. ngrok이란?
ngrok은 개인 PC와 같은 로컬 환경에서 실행 중인 웹 서버를 외부 인터넷에서 접속 할 수 있도록 안전한 터널(Tunnel)을 만들어주는 프로그램이다. 다음과 같은 상황에서 유용하게 사용할 수 있다.
- 외부 서비스의 웹훅(WebHook)을 로컬 환경에서 테스트 할 때
- 개발 중인 웹 사이트나 API를 다른 사람에게 임시로 공유할 때
- 모바일 기기 등 다른 장치에서 로컬 PC의 서버로 접속하여 테스트 할 때
2. ngrok 동작 원리
ngrok의 마법은 ngrok 클라이언트(사용자 PC 프로그램)와 ngrok 클라우드 서버(외부 인터넷에 존재) 간의 협업을 통해 이루어진다.
1단계: 터널 생성 (로컬 → ngrok 서버) 🚪
- 사용자가 터미널에서 ngrok http 80과 같은 명령어를 실행하면, 사용자 PC의 ngrok 클라이언트가 먼저 ngrok 클라우드 서버로 접속하여 연결을 요청한다.
- 이 연결은 로컬 PC가 외부로 나가는(Outbound) 연결이기 때문에, 대부분의 방화벽이나 공유기(NAT)는 이를 허용한다.
- ngrok 클라이언트는 이 연결을 끊지 않고 계속 유지한다. 이것이 바로 외부와 통신할 수 있는 안전한 터널(Secure Tunnel)이 된다.
2단계: 공용 주소 할당 (ngrok 서버) 🌐
- 연결이 성공적으로 수립되면, ngrok 클라우드 서버는 https://...ngrok-free.dev와 같은 **공용 인터넷 주소(Public URL)**를 생성한다.
- 그리고 이 주소를 방금 만들어진 터널과 매핑(연결)시킨 뒤, ngrok 클라이언트에게 알려준다.
- ngrok 클라이언트는 이 주소를 터미널 화면에 표시해 준다.
3단계: 요청 중계 (외부 → 로컬) 🔄
- 이제 외부 사용자나 서비스가 https://...ngrok-free.dev 주소로 HTTP 요청을 보낸다.
- 이 요청은 먼저 ngrok 클라우드 서버에 도달한다.
- ngrok 서버는 이 요청이 어떤 터널과 매핑되어 있는지 확인하고, 1단계에서 만들어 둔 안전한 터널을 통해 요청을 그대로 ngrok 클라이언트(사용자 PC)에게 전달한다.
- ngrok 클라이언트는 전달받은 요청을 다시 로컬에서 실행 중인 웹 서버(localhost:80)로 보낸다.
- 로컬 서버가 처리한 응답은 다시 이 과정을 역순으로 거쳐 최종 사용자에게 전달된다.
3. ngrok 설치 및 초기설정
[1] 설치
ngrok | API Gateway, Kubernetes Ingress, Webhook Gateway
ngrok simplifies app delivery by unifying API gateway, Kubernetes ingress, multi-cluster load balancing and more with ngrok's Universal Gateway.
ngrok.com

[2] 압축 해제 및 실행


[3] auth token 설정 (초기 1회만 수행)

ngrok config add-authtoken <YOUR_AUTHTOKEN>
[4] 터널 실행 (매번 사용 시)
ngrok http 80 --host-header="dev-msa.127.0.0.1.nip.io"
[5] 결과 확인

4. ngrok접속 방법
이 Forwarding 주소를 기반으로 기존에 사용하던 경로를 뒤에 붙여서 접속하면 된다.
예시:
- user-service health-check: https://impressionless-connaturally-jonie.ngrok-free.dev/user-service/health-check
- order-service health-check: https://impressionless-connaturally-jonie.ngrok-free.dev/order-service/health-check