[ngrok] 로컬 서버를 외부와 통신이 가능하게 만들어 보자

neo-the-cow·2023년 7월 22일
1
post-thumbnail

0. 들어가기 전에

스프링부트 과제 미션을 진행 하면서 포트원(아임포트) 결제 모듈을 연동해야하는 미션이 있었습니다. 포트원에서 지원하는 기능 중 웹 훅을 통해서 결제 이벤트가 발생하면 서버로 요청을 보내주는 기능이 있었는데 로컬 서버에도 외부 환경에서 들어오는 요청을 처리 할 수 있게 해주는 툴이 있어 소개하고자 합니다.

설치 환경과 설치 목록은 다음과 같습니다.

설치 환경
OS : macOS Ventura 13.4.1 (arm64)
설치 목록
ngrok

1. ngrok란?

ngrok는 외부 네트워크에서 로컬환경으로 접속할 수 있게 해주는 터널링 프로그램입니다. 외부에서 로컬 환경으로 접근이 필요한 상황에서 간단하게 테스트 하는 용도로 적합하게 사용 할 수 있습니다.

2. 가격 정책?

2023년 7월 22일 기준 4개로 나뉩니다.

무료 버전 기준으로 분당 120회의 tcp 커넥션이 허용됩니다.

3. 설치

맥환경에서는 홈브류를 통해 간단히 설치 할 수 있습니다.

% brew install ngrok

홈브류가 설치 되어있지 않으신 분들은 홈브류 설치 하기를 참고해 설치해주세요.

다음은 설치 로그 전문입니다.

neo@Neos-MacBook-Air ~ % brew install ngrok
Running `brew update --auto-update`...
==> Homebrew collects anonymous analytics.
Read the analytics documentation (and how to opt-out) here:
  https://docs.brew.sh/Analytics
No analytics have been recorded yet (nor will be during this `brew` run).

Installing from the API is now the default behaviour!
You can save space and time by running:
  brew untap homebrew/core
==> Auto-updated Homebrew!
Updated 3 taps (homebrew/services, homebrew/core and homebrew/cask).
==> New Formulae
bacon                      hoverfly                   solr@8.11
bfs                        ittapi                     sqlpage
blink                      mailpit                    strip-nondeterminism
botan@2                    mvt                        tzdiff
couchbase-shell            neonctl                    webpod
crystalline                pgrok                      wget2
dysk                       pixi                       woof-doom
erg                        pop                        wpscan
espflash                   pylyzer                    yyjson
go-feature-flag            quictls
govulncheck                ruff-lsp
==> New Casks
ente                glaze               mycard              showmeyourhotkeys
fedistar            maa                 poe

You have 2 outdated formulae installed.

==> Caveats
To install shell completions, add this to your profile:
  if command -v ngrok &>/dev/null; then
    eval "$(ngrok completion)"
  fi

==> Downloading https://raw.githubusercontent.com/Homebrew/homebrew-cask/ec21578
######################################################################### 100.0%
==> Downloading https://bin.equinox.io/a/gRmfNMWCVKD/ngrok-v3-3.3.1-stable-darwi
######################################################################### 100.0%
==> Installing Cask ngrok
==> Linking Binary 'ngrok' to '/opt/homebrew/bin/ngrok'
🍺  ngrok was successfully installed!
neo@Neos-MacBook-Air ~ %

4. 세션 유지하기

로컬환경에 ngrok를 설치하고 다음 명령어로 실행하게되면 세션 유지시간이 2시간으로 제한되는것을 알 수 있습니다. 세션이 만료되면 ngrok명령어를 통해 포워딩을 다시 시작해주어야 합니다.
이 때, 다시 시작된 포워딩 uri가 바뀌게 되어 기존에 설정해 둔 경로는 사용 할 수 없게 됩니다. 이런 번거로움을 해소하기위해 ngrok에 회원가입 하고 Authentication Code를 받아 옵니다.

4.1 ngrok 회원 가입

ngrok 회원가입 링크로 접속하게되면 위와 같은 화면이 나오는데 깃허브를 통해 가입했습니다. 회원가입 방법은 자유롭게 선택합니다.

4.2 Authentication Code 받아오기

회원가입 절차를 마치고 대시보드로 들어가면 이렇게 Auth Code를 받아올 수 있습니다. 아래 Command Line 명령어를 복사해 터미널에 입력 하면 기본 설정파일(ngrok.yml)에 토큰이 저장됩니다.

5. 테스트

간단한 스프링 부트 프로젝트를 만들어 실행하고 테스트해봅니다.

% ngrok http localhost:8080

ngrok                                                                                               (Ctrl+C to quit)
                                                                                                                    
🤯 Try the ngrok Kubernetes Ingress Controller: https://ngrok.com/s/k8s-ingress                                     
                                                                                                                    
Session Status                online                                                                                
Account                       Neo (Plan: Free)                                                                      
Version                       3.3.1                                                                                 
Region                        Japan (jp)                                                                            
Latency                       -                                                                                     
Web Interface                 http://127.0.0.1:4040                                                                 
Forwarding                    https://91a8-2001-e60-87d6-446d-3cd7-f2fa-3b08-75e3.ngrok-free.app -> http://localhost
                                                                                                                    
Connections                   ttl     opn     rt1     rt5     p50     p90                                           
                              0       0       0.00    0.00    0.00    0.00                                       
HTTP Requests
-------------

GET /ping/public               200

브라우저나 포스트맨 등 프로그램 상 uri를 입력하는 곳에 Forwarding 주소를 입력하고 세부 경로를 입력합니다. Forwarding uri로 접속하면 사용자의 로컬 환경으로 포워딩해줍니다.

6. 맺음말

로컬환경으로 웹훅을 받아와야하는 경우, 개발서버에 올리거나 실제로 빌드 산출물을 띄우긴 부담스럽고 로컬에서 바로 확인했으면 하는 경우에 ngrok가 요긴하게 사용될 수 있습니다.
혹시나 오류가 발생한다거나 결과가 올바르지 않다면 중간에 오탈자는 없었는지, 빠진건 없는지 한번 다시 확인해 주시고 이해가 안되는 부분이 있다면 댓글로 남겨주시면 확인하는 대로 답변 달겠습니다.

profile
Hi. I'm Neo

0개의 댓글