[컴퓨터 놀이] 코알못도 했다! 나만의 홈서버 구축기 (8) — 방문자 0명의 충격 — 커스텀 도메인과 Cloudflare Tunnel로 검색 노출 해결

홈서버에서 .ts.net을 prsm-studio.com 커스텀 도메인으로 변경하는 과정

6편에서 WordPress 블로그를 세팅하고, 7편에서 n8n으로 자동화까지 완성했습니다. 블로그 완성. 자동화 완성. 글도 열심히 씁니다. 근데요.

방문자가 사실상 0명입니다.

정확히 말하면, 2주 동안 총 방문자 5명. 그중 3명은 봇(크롤러)이고 실제 사람은 2명뿐이었습니다. 그것도 검색으로 들어온 게 아니라 어딘가에서 링크를 타고 온 거예요. 구글에서 제 블로그를 검색하면? 아무것도 안 나옵니다. 네이버? 마찬가지. 유일하게 Daum에서만 검색이 됐는데, 구글이나 네이버에서 안 나오면 사실상 없는 거나 마찬가지입니다.

원인은 어이없을 만큼 단순했습니다.

Tailscale Funnel의 치명적인 약점: .ts.net은 검색엔진이 무시한다

.ts.net 서브도메인으로는 검색엔진에 노출되지 않는 문제
.ts.net 주소로는 Google 검색 결과에 단 하나도 나오지 않았다

2편에서 Tailscale Funnel을 설정했죠? 무료로 내 서버를 인터넷에 공개하는 마법 같은 기능이었습니다. 주소는 blog.dace-sidemirror.ts.net. 접속 잘 되고, SSL 자동이고, 완벽했습니다.

근데 이 주소에 치명적인 문제가 있었습니다.

.ts.net은 Tailscale이 소유한 서브도메인입니다. Google 입장에서 이건 “남의 플랫폼에 올린 페이지”입니다. Tailscale이라는 회사 도메인의 수많은 서브도메인 중 하나일 뿐이니까요. Google은 이런 서브도메인을 잘 색인하지 않습니다. 왜냐하면 하나의 루트 도메인 아래 수천, 수만 개의 서브도메인이 있을 수 있는데, Google이 이걸 전부 크롤링하면 리소스 낭비이기 때문입니다. 실제로 Tailscale의 공식 문서에서도 Funnel은 “개발과 테스트 용도”라고 명시하고 있습니다.

실제로 확인해봤습니다:

site:ts.net  →  Google 검색 결과: 0건
site:blog.dace-sidemirror.ts.net  →  0건

2주 동안 쓴 글 16개, Google에 단 하나도 색인되지 않았습니다. 아무리 좋은 글을 써도, 검색엔진이 주소 자체를 무시하면 의미가 없습니다.

Tailscale Funnel은 개발용으로는 훌륭합니다. 내부 테스트, 친구한테 잠깐 보여주기, 웹훅 테스트. 하지만 불특정 다수에게 공개하는 블로그에는 맞지 않았습니다. 검색에 안 나오는 블로그는 블로그가 아닙니다.

홈서버 블로그에 커스텀 도메인이 필요한 이유

커스텀 도메인이 필요한 이유는 SEO만이 아닙니다:

  • 브랜딩prsm-studio.com은 기억하기 쉽고, blog.dace-sidemirror.ts.net은 아무도 기억 못합니다
  • 신뢰도 — 자체 도메인은 “이 사람이 진지하게 운영하는 사이트구나”라는 인상을 줍니다
  • 이동성 — 서버를 바꿔도, 호스팅을 바꿔도 도메인은 그대로. Tailscale을 쓰든 Cloudflare를 쓰든 내 주소는 변하지 않습니다
  • 이메일 — 나중에 [email protected] 같은 커스텀 이메일도 만들 수 있습니다

해결책: 커스텀 도메인 + Cloudflare Tunnel

