거창한 이유는 없었다. 호스팅 비용이 만만치 않더라.
앱이 하나둘 늘어나니 클라우드 청구서가 눈에 밟혔다. 월 4~5만 원쯤. 큰돈은 아니어도, 사이드로 만든 앱 여러 개를 계속 굴릴 생각을 하니 매달 빠져나가는 게 신경 쓰였다. 그러다 생각났다. 집에 안 쓰고 그냥 돌고 있는 컴퓨터가 한 대 있는데 — 이거로 안 되나?
일단 켰다.
근데 집서버는 켜는 순간부터 클라우드랑 다르다.
클라우드는 IP 하나 던져주면 끝인데, 집 컴퓨터는 공유기 뒤에 숨어 있다. 게다가 우리 집은 KT 가정용 회선이라 공인 IP가 고정도 아니다. 외부에서 들어오게 하려면 포트를 뚫고, 도메인을 붙이고, HTTPS 인증서까지 받아야 한다. 클라우드가 알아서 해주던 걸 전부 손으로.
그리고 HTTPS에서 막혔다.
사이트는 떠도, 주소창의 자물쇠(HTTPS) 인증서가 끝내 안 나왔다. 부딪히는 스타일이라 미리 공부하고 시작한 게 아니어서, 처음엔 내가 뭘 잘못 설정했나 싶어 한참 헤맸다.
알고 보니 범인은 엉뚱한 데 있었다. 공유기가 기본으로 주는 iptime.org 도메인이 문제였다. 그 상위 도메인에 걸린 CAA 레코드가 인증서 발급기관을 통째로 막고 있어서, Let’s Encrypt가 인증서를 내줄 수가 없었던 거다. 내 설정 잘못이 아니라 도메인이 막혀 있었던 셈이다. (이 CAA를 추적한 과정은 다음 편에서 자세히.)
그래서 DuckDNS로 갈아탔다.
무료에, CAA 제한이 없고, 가변 공인 IP를 자동으로 추적해준다 — KT 회선 IP가 수시로 바뀌어도 따라가 준다는 뜻이다. 붙이자마자 막히던 인증서가 뻥 뚫렸다. “이거다” 싶었다.
한참 잘 쓰다가, 진짜 도메인을 샀다. 어머니 미술관에 붙일 hansaiam.com을 Cloudflare에서.
도메인을 붙이고 나니 문득 들었다. “그럼 이제 duck은 버려도 되는 거 아닌가?”
답은 아니오였다. 산 도메인도 결국 그 뒤에서 가변 IP를 추적해줄 누군가가 필요한데, 그게 duck이다. 그래서 도메인을 DuckDNS 주소에 CNAME으로 걸어뒀다. IP가 바뀌면 duck이 잡고, 내 도메인은 duck을 따라간다. duck은 안 보이는 데서 IP 추적기로 계속 일하고 있다.
그렇게 집에 놀던 컴퓨터 한 대가 월 0원짜리 서버가 됐다. 지금 그 위에서 앱 여러 개가 돌고 있다.
집에 안 쓰고 켜져 있는 컴퓨터가 있으면, 거창하게 시작할 거 없이 일단 켜고 부딪혀봐도 된다. 앱 여러 개를 한 서버에 공존시키는 통합 구성(Caddy), 그리고 외부에 열자마자 시작된 보안 하드닝 이야기는 다음 편들에서.