로컬 환경에서 개발하기 - localtunnel
서버 개발자로서 로컬 개발 환경이 중요한데,
과거에 Google AppEngine 환경에서 개발할 때를 벗어나서 로컬 개발 환경을 구축하고 개발을 하고 있다.
이때 특정 개발 케이스에서 제대로 돌아가는지 테스트하기 위해서 외부에서 내 Local 환경으로 접속을 테스트해야 할 때가 있다.
대표적인 케이스가 Slack Slash Commands를 연동 개발할 때다.
회사에선 통계도 Slack을 통해서 확인할 수 있도록 간이 통계 기능을 만들어 두었는데,
이럴 경우 서버를 띄워야지만 제대로 동작하는지 확인할 수 있었다.
하지만, 로컬에서도 서버를 띄워 제대로 동작하는지를 테스트할 수 있었고, 그 대표적인 것이 ngrok이었다.
다만, 2시간 동안만 세션이 유효하다. ( 무료로 사용 중이라서 그런 것은 아닌 것 같다. )
특별한 경우가 아니라면 이 2시간만 해도 테스트하는데 크게 어려움은 없었다.
하지만, Slack 통계의 경우는 Slash Commands에서 접속해야 할 서버 주소를 설정하는데, 이 설정을 ngrok를 새로 띄울 때마다 수정해주어야 하는 것이 꽤 번거로웠고, 그래서 다른 대안을 찾다가 localtunnel을 찾게 되었다.
https://theboroer.github.io/localtunnel-www/
우선 세션에 대한 제약이 없다. 아예 없는 것은 아니지만, 적어도 오류가 나서 강제 종료되지 않는 이상 해당 주소를 사용할 수 있는 것으로 보인다.
물론 재구동하면 주소가 바뀌기 때문에 유의해야 한다.
Custom 도메인의 경우 목적성을 벗어나서 둘 다 ( ngrok, localtunnel ) 사용해보진 않았다.
번외로 이 프로그램의 원리는 무엇일까 생각해봤다.
과거 방화벽으로 막혀 있던 사내망에서 외부 서버에 접근하기 위해 SSL tunnel을 만들었던 기억이 있다.
방화벽은 보통 in/out bound 모두 정해진 룰에 따라 차단을 해두는데, SSL 터널의 경우 암호화되어 어떤 사이트로 어떤 통신을 내부적으로 하는지 알 수 없다. 물론 SSL 터널의 서버가 막혀 있으면 답이 없지만, 신뢰할 수 있는 서버로 접근하여 사용한 탓에 막히진 않았었다.
localtunnel 서버도 마찬가지로 신뢰할 수 있는 서버와 같은 맥락으로 접근하고, localtunnel 프로그램은 이 터널의 정보를 기록해두고, 자동으로 생성된 접속 주소에 접근 시 지금 맺은 접속 주소로 포워딩하는 기능이 있어 문제없이 접근할 수 있는 것으로 생각했다.
정리하면,
- 노트북 -> 서버 ( local tunnel ) 접속
- 접속 주소 정보(A) 생성
- AnyOne 이 A를 통해 접속 시 서버( local tunnel )에서 해당 SSL 터널링으로 Proxy 하여 접속
암튼 ngrok 의 2시간 제한으로 고생하시는 분들은 local tunnel을 추천한다.