필요한 건 두 가지였습니다:

  1. 내 도메인 — .com이든 .dev든 내 이름으로 된 주소
  2. 그 도메인을 내 서버에 연결하는 방법 — 공유기 포트포워딩 없이

Cloudflare가 둘 다 해결해줍니다. 도메인 구매도 Cloudflare에서, 터널도 Cloudflare에서. 그리고 둘 다 무료(도메인 등록비 제외).

Tailscale Funnel Cloudflare Tunnel
도메인 .ts.net (고정) 내 도메인 사용
SEO ❌ 검색 노출 불가 ✅ 정상 색인
SSL 자동 자동
속도 보통 Cloudflare CDN 캐싱
설정 난이도 매우 쉬움 쉬움 (10분)
비용 무료 무료 (도메인비만 연 $10~15)
포트포워딩 불필요 불필요

Tailscale Funnel은 그대로 유지합니다. 내부 서비스 접근용으로는 여전히 최고니까요. 외부 공개용 블로그만 Cloudflare Tunnel로 바꾸는 겁니다. 두 터널이 같은 서버에서 동시에 돌아가는 데 전혀 문제 없습니다.

1단계: Cloudflare에서 도메인 구매 (5분, $10.44)

도메인 이름 고르는 게 가장 오래 걸렸습니다. 개인 프로젝트와 관련된 이름으로 하고 싶었는데, 좋은 건 다 선점돼 있더라고요. 이것저것 검색해본 결과 prsm-studio.com이 마음에 들어서 바로 결정.

Cloudflare 대시보드에서 도메인을 바로 구매했습니다. $10.44/년. 월 900원도 안 됩니다. 이게 원가(ICANN 등록비)라서 다른 데보다 저렴합니다. GoDaddy나 Namecheap 같은 곳은 첫 해 싸게 보이지만 갱신할 때 2~3배 뛰거든요. Cloudflare는 원가 그대로, 갱신비도 동일. 이건 Cloudflare가 도메인 사업으로 이윤을 남기지 않겠다고 공식 선언했기 때문입니다.

도메인 구매 팁: .com이 가장 무난합니다. .dev, .io 같은 건 멋있어 보이지만 연간 비용이 2~3배 높고, 일부 사용자들은 .com이 아닌 주소를 신뢰하지 않습니다. .com으로 원하는 이름이 있으면 .com을 추천합니다.

2단계: Cloudflare Tunnel 설치 (10분)

홈서버와 Cloudflare 사이의 보안 터널 연결
Cloudflare Tunnel: 내 서버와 Cloudflare 사이의 보안 터널

Cloudflare Tunnel은 내 서버와 Cloudflare 사이에 보안 터널을 만드는 서비스입니다. 공유기 포트포워딩 없이, 내 서버의 포트를 외부에 안전하게 노출합니다. Tailscale Funnel과 비슷한 개념인데, 내 도메인을 쓸 수 있다는 게 핵심 차이입니다.

제가 한 건 딱 두 개: Cloudflare 대시보드에서 터널 만들기 버튼 클릭, 그리고 받은 토큰을 Claude Code한테 전달. 나머지는 전부 Claude Code가 알아서 했습니다.

# Claude Code가 실행한 명령어
sudo cloudflared service install [Cloudflare에서 받은 토큰]

이 한 줄로 cloudflared가 시스템 서비스로 등록되고, 재부팅해도 자동으로 터널을 연결합니다. Claude Code가 Cloudflare 대시보드 터널 라우팅도 안내해줘서 설정했습니다:

  • Public hostname: prsm-studio.com
  • Service: http://localhost:8080 (WordPress가 돌아가는 포트)

이제 prsm-studio.com으로 접속하면 → Cloudflare 터널 → 내 서버 WordPress로 연결됩니다. SSL도 자동, CDN 캐싱도 자동. 보안도 Cloudflare WAF가 알아서 차단해주니까 공유기 포트포워딩보다 훨씬 안전합니다.

3단계: WordPress URL 마이그레이션 — 나는 구경만 했다

