ASP.NET Core

Ngrok사용_ASP.NET Core API 테스트

Wally's 2023. 7. 6. 17:34

ASP.NET Core 7 버전으로 작성한 Web API를 다른 컴퓨터에서 API 테스트를 하고 싶었다.

로컬 서버를 외부에 공개할 수 있는 방법을 찾다가 ngrok과 localtunnel 을 사용하면 된다는 걸 알게 되었다.

오늘은 Ngrok 에 대한 설명이다.

 

Ngrok 란?

Ngrok는 로컬 서버를 인터넷에 공개적으로 액세스 할 수 있게 해주는 터널링 소프트웨어이다.

개발자들은 웹 또는 API 서버를 로컬 환경에서 개발하고 테스트할 때 사용된다고 한다.

Ngrok을 사용하면 로컬 서버에 할당된 포트를 퍼블릭 URL에 매핑시킬 수 있으며, 

외부에서 해당 URL을 통해 로컬 서버에 접근할 수 있다.

 

Ngrok을 설치하고 실행하면 로컬 포트와 Ngrok 서버 사이에 안전한 터널이 설정되어 트래픽이 안전하게 전달된다.

Ngrok은 터널링 외에도 요청을 검사하고 중계하거나,

로컬 서버에 전달되는 트래픽을 로깅하고 보안 기능을 적용할 수 있다.

Ngrok은 개인적인 목적으로 무료로 사용할 수 있으며, 유로 버전도 제공되어 추가 기능과 고급 설정을 이용할 수 있다.

 

어떻게 터널이 설정되는지?

Ngrok은 내부적으로 포트 포워딩을 사용하여 작동한다.

로컬 서버에 할당된 포트를 퍼블릭 URL에 매핑시켜 외부에서 로컬 서버에 접근할 수 있도록 해준다.

Ngrok을 실행하고 로컬 포트를 지정해 주면,

Ngrok서버는 퍼블릭 URL을 생성하고 해당 URL을 통해 클라이언트의 로컬 포트로 트래픽을 전달합니다. 

이 과정에서 포트 포워딩이 내부적으로 이루어집니다.

 

포트 포워딩 란?

포트 포워딩은 네트워크에서 데이터 트래픽을 주고받는 서비스나 애플리케이션을 특정 포트에서 다른 포트로 전달하는 과정을 말한다.

일반적으로 프라이빗 네트워크(로컬 네트워크)와 퍼블릭 네트워크(인터넷) 간의 통신을 가능하게 한다.

 

로컬 네트워크에서는 내부 IP 주소와 포트를 사용하여 서버에 접근할 수 있지만, 

외부에서는 해당 내부 IP주소에 직접 전근할 수 없다.

이때 포트 포워딩을 사용하면 외부에서 특정 포트로 접속하면 해당 요청이 내부 네트워크의 서버로 전달되도록 설정할 수 있다.

로컬 네트워크의 라우터에서 포트 포워딩을 설정하여,

외부에서 지정 포트로 접속하면 라우터는 해당 요청을 로컬 네트워크의 웹 서버로 전달한다.

포트 포워딩은 네트워크 보안, 웹 개발 및 게임 서버 호스팅 등 다양한 분야에서 사용되며,

인터넷과 로컬 네트워크 간의 통신을 원활하게 하기 위한 중요한 메커니즘입니다.

 

공식 홈페이지 : https://ngrok.com/

다운로드 : https://ngrok.com/download

 

저는 명령어로 설치하는 게 편해서 패키지 매니저 Chocolatey를 활용했다.

 

Windows 11_Chocolatey 설치

Chocolatey(초콜레티) 란? Windows 운영 체제에서 작동하는 패키지 관리 시스템이다. 소프트웨어를 쉽게 설치하고 업그레이드하고, 관리할 수 있다 Chocolatey는 NuGet 패키지 관리 시스템을 기반으로 하

wallyyoucandoit.tistory.com

 

