포스트

GitHub Pages와 Cloudflare Pages를 활용한 포트폴리오·아카이브 이원화 구축기

대외 공개용 포트폴리오와 개인용 메인 아카이브를 분리하기 위해 레포지토리를 이원화하고 Cloudflare Pages로 배포한 과정을 정리합니다.

한 줄 요약: 공개용 블로그(calcif2r.github.io)와 비공개 메인 아카이브(naru-archive)를 레포지토리 단위로 분리하고 Cloudflare Pages 자동 배포 파이프라인을 구축했습니다.


1. 학습 배경 및 목표 (Background & Goal)

  • 학습 주제: 정적 사이트(Jekyll) 레포지토리 이원화 및 서버리스 자동 배포
  • 관련 기술 / 환경: Jekyll (Chirpy 테마), GitHub Pages, Cloudflare Pages, HTML-Proofer
  • 핵심 목표: 대외 공개용 포트폴리오와 개인 비공개 아카이브를 물리적으로 분리하여 보안과 관리 효율성 확보

2. 핵심 개념 및 아키텍처 정리 (Key Concepts)

① 레포지토리 이원화 구조

  • Public (calcif2r.github.io): 대외 커리어 포트폴리오 및 공개 가능한 학습·사이드 프로젝트 기록용
  • Private (naru-archive): 전체 포스트 및 비공개 문서를 보관하는 메인 아카이브 (Cloudflare Pages 연동)

② 컬렉션 기반 완전 분리

  • 기존 categories/tags 분류 대신 _config.yml의 전용 컬렉션(_portfolio, _sideproject, _study, _secret)으로 콘텐츠를 완전히 분리하여 관리

3. 실습 및 트러블슈팅 로그 (Troubleshooting)

발생한 문제 (Issue)원인 분석 (Root Cause)해결 방법 (Solution)
이메일 링크 클릭 시 mailto: 강제 실행 및 htmlproofer 해시 검증 실패Chirpy 테마 JS의 mailto 난독화 및 빌드 시 #copy-email 타겟 ID 부재_data/contact.yml에 copy-email 커스텀 타입을 정의하고 모달 컨테이너에 id="copy-email" 부여
Cloudflare Pages 빌드 시 Bundler::GemNotFound (html-proofer) 오류클라우드플레어 기본 환경 변수 BUNDLE_WITHOUT="development test"로 테스트 Gem 설치 누락빌드 명령을 bundle install && bundle exec jekyll build로 변경하여 전체 의존성 설치 후 빌드

4. 회고 및 인사이트 (Takeaways)

  • 무료 호스팅 환경에서도 GitHub Private 레포지토리와 Cloudflare Pages를 조합하면 데이터 주권과 보안을 유지하면서 실시간 자동 배포(CI/CD) 환경을 구축할 수 있습니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.