Claude Code AI가 WordPress URL 636건을 자동으로 교체하는 모습
AI가 636건의 URL을 자동 교체하는 동안, 사람은 구경만 했다

도메인을 바꾸면 WordPress 내부의 모든 URL을 바꿔야 합니다. 글 안의 이미지 경로, 내부 링크, SEO 메타데이터, RSS 피드 주소… 생각보다 엄청 많습니다.

바꿔야 할 것들:

  • wp-config.phpWP_HOME, WP_SITEURL — WordPress가 자기 주소를 인식하는 핵심 설정
  • 데이터베이스의 모든 URL — 글 본문의 이미지 경로, 내부 링크, 메타데이터
  • Yoast SEO의 schema, OG 태그 — 검색엔진과 SNS 공유 시 표시되는 URL
  • robots.txt의 사이트맵 주소 — 검색엔진 크롤러가 참조하는 경로
  • n8n 워크플로우의 모니터링 URL — 자동화 도구의 헬스체크 주소

저한테 이걸 하나하나 수동으로 고치라고 하면 일주일은 걸립니다. 뭘 바꿔야 하는지도 모르니까요. Claude Code한테 “도메인 바꿨어, 나머지 처리해”라고 한 줄 시켰습니다. 그랬더니 알아서 전부 찾아서 바꿨습니다:

# Claude Code가 실행한 명령어
wp search-replace 'blog.dace-sidemirror.ts.net' 'prsm-studio.com' --all-tables
# 결과: 636건 교체 완료

636개나 바꿀 게 있었습니다. 데이터베이스 URL 교체뿐만 아니라, wp-config.php 수정, Yoast SEO 캐시 삭제, robots.txt 갱신, n8n 워크플로우 API로 모니터링 URL 교체, 블로그 발행 스크립트의 도메인 갱신까지 — 전부 자동으로 처리했습니다. 저는 터미널에 출력되는 로그를 구경했을 뿐입니다.

중간에 Cloudflare 캐시 문제가 생겼습니다. robots.txt를 업데이트했는데 계속 옛날 내용이 나오는 거예요. Cloudflare가 정적 파일을 4시간 동안 캐싱하고 있었거든요. Claude Code가 원인 찾고 no-cache 헤더까지 설정해줬는데, 결국 제가 한 건 Cloudflare 대시보드에서 “Purge Everything” 버튼 한 번 누른 것뿐입니다.

4단계: 301 리다이렉트로 옛 주소 자동 이동 설정

혹시라도 옛 주소(blog.dace-sidemirror.ts.net)로 들어오는 사람이 있으면, 새 주소로 자동 이동시켜야 합니다. Claude Code가 Apache .htaccess에 리다이렉트 규칙을 추가했습니다:

RewriteCond %{HTTP_HOST} blog\.dace-sidemirror\.ts\.net [NC]
RewriteRule ^(.*)$ https://prsm-studio.com/$1 [R=301,L]

301은 “영구 이동”이라는 뜻입니다. 검색엔진한테 “이 주소는 영원히 새 주소로 바뀌었어”라고 알려주는 거예요. 옛 주소로 접속하면 자동으로 새 주소로 넘어갑니다. SEO 관점에서도 301 리다이렉트는 기존 주소의 검색 점수(도메인 권한)를 새 주소로 이전시켜주기 때문에 반드시 설정해야 합니다.

5단계: 검색엔진 등록 — 나는 버튼만 클릭했다

Google Naver Bing Daum 검색엔진 등록
4대 검색엔진 전부 등록 완료

이제 진짜 검색엔진에 “나 여기 있어!”라고 알릴 차례입니다. 등록해야 할 곳은 4군데:

  • Google Search Console — 속성 추가 → DNS 인증 → 사이트맵 제출
  • Naver Search Advisor — 사이트 등록 → HTML 메타태그 인증
  • Bing Webmaster Tools — 사이트 등록 → URL 제출
  • Daum 웹마스터 도구 — robots.txt에 인증 코드 추가

