월 0원으로 개인 블로그 만들기 — Astro + Cloudflare Pages 구축기


개인 사이트를 하나 만들었다. 정보글을 정리해 두는 용도다.

처음엔 국내 웹호스팅을 결제하려 했다. 월 5천 원에서 1만 원 정도, 워드프레스를 올리면 되는 흔한 방식이다. 그런데 알아볼수록 지금 내가 만들려는 것에는 과한 선택이라는 결론이 나왔다.

결국 이렇게 됐다.

항목 비용
도메인 (.com, 1년) 약 2만 원
호스팅 0원
SSL 인증서 0원
도메인 메일 수신 0원
월 고정비 0원

이 글의 대상

터미널(검은 화면에 명령어를 치는 창)에서 몇 줄 입력하는 게 부담스럽지 않은 사람을 대상으로 한다. Git을 써본 적이 없어도 되지만, 검은 화면 자체가 싫다면 국내 유료 호스팅 + 워드프레스가 낫다. 월 5천 원 정도로 훨씬 편하게 시작할 수 있고, 그게 나쁜 선택도 아니다.

그리고 이 글은 “이렇게 하면 됩니다” 식의 단계 나열이 아니다. 그건 이미 인터넷에 많다. 대신 공식 안내대로 따라갔는데 막히는 지점에 비중을 뒀다. 실제로 시간을 잡아먹은 건 거기였다.

미리 필요한 것

구분 항목 비용
계정 도메인 등록업체 (가비아, 후이즈 등) 도메인 값
계정 Cloudflare 무료
계정 GitHub 무료
프로그램 Node.js 무료
프로그램 Git 무료

프로그램 두 개가 깔려 있는지는 터미널에서 이렇게 확인한다.

node -v
git --version

버전 번호가 나오면 있는 것이고, 에러가 나면 각각 공식 사이트에서 설치하면 된다. 5분씩 걸린다.

왜 이 조합인가

핵심은 정적 사이트라는 개념이다.

일반적인 블로그(워드프레스 등)는 방문자가 접속할 때마다 서버가 데이터베이스를 뒤져서 화면을 그 자리에서 조립한다. 그래서 서버가 계속 켜져 있어야 하고, 그 임대료를 매달 낸다.

정적 사이트는 반대다. 화면을 미리 다 만들어 놓고, 방문자에게는 완성된 파일만 건넨다. 서버가 일할 게 없으니 무료 서비스로 감당이 된다.

동적 사이트 (워드프레스 등) 정적 사이트
화면 생성 접속할 때마다 실시간 미리 전부
서버 계속 가동 필요 불필요
데이터베이스 필요 없음 (글이 곧 파일)
보안 관리 플러그인·PHP 계속 업데이트 털릴 DB가 없음
월 비용 5,000~10,000원 0원

정보글 아카이브에는 로그인도, 결제도, 실시간 게시판도 필요 없다. 데이터베이스가 필요한 이유가 없으면 정적 사이트가 거의 모든 면에서 낫다.

구성요소가 각각 무엇을 하는가

처음 알아볼 때 가장 헷갈렸던 부분이다. 이름이 여러 개 나오는데 뭐가 뭘 하는지 감이 안 왔다.

도메인 등록업체

example.com 같은 주소가 내 것이라는 등기만 담당한다. 부동산으로 치면 등기소다. 건물을 지어주지는 않는다. 연 1회 갱신비를 내고, 만료되면 주소를 잃는다.

Cloudflare

가장 많은 일을 한다. 네 가지다.

  • DNS — 주소를 친 사람을 실제 서버로 안내한다. 전화번호부 역할
  • Pages — 완성된 파일을 보관하고 방문자에게 전송한다. 건물 역할
  • SSL 인증서 — 주소창의 자물쇠 표시. 자동으로 발급되고 갱신된다
  • CDN + 보안 — 전 세계 서버에 복제해 빠르게 전달하고, 공격을 막는다

원래 SSL 인증서는 따로 사야 하는 물건인데 여기서 자동으로 처리된다. 이게 무료로 된다는 게 이 구성의 핵심이다.

GitHub

소스 파일의 원본 창고다. 언제 무엇을 고쳤는지 이력이 전부 남아서, 잘못 고쳤으면 되돌릴 수 있다. 그리고 Cloudflare가 이곳을 지켜보다가, 파일이 바뀌면 자동으로 사이트에 반영한다.

예전처럼 FTP 프로그램으로 파일을 하나씩 올릴 필요가 없어지는 게 여기서 나온다.

Astro

마크다운(.md) 파일을 완성된 웹페이지로 구워내는 도구다. 마크다운은 # 제목 처럼 기호 몇 개로 서식을 표현하는 텍스트 형식이라, 메모장으로도 쓸 수 있다.

가입해서 쓰는 웹사이트가 아니라 내 컴퓨터에 설치하는 프로그램이다. 한글(HWP) 프로그램과 같은 위치라고 보면 된다. 도구일 뿐이다.

