개발을 시작하다보면 보통 처음 localhost환경에서 코드를 작성하고,
웬만한 개발이 다 끝났다 싶으면 본격적인 배포를 시작하여 테스트를 하게된다.
그런데 어떨 때는 어떤 기능 테스트를 위해 잠시만 짧게만 배포를 하고 싶을 때가 있는데,
그럴때 실제 배포를 진행하기에는 너무 번거롭다.
이를 임시적으로 아주 간단하게 해주는 것이 바로 이 ngrok이다.
원리?
일반적인 배포를 통해 외부에서 접근하는 것과 엔그록을 사용해서 외부에서 접근을 허용하는 것은 차이가 있다.
일반적으로 서버에 배포하는 것은 외부에서 내 공인 IP에 접근하는 것을 허용하도록 하는 것이다.
AWS나 NCP를 통해 배포했다면 서버 자체가 공인 IP를 직접 가지게 되고 그 공인 IP에 대한 접근을 허용하도록 한다.
만약 내 집 PC에 직접 서버를 띄운다면 공유기의 공인 IP를 통해 내 PC에 접근할 수 있도록 한다.
(이처럼 집 PC에 서버를 띄우고 공유기를 통해 외부 접근을 허용하는 경우를 포트포워딩이라고 한다)
*포트포워딩
공인 IP를 가진 네트워크 장비(공유기/NAT)가 특정 포트로 들어오는 외부 요청을 내부 사설 IP의 특정 포트로 전달해주는 기능.
쉽게 말해서 내 컴퓨터는 보통 192.168~ 로 시작되는 사설 IP를 가진다. 그리고 내 PC와 연결되어있는 공유기는 공인 IP를 가진다.
그리고 이 공유기에는 여러 컴퓨터가 연결되어있을 것이다. 예를 들어 외부에서 공유기의 공인 IP:8080포트로 접근해오면 공유기와 연결되어있는 1번 PC의 8080포트로 연결시켜라. 라고 하는 것이 포트포워딩이라고 생각하면 된다.
또한 외부에서 내부로 향하는 방향이니 이를 인바운드라고 한다.
*인바운드 : 밖->안으로 들어오는 연결
ex.외부 사용자가 내가 개발한 서버에 접속 혹은 요청을 보내는 것
이에 반해, 엔그록은 아웃바운드다.
*아웃바운드 : 안->밖으로 나가는 연결
ex.내 PC에서 네이버에 접속하는 것(내가 네이버 서버에 요청을 보내는 것이니까)
그런데 엔그록을 통해 외부사용자가 내 로컬호스트(로컬서버)에 요청을 보낼 수 있게 되는 것인데 이게 왜 아웃바운드일까?
내가 엔그록을 설치해서 실행하면
내 PC가 ngrok서버로 먼저 아웃바운드 연결을 맺기 때문이 이 관점에서 보자면 아웃바운드라고 할 수 있다.
그리고 이 연결을 ngrok서버는 터널로 유지시킨다.
그래서 외부 사용자는 엔그록 서버를 타고 엔그록 서버와 내 PC사이의 터널을 타고 내 PC로 요청을 전달시킬 수 있는 것이다.
다시 말해서 외부사용자는 내 서버의 공인IP가 아니라 엔그록서버의 공인IP를 타고 내 서버로 접근.요청을 보낼 수 있게 되는 것이다.
즉 중간에 엔그록이라는 매개체를 둠으로써 외부사용자가 내 로컬 PC에 들어올 수 있게 따로 인바운드 허용. 즉 포트포워딩을 할 필요가 없는 것이다.
1.엔그록 다운로드
https://dashboard.ngrok.com/get-started/setup/windows
ngrok — Log in
dashboard.ngrok.com
에 접속하여 회원가입 및 로그인 하여
다운로드한다.

2.ngrok 실행 및 설정
2-1. 엔그록을 설치하고 실행하면 아래와 같은 화면이 나온다.

2.다시 엔그록 홈페이지로 이동해 your authoken탭으로 이동한다.

3.위 화면의 Command Line을 복사한 명령어 ngrok config add-authtoken에다 맨 상단에 위치한 token값을 copy하여 붙여 명령어를 실행한다.

그러면 아래와 같은 설정이 되었다고 뜰 껏이다.

4.실행
ngrok http 포트번호 를 입력하면 실행이 된다.
일반적인 스프링 서버에 대해 외부에서 들어오게 하려면 8080.
또는 3000이나 5173같은 프론트 프로그램에 대해서도 가능하다.

아래 포워딩을 보면 https주소가 나오고 그 주소가 내 localhost:8080으로 연결되어있다고 나온다.
즉 저 https주소를 통해 이제 외부에서 내 스프링서버에 대한 접근이 가능해진 것이다.

'스프링부트 > Tool' 카테고리의 다른 글
| [Spring]메세지 브로커 - RabbitMQ (0) | 2025.09.08 |
|---|---|
| [Spring] Swagger 어노테이션 정리 (1) | 2025.07.31 |
| [Spring] Swagger란? + Swagger에서 로그인 처리 (3) | 2025.07.30 |