Jekyll 기반의 GitHub 블로그에서 태그(tag)를 활용하면 각 포스트를 키워드로 분류하고 관련된 글끼리 연결할 수 있습니다.
이 글에서는 /tags/태그명/ 형식의 태그별 아카이브 페이지를 자동으로 생성하는 방법과 그 설정 과정을 단계별로 정리해봅니다.

태그(tag)란?

  • 각 포스트에 자유롭게 여러 개의 키워드를 붙일 수 있음
  • 예: assembly, reverse, blog, tips
  • 하나의 포스트는 여러 태그를 가질 수 있음

GitHub 블로그(Jekyll 기반)에서 tag는 포스트에 주제를 분류하거나 관련 글을 연결하는 데 사용하는 키워드입니다. 태그를 사용하면 독자는 비슷한 주제의 글을 한 번에 모아서 볼 수 있게 됩니다.

1. tags 추가하기

사용하는 방법

포스트의 YAML Front Matter에 다음처럼 작성합니다:

---
title: "어셈블리 함수 분석"
tags: [assembly, reverse, c++]
categories: [assembly]
---

태그와 카테고리의 차이

항목 태그 (tags) 카테고리 (categories)
목적 주제 키워드 글을 묶는 큰 분류
여러 개 가능 보통 1~2개
자유도 자유롭게 작성 가능 보통 사전에 정해둠

tags.md 추가하기

_pages\tags.md 파일 생성하고 아래 코드 추가:

---
title: "tags"
layout: tags
permalink: /tags/
---

image.png

로컬 서버를 작동했을 때, 상단 오른쪽 위에 Home 옆에 Tags 가 생성된 것을 확인할 수 있습니다.

화면에 보이는 sidebar 아래에 검색창은 다음 게시글에서 확인하실 수 있습니다.

여태 post에서 작성했던 tags들을 화면과 같이 확인할 수 있습니다.

저는 기존 minimal-mistakes-jekyll 에서 사용하는 tags 방식 보다 원하는 태그를 클릭해서 해당 태그의 게시글 만 보고 싶어서 커스텀을 진행 했습니다. 다음 내용이 커스텀을 진행한 내용입니다.

2. 태그 목록 페이지 만들기

minimal-mistakes-jekyll 테마에서는 자동으로 태그 페이지를 생성할 수 있도록 설정할 수 있고, 다음처럼 tags 폴더를 만들어 태그별 아카이브를 구성할 수도 있습니다:

/tags/assembly.md 파일 생성하고 아래 코드 추가:

---
title: "assembly"
permalink: /tags/assembly/
tag: assembly
layout: tag
---

하지만 태그가 너무 많다면 하나하나 수동으로 작성하는 것은 매우 하나하나 수동으로 만드는 건 비효율적이고, 힘든 일이 되겠죠. 목차 3. 에서 자동으로 생성하는 방법을 설명합니다.

3. tag 페이지 자동으로 생성하기

_plugins/generate_tags.rb 파일 생성하고 아래 코드 추가:

require 'set'

module Jekyll
  class TagPageGenerator < Generator
    safe true

    def generate(site)
      seen = Set.new
      site.tags.each do |tag, posts|
        next if seen.include?(tag)
        seen.add(tag)

        dir = File.join('tags', Jekyll::Utils.slugify(tag))
        site.pages << TagPage.new(site, site.source, dir, tag)
      end
    end
  end

  class TagPage < Page
    def initialize(site, base, dir, tag)
      @site = site
      @base = base
      @dir  = dir
      @name = 'index.html'

      self.process(@name)
      self.read_yaml(File.join(base, '_layouts'), 'tag_archive.html')
      self.data['tag'] = tag
      self.data['title'] = "Tag: #{tag}"
      self.data['entries_layout'] = 'list'
    end
  end
end

\_layouts\tag_archive.html 파일 생성하고 아래 코드 추가:

---
layout: archive
---
{% assign entries_layout = page.entries_layout | default: 'list' %}
<div class="entries-{{ entries_layout }}">
  {% for post in site.tags[page.tag] %}
    {% include archive-single.html type=entries_layout %}
  {% endfor %}
</div>

\_includes\posts-taxonomy.html 에서 코드 수정:

기존 코드:

<a href="#{{ item[0] | slugify }}">

수정 코드:

<a href="{{ item[0] | slugify }}">

4. Tag 페이지 결과

기존 tags에서 tag 선택 결과 :

image1.png

커스텀 결과 :

image2.png

nasm tag의 사이트가 생성된 이미지 입니다.

기존의 태그 목록 방식도 충분히 유용하지만, 저는 /tags/태그명/처럼 각 태그별로 독립된 페이지가 생성되어 관련 글만 모아볼 수 있는 구조가 훨씬 더 직관적이고 마음에 들었습니다.

Leave a comment