Git과 Node.js

  • Git — 파일 변경 이력을 기록하는 프로그램. GitHub과 이름이 비슷하지만 다른 것이다. Git은 내 컴퓨터에서 돌고, GitHub은 그 기록을 인터넷에 보관해주는 서비스
  • Node.js — Astro가 돌아가기 위한 엔진. 직접 만질 일은 거의 없다. 함께 깔리는 npm은 필요한 부품을 받아오는 도구다

전체 순서

1. 도메인 등록
2. Cloudflare에 도메인 연결 (네임서버 교체)
3. Node.js / Git 확인
4. Astro 프로젝트 생성
5. GitHub에 업로드
6. Cloudflare Pages 배포
7. 내 도메인 연결 + SSL

실작업은 두 시간 정도였다. 다만 중간에 대기 시간이 끼어서 실제로는 반나절쯤 걸렸다.

순서에서 하나 권하고 싶은 게 있다. 2번을 가장 먼저 걸어두는 게 좋다. 네임서버(어느 회사가 이 주소를 관리하는지 알려주는 설정)를 바꾸면 전 세계에 퍼지는 데 몇 시간이 걸리는데, 그동안 3~5번을 진행하면 시간이 겹친다. 반대로 하면 다 만들어 놓고 하루를 그냥 기다려야 한다.

막히는 지점들

여기서부터가 이 글의 본론이다.

1. PowerShell이 npm을 막는다

Windows에서 Astro를 설치하려고 npm create astro@latest를 치면 이런 게 뜬다.

npm : 이 시스템에서 스크립트를 실행할 수 없으므로 npm.ps1 파일을 로드할 수 없습니다.
FullyQualifiedErrorId : UnauthorizedAccess

node -v는 잘 되는데 npm만 막힌다. node는 실행 파일이고 npm은 스크립트 파일이라서 그렇다. Windows가 기본적으로 스크립트 실행을 전부 차단해 둔다.

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

한 번만 치면 된다. RemoteSigned내가 만든 스크립트는 실행하되, 외부에서 받은 서명 없는 것은 여전히 차단하는 설정이라 보안을 끄는 게 아니다. 개발자들이 표준으로 쓰는 값이고, -Scope CurrentUser라 관리자 권한도 필요 없다.

성공하면 아무 메시지도 안 나온다. 조용하면 된 것이다.

2. Git이 “당신이 누구냐”고 묻는다

첫 커밋(변경 내용을 기록으로 남기는 작업)에서 막힌다.

*** Please tell me who you are.
fatal: unable to auto-detect email address

Git은 기록마다 작성자를 남기는데, 처음 쓰는 컴퓨터에는 그 정보가 없다. 두 줄로 끝난다.

git config --global user.email "본인이메일"
git config --global user.name "본인 이름"

여기 적은 이메일은 기록에 남는다. 저장소를 나중에 공개로 전환하면 외부에 보이니, 신경 쓰인다면 GitHub이 제공하는 noreply 주소를 쓰면 된다.

3. GitHub 저장소를 빈 상태로 만들어야 한다

저장소를 만들 때 이 세 개가 체크돼 있으면 안 된다.

  • Add a README file
  • Add .gitignore
  • Choose a license

Astro가 프로젝트를 만들면서 이미 내 컴퓨터에 Git 저장소를 초기화해 둔다. GitHub 쪽에도 파일이 있으면 서로 다른 역사를 가진 저장소 둘이 되어 업로드가 거부된다.

이미 만들어 버렸다면 저장소를 지우고 다시 만드는 게 빠르다.

4. Cloudflare에서 Pages 입구가 숨어 있다

이게 제일 오래 걸렸다.

Cloudflare가 Pages를 Workers라는 다른 서비스로 통합하는 중이라, 예전 안내 문서에 나오는 “Pages 탭”이 없다. 대시보드에서 애플리케이션 생성을 누르면 카드가 몇 개 뜨는데, 거기 있는 Continue with GitHub를 누르면 Pages가 아니라 Worker 생성으로 빠진다.

나는 여기서 쓸모없는 “Hello World” 프로젝트를 하나 만들 뻔했다.

진짜 입구는 그 카드들 맨 아래, 회색 작은 글씨에 있다.

Pages를 배포하려고 하십니까? [시작]

이 링크를 눌러야 기존 Git 리포지토리 가져오기 화면이 나온다. 눈에 안 띄게 배치돼 있어서 그냥 보면 지나친다.

같은 화면의 **“파일 끌어서 놓기”**도 피하는 게 좋다. 그걸로 하면 자동 반영이 안 걸려서 글 쓸 때마다 폴더를 수동으로 올려야 한다. 이 구성의 장점이 통째로 사라진다.

5. DNS 레코드 경고는 무시해야 한다

