HTTPS는 보안의 기본이고, 우리가 사용하는 일반적인 웹 서비스들은 HTTPS가 적용된다. HTTPS는 Certificate를 기반으로 암호화 해서 통신을 수행한다. 우리가 DDNS와 같은 도메인명을 얻고 Supabase에 Google OAuth를 연계하려면 필수 설정이다.

1 NPM 설정

Google OAuth는 HTTPS를 요구하므로 duckdns 주소에 SSL을 입혀야 한다. 별도 폴더에서 Nginx Proxy Manger (NPM)을 실행하여 HTTPS 관련 80, 443 포트를 점유하는 작업이다.

2.1. Nginx Proxy Manager (NPM) 실행

먼저 NPM을 실행하기 위한 docker-compose.yml 파일을 작성한다. (Supabase 폴더와는 별도의 폴더, 예: ~/npm에서 진행하자.)

# ~/npm/docker-compose.yml
version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'    # HTTP 트래픽
      - '443:443'  # HTTPS 트래픽
      - '81:81'    # 관리자 UI 포트
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
  • 실행: dockercompose up -d
  • 관리자 접속: http://[Mini_PC_IP]:81
  • 초기 계정: 자기 내용으로 설정

2.2. 사전 준비: 공유기 포트포워딩

외부에서 your-home.duckdns.org로 들어오는 신호가 미니 PC로 전달되어야 SSL 발급과 접속이 가능합니다. ipTime 공유기 설정에서 다음 포트를 미니 PC 내부 IP로 연결하자자.

  • 80 -> 80 (Let's Encrypt 인증용)
    • 규칙이름: HTTP_Auth (자유롭게 입력 가능)
    • 내부 IP주소: 미니 PC의 내부 IP 주소를 입력 (예: 192.168.0.XX)
    • 프로토콜: TCP
    • 외부 포트: 80 ~ 80
    • 내부 포트: 80
  • 443 -> 443 (HTTPS 접속용)
    • 규칙이름: HTTPS
    • 내부 IP주소: 미니 PC의 내부 IP 주소 (위와 동일)
    • 프로토콜: TCP
    • 외부 포트: 443 ~ 443
    • 내부 포트: 443

2.3. NPM에서 라우팅 및 SSL 설정

NPM 관리자 UI(:81)에 접속하여 다음 순서로 설정을 진행합니다.

1단계: Proxy Host 추가

  1. Dashboard > Proxy Hosts > Add Proxy Host 클릭.
  2. Details 탭:
    • Domain Names: your-home.duckdns.org` 입력 후 엔터.
    • Scheme: http 선택.
    • Forward Hostname / IP: 미니 PC의 내부 IP (예: 192.168.0.10) 입력.
    • Forward Port: 8000 입력.
    • Block Common Exploits: 활성화 (보안 권장).
    • Websockets Support: 활성화 (Supabase 실시간 기능을 위해 필수)

2단계: SSL 발급 (Let's Encrypt)

  1. SSL 탭으로 이동합니다.
  2. SSL Certificate: Request a new SSL Certificate 선택.
  3. Force SSL: 활성화 (HTTP 접속 시 자동으로 HTTPS 전환).
  4. HTTP/2 Support: 활성화.
  5. I Agree to the Let's Encrypt Terms of Service: 체크. (이 부분은 보이지 않음)
  6. Save 클릭. (인증서 발급까지 약 30초~1분 정도 소요된다.)

이렇게 등록한 Let's Encrypt의 인증서는 NPM이 자동으로 업데이트 한다고 한다.

마무리 하며

앞에서 언급한 것과 같이 Supabase를 Mini PC에 등록한 후에, 이 Supabase를 통해 Google OAuth 연계하려면 필수 설정이다. 인증서는 NPM이 자동으로 갱신하지만, 3개월마다 한 번씩 NPM 대시보드에서 만료일이 잘 연장되고 있는지 확인해보는 습관이 필요하다.

ipTime으로 DDNS를 설정하는 것이 가장 간단하지만, HTTP를 지원하기 위해서는 도메인의 소유권 확인이 가능해야 한다. 이를 가능케 하면서 DDNS가 가능한 서비스가 duckdns였다. 도메인을 등록하고 우리 Wireless AP의 Public 주소를 등록해 두면 된다. 여기서는 이 Public

1 DNS 설정

  1. https://www.duckdns.org/ 에 접속하고 가입한다. Google 계정으로 쉽게 가능하다.
  2. Subdomain 입력하는 창에 원하는 이름을 입력하고 "add domain"을 클릭한다.
  3. 최대 5개까지 가능하다.

이 간단한 동작으로 우리의 domain이 생기게 된다.

2. IP 주소 업데이트 자동화

참고로 Duck DNS에서 주소를 얻고, 집에서 IP를 지속 업데이트하기 위해서 Cron을 추가 설정하는 방법이 있다. 공인 IP는 언제든 바뀔 수 있습니다. 서버에서 5분마다 자동으로 IP를 체크해서 DuckDNS에 알려주도록 설정하는 것이 가장 좋다.

  1. 터미널에서 아래 명령어로 스크립트 파일을 만듭니다.
  2. mkdir -p ~/duckdns nano ~/duckdns/duck.sh
  3. 아래 내용을 복사해서 붙여넣으세요 (여기서 domain은 your-home으로 가정하고, TOKEN은 DuckDNS 홈페이지 메인에 있는 본인의 토큰을 복사해 넣자.).
  4. echo url="https://www.duckdns.org/update?domains=your-home&token=YOUR_TOKEN&ip=" | curl -k -o ~/duckdns/duck.log -K -
  5. 파일을 저장(Ctrl+O, Enter)하고 닫는다(Ctrl+X).
  6. 실행 권한을 주고 테스트해본다.
chmod 700 ~/duckdns/duck.sh
~/duckdns/duck.sh
cat ~/duckdns/duck.log # OK라고 나오면 성공입니다.
  1. 주기적으로 실행되게 크론탭(crontab)에 등록합니다.
crontab -e
파일 맨 밑에 아래 한 줄을 추가하고 저장합니다. 
*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1

마무리

간단한 동작으로 도메인이 생겼다. Supabase, n8n은 이 간단한 기능으로 활용이 가능하다.

네트워크 서비스를 만들다 보면 가장 먼저 마주하는 벽이 있습니다. 바로 "어떻게 내 서비스를 외부에서 접속하게 만들 것인가?"이죠. 단순히 IP 주소를 알려줄 순 없으니까요.

 

오늘은 입문자가 쉽게 시작할 수 있는 DDNS 방식부터, Vercel이나 Firebase 같은 전문 플랫폼 연동을 위한 Cloudflare 기반 고유 도메인 확보까지 2단계로 나누어 정리해 보겠습니다.

 

1단계 전략: 가볍게 시작하는 '빌려 쓰는 주소', DDNS

처음 개인 서버(Mini PC, NAS)를 구축하거나 로컬 환경에서 테스트할 때 가장 만만한 방법은 DDNS(Dynamic DNS)입니다.

  • 원리: iptime 공유기나 DuckDNS 같은 서비스가 제공하는 서브 도메인(예: myhome.duckdns.org)을 빌려 쓰는 방식입니다.
  • 장점: 무료입니다. 공유기의 유동 IP가 바뀌어도 자동으로 추적해 주니 신경 쓸 게 없습니다.
  • 한계: 하지만 치명적인 단점이 있습니다. '제어권'이 없다는 거죠.
    • example.com 같은 깔끔한 주소를 가질 수 없습니다.
    • 가장 큰 문제는 DNS 레코드(TXT, MX 등) 수정이 거의 불가능하다는 점입니다. 이 때문에 Resend 같은 외부 이메일 발송 서비스나 보안 인증이 필요한 플랫폼과는 연동할 수 없습니다.

💡 한 줄 요약: "내 방 안의 장난감이나 개인용 미디어 서버라면 DDNS로 충분합니다."

2단계 전략: 본격적인 내 집 마련, Cloudflare로 고유 도메인 확보하기

서비스를 Vercel, Firebase에 배포하고 프로젝트의 완성도를 높이고 싶다면, 이제는 나만의 고유 도메인이 필요합니다. 이때 가장 추천하는 조합이 바로 Cloudflare입니다.

왜 Cloudflare인가요?

  1. 도매가 정책: Cloudflare는 도메인 판매 시 수수료를 붙이지 않는 '원가 제공'으로 유명합니다. 갱신 비용이 매우 저렴하죠.
  2. 강력한 관리 도구: 단순 구매뿐만 아니라 전 세계에서 가장 강력한 DNS 관리 기능을 제공합니다.
  3. 무료 보안(SSL/WAF): 클릭 몇 번으로 HTTPS 보안 설정을 끝낼 수 있고, 디도스(DDoS) 공격으로부터 내 서버 IP를 숨겨줍니다.

Vercel & Firebase 연동의 핵심

고유 도메인이 있으면 비로소 전문적인 설정이 가능해집니다.

  • Vercel/Firebase 연결: 제공받은 CNAME 레코드를 Cloudflare DNS 설정에 입력하기만 하면 끝납니다.
  • 외부 서비스 연동: Resend 같은 서비스에서 요구하는 TXT 레코드를 직접 등록할 수 있어, 내 도메인 이름으로 이메일을 보내는 '진짜 서비스' 운영이 가능해집니다.

 

한눈에 비교하기

구분 1차: DDNS (DuckDNS 등) 2차: 고유 도메인 (Cloudflare 등)
비용 무료 연간 구독료 (약 1~2만 원대)
주소 형태 user.duckdns.org myproject.com
권한 단순 접속만 가능 모든 DNS 레코드(A, MX, TXT) 수정 가능
추천 용도 로컬 테스트, 개인 NAS 서비스 배포, 포트폴리오, 이메일 연동

마치며: 어떤 선택이 좋을까?

결국 '어디까지 제어하고 싶은가'의 문제입니다.

 

단순히 집 프로젝트를 밖에서 보고 싶다면 DDNS로 시작하세요. 하지만 Vercel이나 Firebase에 배포한 내 작품에 날개를 달아주고, Resend 같은 전문 API 서비스까지 붙여보고 싶다면 망설이지 말고 Cloudflare에서 도메인을 하나 마련하시길 추천합니다.

커피 두세 잔 정도의 연간 비용으로, 여러분 서비스의 신뢰도가 완전히 달라질 테니까요!

+ Recent posts