Jekyll categories를 사용하지 않은 이유
지킬에 기본 categories로도 충분히 카테고리 구현이 가능하지만 카테고리 페이지를 별도 페이지로 분리하고 싶었고, 관리 편의성을 위해 커스텀 키 방식으로 구현했습니다.
category라고 하지 않은 이유는 지킬 기본 categories랑 헷갈릴 수도 있고 년, 월, 일 구분하려다 보니 아카이브란 이름이 더 잘 어울릴 것 같았습니다.
Archive 구조 설명
제가 구현한 구조를 기준으로 설명합니다.
_archives/
dev.md
lattecollection.md
_layouts/
archive.html
_includes/
archive-content.html
_posts/
dev/
2026-05-10-jekyll-archive.md
_archives 폴더에 아카이브이름.md로 파일을 생성합니다. 파일 내용으로는 title과 archive_key를 작성하는데, title은 페이지에 표시될 아카이브 이름이고, archive_key는 포스트 frontmatter의 archive 값과 매칭되는 식별자입니다.
레이아웃(archive.html)에서 이 archive_key를 기준으로 전체 포스트를 필터링하고, archive-content.html이 실제 목록을 렌더링합니다.
config 설정
archives라는 컬렉션을 출력하기 위해서 _config.yml에 설정을 해줄 필요가 있습니다.
collections:
archives:
output: true
defaults:
- scope:
type: archives
values:
layout: archive
permalink: /:collection/:name
collections -> archives -> output:true 부분은 archives라는 폴더를 컬렉션으로 렌더링하겠다는 설정입니다.
defaults는 컬렉션에 적용될 설정을 지정할 수 있으며 scope로 어느 컬렉션인지 지정하고 values에 적용할 설정을 작성합니다. layout: archive는 해당 컬렉션에 아카이브 레이아웃을 적용하겠다는 의미이고, permalink는 렌더링된 페이지의 링크를 설정합니다.
이 설정 덕분에 _archives/dev.md가 /archives/dev/ URL로 자동 생성됩니다.
작동 흐름 및 필터링
archives폴더에 dev.md(title:개발, archive_key: dev) 생성- dev.md는 config 설정에 따라
layout:archive가 적용됨 - archive.html에서
archive_key로 포스트를 필터링해서archive-content.html에 넘겨줌 - archive-content.html에서 dev 아카이브에 속한 포스트를 렌더링해줌
archive.html에서 where 필터로 포스트를 필터링합니다.
{% assign archive_posts = site.posts | where: "archive", page.archive_key %}
{% include archive-content.html posts=archive_posts %}
site.posts 전체에서 archive 값이 현재 페이지의 archive_key와 일치하는 포스트만 골라냅니다. dev 아카이브 페이지라면 archive: dev인 포스트만 추려지는 방식입니다.