Cloudflare에 도메인을 추가하면 이런 경고가 뜬다.

  • 메일을 받으려면 MX 레코드를 추가하십시오
  • www 서브도메인이 해석되려면 레코드가 필요합니다
  • 루트 도메인을 가리키는 레코드가 필요합니다

전부 무시해야 한다. 아직 사이트를 안 만들었으니 가리킬 곳이 없는 게 당연하다.

여기서 친절하게 레코드(어느 주소를 어디로 연결할지 적어두는 항목)를 직접 만들어 두면, 나중에 Pages를 연결할 때 Cloudflare가 자동으로 만드는 레코드와 충돌한다. 비워두는 게 맞다.

“DNS 레코드가 없으면 활성화할 수 없습니다”라는 팝업도 뜨는데, 이것도 그냥 확인하고 넘어가면 된다. 기존 사이트를 이전해 오는 사람을 가정한 문구다.

그 밖에 걸리기 쉬운 것

  • 빌드 설정에서 프레임워크 프리셋을 반드시 고를 것. 미리 정해진 설정 묶음인데, Astro를 고르면 나머지 항목이 자동으로 채워진다. None으로 두면 배포가 실패한다
  • GitHub 권한은 저장소 하나만 주자. 기본값이 All repositories인데, 현재는 물론 앞으로 만들 모든 저장소에까지 읽기·쓰기 권한을 주는 것이다. Only select repositories로 바꾸면 된다
  • www도 따로 등록해야 한다. 루트 도메인만 연결하면 www.를 붙여 친 사람은 사이트를 못 연다. 습관적으로 붙이는 사람이 많다

완성 후 운영 방식

이 구성의 진짜 이점은 여기서 나온다.

파일 수정 → git push → Cloudflare 자동 감지 → 1~2분 후 사이트 반영

글을 쓴다는 건 마크다운 파일 하나를 폴더에 추가하는 것이다. 그리고 명령어 세 줄을 치면 끝난다.

git add -A
git commit -m "무엇을 했는지 설명"
git push

관리자 화면에 로그인할 일도, FTP를 열 일도 없다.

그리고 내 컴퓨터와 사이트는 완전히 별개다.

처음에 헷갈렸던 부분인데, 미리보기 서버(npm run dev)를 끄면 사이트가 내려가는 줄 알았다. 아니다. 그건 내 컴퓨터에서만 보이는 미리보기고, 실제 사이트는 Cloudflare 서버에서 돈다. 컴퓨터를 꺼도, 인터넷을 끊어도, 컴퓨터가 고장나도 사이트는 계속 열린다.

“서버를 켜둔다”는 개념 자체가 없다. 글을 쓸 때만 잠깐 도구를 열고, 그 외에는 아무것도 안 켜둬도 된다.

덤으로 컴퓨터를 바꿔도 부담이 없다. 원본이 GitHub에 있으니 새 컴퓨터에서 내려받아 npm install 한 번 돌리면 그대로 이어서 작업할 수 있다.

이 방식이 안 맞는 경우

장점만 적으면 균형이 안 맞으니 한계도 적는다.

회원 기능이 필요하면 안 된다. 로그인, 회원 전용 게시판, 실시간 댓글 저장 같은 건 서버와 데이터베이스가 있어야 한다. 정적 사이트로는 안 된다.

댓글과 사이트 내 검색은 별도 작업이 필요하다. 워드프레스처럼 켜면 되는 게 아니라 외부 서비스를 붙여야 한다. 개인 아카이브에는 감당할 만한 수준이지만, “그냥 되는 것”은 아니다.

터미널과 Git을 써야 한다. 이게 가장 큰 진입 장벽이다. 명령어 대여섯 개면 되고 대부분 복사해서 붙여넣는 수준이지만, 검은 화면 자체가 부담이면 국내 유료 호스팅이 낫다.

관리 화면이 전부 영어다. Cloudflare는 한국어 설정이 있지만 DNS, CNAME 같은 기술 용어는 그대로고, GitHub은 영어다. 한국어 전화 상담이 필요하면 이 길은 맞지 않는다.

글을 쓸 때마다 반영에 1~2분이 걸린다. “발행” 버튼 하나가 아니라 “명령어 치고 잠깐 대기”다. 익숙해지면 아무것도 아니지만 처음엔 어색하다.

정리

정보글을 쌓아두는 개인 사이트라면, 데이터베이스가 필요 없는데 데이터베이스 딸린 호스팅을 사는 건 과지출이다. 매달 내는 돈뿐 아니라 플러그인 업데이트, 보안 패치, 백업 같은 관리 부담이 계속 따라온다.

터미널에 명령어 몇 줄 치는 게 부담스럽지 않다면, 반나절 투자로 월 고정비 0원 + 관리 부담 거의 0인 구조를 만들 수 있다.

가장 많이 막히는 건 기술 자체가 아니라 화면이 안내와 달라서다. Cloudflare Pages 입구가 그 대표적인 예다. 그런 지점만 미리 알고 들어가면 생각보다 수월하다.