솔직히 여기서 제가 한 건 “이거 등록해”라고 지시하고, 각 사이트에서 인증 코드 받아서 Claude Code한테 넘기고, 완료 버튼 클릭한 것뿐입니다. 인증 코드를 WordPress에 집어넣는 작업, Naver/Daum 메타태그 설정, robots.txt 업데이트 — 전부 Claude Code가 처리했습니다.

사이트맵은 Yoast SEO 플러그인이 자동 생성해줍니다. prsm-studio.com/sitemap_index.xml에 블로그의 모든 페이지 목록이 있고, 이걸 검색엔진에 제출하면 “이 URL들을 크롤링해주세요”라고 요청하는 겁니다.

Claude Code는 추가로 IndexNow라는 프로토콜로 32개 URL을 한꺼번에 제출해줬습니다. IndexNow는 Bing, Yandex, Naver 등이 지원하는 즉시 색인 요청 API입니다. 이건 제가 시킨 것도 아닌데 알아서 해줬어요. “새 도메인으로 바꿨으니 검색엔진에도 알려야지”라고 스스로 판단한 겁니다.

결과: 검색 노출 시작

도메인 변경 후 현재 상태:

  • prsm-studio.com 정상 접속
  • ✅ Google/Naver/Bing/Daum 전부 등록 완료
  • ✅ 사이트맵 제출 완료
  • ✅ IndexNow로 32개 URL 즉시 제출
  • ✅ 옛 주소 301 리다이렉트
  • ✅ Daum 검색 노출 확인 (Daum은 .ts.net 시절부터 유일하게 잡아주고 있었음)
  • ⏳ Google/Naver 색인 대기 중 (보통 며칠~2주)

재밌는 건, Daum은 .ts.net 주소일 때도 검색이 됐다는 겁니다. 4대 검색엔진 중 유일하게요. 하지만 한국에서 Daum만으로는 부족합니다. Google과 네이버에서 잡혀야 진짜 트래픽이 들어오니까요. 커스텀 도메인으로 바꾼 지금, n8n의 Blog Indexing Monitor가 12시간마다 색인 상태를 확인해서 텔레그램으로 알려줍니다. 기다리기만 하면 됩니다.

교훈은 두 개입니다. 첫째, 무료에는 이유가 있다. Tailscale Funnel은 무료이고 편하지만, 검색 노출이라는 블로그의 핵심 기능이 빠져 있었습니다. 연 14,000원으로 그 문제를 완전히 해결했습니다.

둘째, AI한테 시키면 진짜 다 해준다. 이번 편에서 제가 직접 한 건 딱 이것뿐입니다:

  • Cloudflare에서 도메인 구매 (카드번호 입력)
  • Cloudflare 대시보드에서 터널 생성 버튼 클릭
  • 검색엔진 사이트에서 인증 코드 복사 + 완료 버튼 클릭

wp-config 수정, DB 636건 URL 교체, .htaccess 리다이렉트 설정, SEO 메타태그 삽입, n8n 워크플로우 업데이트, IndexNow 32개 URL 일괄 제출, 캐시 문제 디버깅 — 기술적인 작업은 100% Claude Code가 했습니다. 코드 모르는 사람이 도메인 마이그레이션을? AI 시대에는 가능합니다.

다음 편 예고

다음 편에서는 온라인 회의 자동 전사 + AI 회의록을 다룹니다. Google Meet, Zoom, Teams 같은 웹 회의에 들어가서 자동으로 음성을 텍스트로 변환하고, AI가 핵심 내용과 할 일을 정리해주는 — 제조업 현장에서 회의 끝나면 회의록이 이미 완성돼 있는 이야기입니다.

여기까지 읽어주셔서 감사합니다. 다음 편도 기대해 주세요!

이 글도 AI(Claude Code)가 작성했습니다. 도메인 마이그레이션도, 이 블로그 글도, 전부 AI가 했습니다. 저는 “해”라고 말했을 뿐입니다.

