티스토리 뷰
ngrok을 설명하기 전에 이것이 필요한 상황에 대해서 이야기를 간단하게 하는게 이해에 도움이 될 듯 하다. 우리가 웹이나 API를 개발할 때 당장 public 망에서 테스트를 해야 하는 경우를 생각해보자. 예를들어 slack bot을 개발한다고 생각해보면 아래 슬랙 API 화면에 보이는것처럼 public IP를 갖고 있는 서버가 있어야 정상적인 테스트가 가능하다. ( Request URL에 들어가는 주소는 슬랙 API를 처리할 개인 서버쯤으로 생각하면 된다. )
하지만 개발단계에서 우리는 아직 서버가 없을수도 있고 퍼블릭 IP를 할당받지 못했을 수도 있다. 기타 다른 여러가지 이유로 localhost로 테스트를 해야 하는 경우가 있는데 대부분의 웹 개발는 개발환경이나 프러덕트 환경에 deploy 하기 전에 localhost:8080 등으로 테스트를 진행하게 된다. 그렇다면 위 슬랙과 같은 경우에는 어떻게 안될까? slack은 퍼블릭한 환경에 존재하고 있는데 Request URL에 내 로컬 PC로 접속하도록 유도할 수는 없을까?
이런질문에서 시작해보면 ngrok와 같은 앱이 그 해답을 제시한다. NAT와 Proxy기반으로 동작해서 localhost에서 어딘지 알 수 없는 서버(이하 A)에 그 정보를 전송하고, 퍼블릭 환경에서 로컬호스트로 접근하기 위해서는 A서버에 request를 보내면 그것을 내 localhost로 proxy(중계)해준다고 생각하면 된다.
자, 그럼 바로 사용하기 위해서 아래 공식 홈페이지에 접속하도록 하자.
페이지에 접속해서 보면 아래와 같이 기능을 소개하는 도큐먼트가 보이고 여러가지 내용들이 보이는데 다른것은 볼필요 없이 일단 LOGIN을 하도록 한다. 일반적인 웹페이지(혹은 API) 테스트는 LOGIN이 필요 없지만 SSH 와 같은 시크릿한 환경이 필요한 경우에는 로그인을 필요로 한다. SSH 를 테스트 하는게 아니라면 로그인은 건너뛰어도 좋다.
로그인을 하면 다음과 같은 화면을 볼 수 있는데 내 PC의 환경에 맞는 ngrok을 다운로드 받도록 하자.
그리고 필요하다면 위 그림에서 3번과정에 있는 스크립트를 복사해서 터미널에서 실행시키도록 한다. 로컬PC를 인증하기 위한 절차라고 이해하면 되는데 실행시 계정의 home 디렉터리 밑에 .ngrok2/ngrok.yml 에 정보가 저장된다. 이후부터는 ngrok 바이너리내에서 해당 파일을 참고하게 된다.
$ ./ngrok authtoken 4e8mZDfUAuiDgLwN6RWXt_6wquZmAeqL
Authtoken saved to configuration file: /home/guest/.ngrok2/ngrok.yml
SSH 포트를 여는건 아래와 같은 명령어로 가능하다.
./ngrok tcp 22
명령이 실행되면 아래와 같은 화면이 출력되는데 연결하기 위한 퍼블릭 도메인과 현재 연결되어 있는 세션 개수 등 여러가지 정보가 출력된다.
중간쯤에 Forwarding에 보이는 정보가 중요한데 퍼블릭한 도메인을 localhost:22로 포워딩 시켜준다는 의미이므로 이제 외부네트워크에서 해당 도메인으로 SSH 연결을 시도하면 우리 로컬 서버로 연결 될 것이다. SSH 연결은 터미널에서 아래와 같이 진행하면 되겠다.
ssh guest@0.tcp.ngrok.io -p 16017
SSH 연결이 아닌 웹 연결같은 경우에도 아래와 같이 간단하게 가능하다.
./ngrok http 80
API 혹은 웹페이지를 확인해볼 때 유용하겠다.
여기까지가 ngrok에 대한 짧은 리뷰였는데 보안이 중요시되는 로컬 환경에서의 사용은 자제하는 것이 좋을 것 같다. 이유는 ngrok 바이너리는 컴파일된 상태라서 실제 내부동작이 어떻게 되는지 알 수 없을뿐더러 그것은 곧 보안에 문제가 있을 수 있다는 것을 의미한다. 예를들면 중계서버로 로컬호스트의 접속정보가 제공되기 때문에 그 서버를 관리하는 누군가에게 내 서버의 문을 열어주고 있는 것과 같을 수 있기 때문이다. 사실 소스코드 내부를 보지 못해서 속단하기는 힘들지만 조심해서 나쁠건 없으니까. 판단은 여러분이 하시면 되겠다.
'개발 > tools' 카테고리의 다른 글
데이터베이스 연결 도구 - DBeaver 설치 (0) | 2020.01.03 |
---|---|
IntelliJ 단축키 (2) | 2019.09.24 |
Google Colaboratory를 아시나요? (15) | 2017.12.05 |
virtualbox에서 CentOS 6.4 64bit 복제 시 인터페이스 문제 해결 (0) | 2016.06.28 |
webpage 크롤링(crawling)+Slack API (2) | 2016.05.11 |
- Total
- Today
- Yesterday