Chocolatey 사용 설치 방법:

1.PowerShell을 열고 다음 명령어를 입력하면 설치 가능 하다.

choco install ngrok.portable

 

2. ngrok 홈페이지(https://ngrok.com)에서 회원가입(Sign Up)한다.

3. 사용자 별로 발급한 고유 토큰을 아래 명령어 사용하여 추가

ngrok authtoken <your_auth_token>

 

사용 방법 :

** ngrok을 사용하여 포트를 외부에 노출시킬 때, 포트는 반드시 ASP.NET Core 애플리케이션의 'appsettings.json'

파일에서 설정된 "ServerAddress"의 포트와 일치해야 합니다.

 

1.ngrok 실행 : 

명령 프롬프트를 열고 'ngrok'을 입력한 뒤에 노출시키려는 로컬 서버의 프로토콜과 포트를 함께 입력한다.

일반적인 예시 : 

ngrok http 8080

2. ngrok URL 얻는다.

ngrok이 무작위로 생성한 공용 URL이 명령 프롬프트에 표시된다. 

http://<random-string>. ngrok.io 형태로 표시된다.

 

직접 격은 에러 사항 :

ngrok http  포트 번호 입력 해서 얻은 URL을 다른 컴퓨터로 접속해 보니 에러가 발생하였다.

접속 에러 이미지

해결 방법명령어 변경이었다.

ngrok http https://localhost:port --host-header=rewrite

>> port에 지정한 port 번호 기입하면 된다.

 

ngrok http prot로 명령을 실행할 경우, 기본적으로 http://localhost:prot을 향하게 된다.

ASP.NET Core는 HTTP로 요청이 들어오면 HTTPS로 리디렉트 하는 기본 설정을 가지고 있다.

ngrok은 HTTPS로 리디렉트 되는 요청을 제대로 치리 하지 못하여 접근이 안 되는 것이다.

 

ngrok http https://localhost:port --host-header=rewrite 명령어는

HTTPS 프로토콜로 로컬 호스트에 접근하도록 설정되어 있어, ASP.NET Core의 HTTPS 리디렉션에 영향을 받지 않는다.

--host-header=rewrite 옵션은 로컬 호스트에 헤더를 재작성해주어,

호스트 헤더가 일치하지 않더라도 요청을 처리할 수 있도록 돕는다.

접근 성공한 이미지

 

Ngrok 장점 :

1. 쉽게 설정할 수 있다. Ngrok는 복잡한 네트워크 설정 없이 바로 사용할 수 있다.

2. 다양한 프로토콜 지원 : HTTP, HTTPS, TCP, TLS등 다양한 프로토콜을 지원한다.

3. 접속 로그 제공 : 접속에 대한 요청과 응답을 볼 수 있다.

4. 웹 인터페이스 제공 : 웹을 통해 서비스 상태를 확인할 수 있다.

 

Ngrok 단점 :

1. Ngrok을 사용하면 트래픽이 로컬 서버로 전달되기 전에 Ngrok 서버를 거쳐야 한다. 약간의 네트워크 지연이 발생할 수 있다.

2. 기본적으로 무료를 사용할 수 있지만, 고정 URL이 필요하다면 유료 버전을 구입해야 한다. 일부 고급 기능을 유료로 제공된다. 일부 기능에 대한 액세스를 원한다면 유로 버전을 구독해야 한다. 

3. 외부 서비스에 의존하므로, Ngrok 서버의 가용성과 성능은 개발 작업에 영향을 미칠 수 있다. Ngrok 서버에 문제가 발생하면 퍼블릭 URL에 대한 액세스가 제한될 수 있다.

 

 

*위 내용 오타 및 수정해야 하는 내용 있으면 댓글로 알려주시면 감사합니다.

'ASP.NET Core' 카테고리의 다른 글

ASP.NET Core_ILogger vs ZLogger  (1) 2023.05.02