[컴퓨터 놀이] 코알못도 해냈다! 나만의 홈서버 구축기 (1) – SER9 MAX와 Windows 11, WSL2, Docker로 시작하기 💻🚀 (feat. Claude & Claude Code)

선명한 노란색 배경에 골드 인증을 받은 고효율 850W 전원 공급 장치입니다.

[컴퓨터 놀이] 코알못도 해냈다! 나만의 홈서버 구축기 (1) – SER9 MAX와 Windows 11, WSL2, Docker로 시작하기 💻🚀 (feat. Claude & Claude Code)

안녕하세요, 토스터입니다! 🙋‍♂️ 오늘은 제가 직접 경험한 흥미로운 프로젝트, 바로 나만의 홈서버 구축기 첫 번째 이야기를 들려드리려고 합니다. 솔직히 말씀드리면, 저는 코드나 컴퓨터에 대해 정말 아무것도 모르는 일자무식입니다. 그런 제가 클라우드 서비스의 불어나는 비용과 내 데이터의 주권에 대한 고민 끝에 ‘나만의 놀이터’를 만들기로 결심했고, 그 시작은 바로 미니 PC, Beelink SER9 MAX였습니다. 이 모든 여정의 시작은 Claude와 함께했고, 설치 과정은 Claude Code가 알아서 척척 진행해줬다는 점도 특별한 포인트가 될 거예요!

asus rog, led 팬, pc 게임의 무료 스톡 사진
Photo by Andrey Matveev / Pexels

1. 왜 홈서버를 구축하고 싶었을까? 그리고 SER9 MAX 픽! ✨

처음에는 클라우드 서버를 사용했어요. 하지만 시간이 지날수록 매달 나가는 비용이 부담되기 시작했고, 무엇보다 내 소중한 데이터들이 어딘가에 저장되어 있다는 막연한 불안감이 들더군요. 그래서 ‘내 손으로 직접 관리하는 서버’를 만들어보자고 마음먹었습니다. 나만의 공간, 나만의 규칙으로 운영되는 디지털 놀이터를 꿈꾼 거죠. 🏰

홈서버 구축을 위해 어떤 하드웨어를 선택할지 고민이 많았는데, 여러 미니 PC들을 비교하다가 Beelink SER9 MAX에 꽂혔습니다. 10기가비트 이더넷, 듀얼 M.2 NVMe 슬롯, DDR5 메모리, 그리고 효율적인 AMD Ryzen 7 H255 프로세서까지! 작은 크기에 비해 엄청난 스펙을 자랑하더군요. 아마존에서 주문하고 설레는 마음으로 기다렸던 기억이 생생합니다. 📦 이 모든 탐색과 결정 과정에서 Claude가 다양한 정보 검색과 비교 분석을 도와줘서 큰 도움이 됐습니다.

Mini PC desk setup
Photo by Nikhil Pawar / Pexels

2. Windows 11, 홈서버 OS로 괜찮을까? 🤔

SER9 MAX를 받고 보니, 프리인스톨된 Windows 11이 깔려 있더군요. 보통 홈서버 하면 리눅스를 많이 떠올리지만, 저는 Windows 환경에 익숙하고, 당장 리눅스 서버 OS를 새로 설치하는 것도 번거로웠습니다. 그래서 일단 Windows 11을 그대로 사용해보기로 했습니다.

장점은 명확했습니다. 익숙한 UI/UX 덕분에 초기 설정이 정말 편리했고, 다양한 Windows용 소프트웨어와의 호환성도 좋았죠. 미디어 서버나 간단한 파일 공유 같은 용도로는 충분히 매력적이었습니다. 하지만 단점도 분명했습니다. 리눅스 기반 서버 OS에 비해 시스템 리소스 소모가 많고, Windows 업데이트 후 강제 재부팅이 필요한 경우가 있어 24시간 안정적인 운영에는 신경 써야 할 부분이 많았습니다. 특히 Windows 11 Home 버전은 원격 데스크톱 서버 기능이나 Hyper-V 같은 고급 기능이 없다는 점도 아쉬웠습니다.

