GitHub Pages 404 에러 해결기: Jekyll 플러그인 누락 문제
GitHub Pages 404 에러 해결기: Jekyll 플러그인 누락 문제
문제 상황
오늘 블로그에 새로운 글들을 작성하고 푸시했는데, 이상하게도 모든 블로그 포스트에서 404 에러가 발생했습니다.
1
2
3
https://parklabo.github.io/posts/docker-series-01-what-is-docker/
https://parklabo.github.io/posts/github-series-01-getting-started/
https://parklabo.github.io/posts/chrome-extension-development-guide/
위 URL들에 접속하면 모두 “404 - File not found” 페이지가 표시되었습니다.
더 이상한 점은:
- 로컬에서
bundle exec jekyll serve로 실행하면 정상적으로 작동 - GitHub에 파일도 모두 푸시되어 있음
- GitHub Actions도 “성공”으로 표시됨
문제 분석 과정
1. 첫 번째 의심: 파일이 푸시되지 않았나?
1
2
3
4
5
$ git status
# 모든 파일이 푸시됨 확인
$ git log --oneline
# 커밋 이력도 정상
파일은 모두 정상적으로 GitHub에 올라가 있었습니다.
2. 두 번째 의심: Jekyll 설정 문제?
_config.yml 확인:
1
2
3
4
url: "https://parklabo.github.io"
baseurl: "" # 비어있음 - 정상
theme: jekyll-theme-chirpy
future: true # 미래 날짜 포스트도 빌드 - 정상
설정도 문제없어 보였습니다.
3. 진짜 원인 발견: GitHub Actions 로그
겉보기엔 “성공”으로 표시되었지만, 자세히 보니 Build site 단계에서 에러가 있었습니다!
1
2
3
Dependency Error: Yikes! It looks like you don't have jekyll-feed
or one of its dependencies installed. In order to use Jekyll as
currently configured, you'll need to install this gem.
원인 분석
문제의 원인을 그림으로 표현하면:
graph TD
A[_config.yml] -->|plugins 선언| B[jekyll-feed<br/>jekyll-seo-tag<br/>jekyll-sitemap 등]
C[Gemfile] -->|플러그인 없음| D[❌ 빌드 실패]
B --> D
D --> E[404 에러 발생]
style D fill:#ff6b6b,stroke:#c92a2a
style E fill:#ff6b6b,stroke:#c92a2a
로컬 vs GitHub Actions 차이
| 환경 | 상황 | 결과 |
|---|---|---|
| 로컬 | 이전에 설치한 gem들이 캐시되어 있음 | ✅ 정상 작동 |
| GitHub Actions | Gemfile 기준으로 새로 설치 | ❌ 필요한 gem 없어서 실패 |
해결 방법
1단계: Gemfile에 누락된 플러그인 추가
1
2
3
4
5
6
7
8
9
10
11
12
# Gemfile
source "https://rubygems.org"
gem "jekyll", "~> 4.3"
gem "jekyll-theme-chirpy", "~> 7.3"
# Jekyll plugins - 이 부분이 누락되어 있었음!
gem "jekyll-feed", "~> 0.12"
gem "jekyll-seo-tag", "~> 2.8"
gem "jekyll-sitemap", "~> 1.4"
gem "jekyll-paginate", "~> 1.1"
gem "jekyll-archives", "~> 2.2"
2단계: bundle install 실행
1
2
$ bundle install
# Gemfile.lock이 업데이트됨
3단계: 변경사항 커밋 & 푸시
1
2
3
$ git add Gemfile Gemfile.lock
$ git commit -m "fix: Add missing Jekyll plugins to Gemfile"
$ git push origin main
추가로 수정한 사항
404 에러를 해결하는 과정에서 추가로 발견한 문제들:
- 404.html 위치 문제
- 기존:
/assets/404.html - 수정:
/404.html(루트 디렉토리) - GitHub Pages는 404 페이지를 루트에서 찾습니다
- 기존:
- _config.yml plugins 섹션 추가 ```yaml
_config.yml
plugins:
- jekyll-feed
- jekyll-seo-tag
- jekyll-sitemap
- jekyll-paginate
- jekyll-archives ```
교훈과 팁
1. GitHub Actions “성공” 표시를 믿지 마세요
graph LR
A[Actions 성공 ✅] -->|하지만| B[내부 단계 실패 가능]
B --> C[로그 상세 확인 필요!]
style B fill:#ffe066,stroke:#f59f00
2. 로컬과 CI/CD 환경의 차이 인지
로컬에서 잘 돌아간다고 안심하면 안 됩니다. CI/CD 환경은:
- 매번 깨끗한 환경에서 시작
- Gemfile/package.json 등에 명시된 의존성만 설치
- 캐시나 전역 설치된 패키지 없음
3. 디버깅 체크리스트
Jekyll + GitHub Pages 404 에러 발생 시:
- 파일이 실제로 푸시되었는지 확인
_config.yml설정 확인 (url, baseurl)- GitHub Actions 빌드 로그 상세 확인
- Gemfile에 필요한 플러그인이 모두 있는지 확인
- 404.html이 루트 디렉토리에 있는지 확인
- 브라우저 캐시 클리어 후 재시도
결론
“빌드 성공”이라는 초록색 체크 표시만 보고 안심하지 말고, 실제 로그를 확인하는 습관을 가져야 합니다. 특히 Jekyll 같은 정적 사이트 생성기는 플러그인 의존성 문제가 자주 발생하므로, _config.yml에 선언한 플러그인은 반드시 Gemfile에도 추가해야 합니다.
이번 경험을 통해 “왜 로컬에선 되는데 배포하면 안 돼요?”라는 고전적인 문제의 한 가지 패턴을 해결할 수 있었습니다.
혹시 비슷한 문제를 겪고 계신 분들께 도움이 되길 바랍니다! 🚀
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.