캡스톤디자인 프로젝트를 하며 운영 환경 배포 전, 프론트엔드 등 다른 파트 담당자들과 협업을 위해 Dev 환경을 구축해야 할 필요를 느꼈다. API Docs도 Swagger로 구성하여 제공하는 것이 편하고, API 호출 테스트 등을 위해서는 서버 어플리케이션을 구동해야 했다. 그런데 로컬 환경에서 돌리자니 외부 접근이 까다롭고, 밖에 나갈 때 노트북을 들고 나가야 하는데 그럴 때는 서비스 제공을 못 하게 된다.
AWS 프리티어 같은 것도 생각해 봤지만, Spring 어플리케이션은 JVM 기반에서 실행되기 때문에 꽤 무겁다. 1코어 1GB의 사양으로는 데이터베이스까지 같이 띄우기에는 턱없이 부족하다.
프리티어에서 돌려 보면 Out Of Memory때문에 SSH 접근도 못하게 되는 진풍경을 볼 수 있다.
군대 갔다오기 전까지 쓰다가, 전역하고 메인 노트북을 맥북으로 바꾸면서 자연스럽게 게임할때나 쓰게 된 서브 노트북이 있었다. 어차피 한달에 한번 쓸까말까한 노트북이라 그냥 우분투 서버를 설치해서 나만의 서버로 사용하기로 결심했다.
(사실 캡스톤디자인 이전에 다른 프로젝트 때문에 서버로 사용하기로 하긴 했다.)
(먼지가 좀 많다...)
어차피 우분투 GUI는 필요가 없어서 괜한 리소스 낭비하지 말고 Ubuntu Server 20.04 LTS를 설치했다.
다들 알다시피, 유동 IP로 접근을 하면 언제 IP 주소가 바뀔지 알 수 없다. 그래서 많은 사람들이 사용하는 공유기인 ipTIME 제품에서 제공하는 DDNS 서비스와 포트포워딩 기능을 사용하였다.
DDNS(Dynamic Domain Name Service)는 DNS(Domain Name Service)와 유사한 기능을 한다. 차이점이라면, DDNS는 유동IP에 대해서도 도메인 네임 서비스를 제공한다.
호스트 이름과 사용자 ID를 지정하고 등록을 하면, ipTIME 서버에서 DDNS를 제공해준다.
만약 호스트 이름을 dcom
이라고 지정하면, dcom.iptime.org
과 같은 호스트 이름으로 우리의 네트워크에 접근이 가능하다.
Public 네트워크 주소를 통해 접근을 가능하게 했으면, 우리의 사설 네트워크 내부의 주소로 포워딩을 시켜야 한다.
포워딩할 사설 IP 주소 (여기서는 Ubuntu Server가 할당받은 사설 IP 주소)와 외부 접근 포트에 매칭되는 내부 포트를 설정한다. TCP말고 UDP도 사용 가능하다.
연결이 잘 된다.