키보드의 클로즈업
Photo by Nothing Ahead / Pexels

3. Windows 속 작은 리눅스 세상, WSL2 설치기 🐧

홈서버에 `Docker`를 설치하기 위해서는 `WSL2(Windows Subsystem for Linux 2)`가 필수라는 것을 알게 되었습니다. `Docker Desktop`이 `WSL2` 백엔드를 통해 Windows에서 Linux 기반 컨테이너를 실행하기 때문이죠. 처음에는 복잡할까 봐 걱정했지만, 저는 Claude Code에게 설치를 맡겼더니 알아서 척척 진행해줬습니다.

관리자 권한으로 PowerShell을 열고 `wsl –install` 명령어를 입력하니, `WSL`과 함께 기본 `Linux` 배포판(저는 `Ubuntu`가 설치되었습니다)이 자동으로 설치되더군요. 재부팅 후 `wsl –set-default-version 2` 명령으로 `WSL2`를 기본 버전으로 설정하는 것까지, Claude Code가 알아서 다 처리해줘서 저는 전혀 헤매지 않고 한 번에 성공했습니다! 마치 Windows 안에 나만의 작은 리눅스 서버가 생긴 것 같아 신기했습니다. 🤩

Linux terminal command line
Photo by Nemuel Sereti / Pexels

4. 컨테이너의 마법, Docker Desktop 설치 및 연동 🐳

`WSL2` 설치를 마쳤으니, 이제 홈서버의 핵심인 `Docker Desktop`을 설치할 차례였습니다. `Docker Desktop`은 `WSL2` 백엔드를 통해 `Windows`에서 `Linux` 기반 컨테이너를 쉽게 구축하고 실행할 수 있도록 해주는 정말 강력한 도구죠.

`Docker` 공식 웹사이트에서 `Docker Desktop for Windows`를 다운로드하고 설치를 시작했습니다. 설치 과정에서 “Use WSL 2 instead of Hyper-V” 옵션이 선택되어 있는지 꼼꼼히 확인했고, 설치 후 `Docker Desktop` 설정에서 `Resources > WSL Integration` 탭으로 이동하여 `Ubuntu` 배포판과의 통합을 활성화했습니다. 이 모든 과정도 Claude Code가 알아서 다 처리해줘서 저는 그저 지켜보기만 하면 됐습니다.

마지막으로 `Ubuntu` 터미널을 열고 `docker –version`과 `docker run hello-world` 명령을 입력했을 때, “Hello from Docker!” 메시지가 출력되는 것을 보고 정말 뿌듯했습니다. 🎉 이제 복잡한 서버 환경도 컨테이너 단위로 간단하게 관리할 수 있게 된 거죠!

Linux terminal command line
Photo by Nemuel Sereti / Pexels
www, 가상의, 기술의 무료 스톡 사진
Photo by icon0 com / Pexels

5. 마무리: 홈서버 구축의 첫걸음을 떼며 💖

이렇게 SER9 MAX를 시작으로 `Windows 11`에 `WSL2`, 그리고 `Docker`까지 설치하며 나만의 홈서버를 구축하는 첫걸음을 성공적으로 내디뎠습니다. 이 모든 과정에서 ClaudeClaude Code가 마치 유능한 조수처럼 옆에서 정확한 정보와 명령어를 제공하고 실행해줘서 정말 든든했습니다. 저처럼 코드나 컴퓨터에 대해 잘 모르는 사람도 충분히 해낼 수 있다는 것을 느꼈습니다. 🤝

다음 연재에서는 오늘 구축한 환경 위에 `Docker Compose`를 활용하여 다양한 홈서버 서비스를 올리고, 외부에서도 안전하게 접근할 수 있도록 네트워크 설정을 하는 방법에 대해 이야기해볼까 합니다. 기대해주세요! 😉