[Astro] GitHub Pages 배포

2026-04-03 hit count image

Astro 블로그를 GitHub Pages에 배포하는 방법을 공유합니다. gh-pages 패키지 설정, 커스텀 도메인, .nojekyll 파일, 빌드 파이프라인 등을 다룹니다.

astro

개요

이전 글 레이아웃과 컴포넌트 아키텍처에서 블로그의 구조를 다루었습니다. 이번 글에서는 완성된 블로그를 GitHub Pages에 배포하는 과정을 설명합니다.

Jekyll은 코드를 push하면 GitHub 서버에서 자동으로 빌드/배포해줬지만, Astro는 로컬에서 빌드한 결과물을 직접 배포해야 합니다. 한 단계가 추가되는 셈이지만, 그 대신 빌드 환경을 완전히 제어할 수 있고 모든 플러그인을 자유롭게 사용할 수 있다는 장점이 있습니다.

빌드 파이프라인 이해하기

배포 전에 빌드 과정이 어떻게 진행되는지 이해하면 좋습니다. npm run deploy 한 줄을 실행하면 내부적으로 여러 단계가 자동으로 연쇄 실행됩니다.

npm run deploy

1. predeploy: npm run share:sync

2. preshare:sync: npm run build

3. build: astro build && npx pagefind --site dist

4. share:sync: node scripts/share.mjs sync

5. deploy: gh-pages -d dist -r ...

이 흐름은 npmpre 스크립트 기능을 활용한 것입니다. deploy를 실행하면 자동으로 predeploy가 먼저 실행되고, share:sync를 실행하면 자동으로 preshare:sync가 먼저 실행되는 식입니다. 덕분에 npm run deploy 한 줄만으로 빌드 → 검색 인덱스 생성 → 공유 동기화 → 배포까지 모든 과정이 자동으로 이어집니다.

각 단계 설명

각 단계의 역할을 정리하면 다음과 같습니다.

단계스크립트역할
1astro buildAstro 프로젝트를 정적 HTML/CSS/JS로 빌드하여 dist/ 디렉토리 생성
2npx pagefind --site dist빌드된 HTML에서 검색 인덱스 생성
3share:syncRSS 피드 기반으로 소셜 공유 상태 동기화
4gh-pages -d distdist/ 디렉토리를 GitHub Pages에 배포

gh-pages로 배포하기

설치

gh-pages는 빌드된 정적 파일을 GitHub Pages 브랜치(gh-pages)에 자동으로 push해주는 패키지입니다. 빌드 시에만 사용하므로 개발 의존성으로 설치합니다.

npm install -D gh-pages

배포 스크립트

package.json에 다음과 같이 배포 스크립트를 설정합니다.

{
  "scripts": {
    "deploy": "gh-pages -d dist -r [email protected]:posstree/deku.posstree.com.git -t"
  }
}

옵션 설명

각 옵션의 의미는 다음과 같습니다.

옵션설명
-d distdist배포할 디렉토리. Astro의 빌드 출력 디렉토리
-rgit@personal:...배포 대상 원격 저장소. SSH 키 별칭(personal)을 사용
-t-숨김 파일(.nojekyll 등)도 포함하여 배포

특히 -t 옵션이 중요합니다. 이 옵션이 없으면 .nojekyll 같은 점(.)으로 시작하는 파일이 배포에 포함되지 않아 사이트가 정상 동작하지 않습니다.

배포 실행

설정이 끝나면 다음 명령어 한 줄로 빌드부터 배포까지 모든 과정이 자동으로 실행됩니다.

npm run deploy

커스텀 도메인 설정

CNAME 파일

GitHub Pages에서 username.github.io 대신 커스텀 도메인을 사용하려면 CNAME 파일이 필요합니다. public/CNAME 파일에 사용할 도메인을 한 줄로 기록합니다.

deku.posstree.com

