스프링부트 과제 미션을 진행 하면서 포트원(아임포트) 결제 모듈을 연동해야하는 미션이 있었습니다. 포트원에서 지원하는 기능 중 웹 훅을 통해서 결제 이벤트가 발생하면 서버로 요청을 보내주는 기능이 있었는데 로컬 서버에도 외부 환경에서 들어오는 요청을 처리 할 수 있게 해주는 툴이 있어 소개하고자 합니다.
설치 환경과 설치 목록은 다음과 같습니다.
설치 환경
OS : macOS Ventura 13.4.1 (arm64)
설치 목록
ngrok
ngrok는 외부 네트워크에서 로컬환경으로 접속할 수 있게 해주는 터널링 프로그램입니다. 외부에서 로컬 환경으로 접근이 필요한 상황에서 간단하게 테스트 하는 용도로 적합하게 사용 할 수 있습니다.
2023년 7월 22일 기준 4개로 나뉩니다.
무료 버전 기준으로 분당 120회의 tcp 커넥션이 허용됩니다.
맥환경에서는 홈브류를 통해 간단히 설치 할 수 있습니다.
% 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 ~ %
로컬환경에 ngrok를 설치하고 다음 명령어로 실행하게되면 세션 유지시간이 2시간으로 제한되는것을 알 수 있습니다. 세션이 만료되면 ngrok명령어를 통해 포워딩을 다시 시작해주어야 합니다.
이 때, 다시 시작된 포워딩 uri가 바뀌게 되어 기존에 설정해 둔 경로는 사용 할 수 없게 됩니다. 이런 번거로움을 해소하기위해 ngrok에 회원가입 하고 Authentication Code를 받아 옵니다.
ngrok 회원가입 링크로 접속하게되면 위와 같은 화면이 나오는데 깃허브를 통해 가입했습니다. 회원가입 방법은 자유롭게 선택합니다.
회원가입 절차를 마치고 대시보드로 들어가면 이렇게 Auth Code를 받아올 수 있습니다. 아래 Command Line 명령어를 복사해 터미널에 입력 하면 기본 설정파일(ngrok.yml
)에 토큰이 저장됩니다.
간단한 스프링 부트 프로젝트를 만들어 실행하고 테스트해봅니다.
% 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로 접속하면 사용자의 로컬 환경으로 포워딩해줍니다.
로컬환경으로 웹훅을 받아와야하는 경우, 개발서버에 올리거나 실제로 빌드 산출물을 띄우긴 부담스럽고 로컬에서 바로 확인했으면 하는 경우에 ngrok가 요긴하게 사용될 수 있습니다.
혹시나 오류가 발생한다거나 결과가 올바르지 않다면 중간에 오탈자는 없었는지, 빠진건 없는지 한번 다시 확인해 주시고 이해가 안되는 부분이 있다면 댓글로 남겨주시면 확인하는 대로 답변 달겠습니다.