public/ 디렉토리의 파일은 빌드 시 dist/ 디렉토리로 그대로 복사되므로, 별도의 설정 없이 배포 시 자동으로 포함됩니다.

DNS 설정

도메인 관리자(예: Cloudflare, Route53)에서 CNAME 레코드를 설정하여 커스텀 도메인이 GitHub Pages를 가리키도록 합니다.

CNAME  deku.posstree.com  →  username.github.io

.nojekyll 파일의 역할

GitHub Pages에서 Astro를 사용할 때 반드시 알아야 할 파일입니다.

public/.nojekyll

GitHub Pages는 기본적으로 업로드된 파일을 Jekyll로 처리합니다. 그런데 Astro로 빌드하면 _astro/라는 디렉토리가 생기는데, Jekyll_로 시작하는 디렉토리를 무시합니다. 결과적으로 CSS와 JavaScript 파일이 로드되지 않아 사이트가 깨져 보입니다.

.nojekyll 파일을 루트에 배치하면 GitHub PagesJekyll 처리를 건너뛰고, 업로드된 파일을 그대로 서빙합니다. 빈 파일이지만 없으면 사이트가 정상 동작하지 않으므로 꼭 포함해야 합니다.

Jekyll 배포와의 비교

Jekyll에서 Astro로 옮기면서 배포 방식이 어떻게 달라졌는지 비교합니다.

항목JekyllAstro
빌드 위치GitHub Pages 서버에서 빌드로컬에서 빌드 후 결과물 배포
빌드 시간~209초 (서버)~30초 (로컬)
플러그인 제한GitHub Pages가 허용하는 플러그인만 사용모든 플러그인 자유롭게 사용
빌드 제어GitHub에 의존로컬에서 완전 제어
.nojekyll불필요필수
배포 도구git push만으로 자동 배포gh-pages 패키지 사용

Jekyllgit push만 하면 되니 초기에는 편했지만, 빌드 환경을 제어할 수 없어 사용할 수 있는 플러그인이 제한적이었습니다. Astro는 로컬 빌드라는 한 단계가 추가되지만, 커스텀 rehype 플러그인이나 Sharp 이미지 변환 같은 고급 기능을 자유롭게 사용할 수 있게 되었습니다.

이전 Jekyll 배포 방법에 대해서는 GitHub Pages 배포 포스트를 참고하세요.

완료

이번 글에서는 Astro 블로그를 GitHub Pages에 배포하는 방법을 살펴보았습니다.

  • npmpre 스크립트를 활용한 자동화된 빌드 파이프라인 (빌드 → 검색 인덱스 → 공유 동기화 → 배포)
  • gh-pages 패키지로 간편한 배포 (-t 옵션으로 숨김 파일 포함)
  • public/CNAME으로 커스텀 도메인 설정
  • .nojekyll 파일로 Jekyll 처리 비활성화 (_astro/ 디렉토리 무시 방지)

다음 글 소셜 공유 자동화 스크립트에서는 배포 시 SNS에 자동으로 포스트를 공유하는 스크립트를 다룹니다.

시리즈 안내

이 포스트는 Jekyll에서 Astro로 마이그레이션 시리즈의 일부입니다.

  1. Jekyll에서 Astro로 마이그레이션한 이유
  2. Astro 설치 및 프로젝트 구성
  3. Content Collections와 마크다운 마이그레이션
  4. 다국어(i18n) 구현
  5. SEO 구현
  6. 이미지 최적화 — 커스텀 rehype 플러그인
  7. 댓글 시스템 (Utterances)
  8. 광고 연동 (Google AdSense)
  9. Pagefind를 이용한 검색 구현
  10. 레이아웃과 컴포넌트 아키텍처
  11. GitHub Pages 배포
  12. 소셜 공유 자동화 스크립트
  13. 트러블슈팅과 팁

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

블로그를 운영하면서 좋은 기회가 생겨 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.



SHARE
Twitter Facebook RSS