Post

github 블로그 템플릿 생성하기

github 블로그 템플릿 생성하기

지난 포스팅에는 front-matter를 사용하여 포스팅 제목과 날짜, 카테고리 및 태그를 설정하는 방법을 배웠다.
하지만 매번 포스팅할 때마다 이걸 설정하는 것은 귀찮을 수 있다.
이번에는 이런 과정마저도 자동화할 수 있는 bash 스크립트를 폴더 내에 설정해보자.

Template(템플릿) 생성의 자동화

위에서 서술했듯이 템플릿을 매번 만들어서 사용하는 것은 우리같이 귀차니즘을 달고 사는 사람들에게 좋지 않다. 😞
이를 해결할 수 있는 방법이 템플릿인데, 다음과 같이 동일한 내용을 자동으로 포함한다면 한결 편해질 것이다.

1
2
3
4
5
6
---
title: "your title"
date: YYYY-MM-DD
categories: [category 1, category 2]
tags: [tag 1, tag 2]
---

가장 기본적인 방법은 이 구조를 가지고 있는 Template을 만들어 사용할 때마다 복제하는 것이다.
약간 편해졌지만 그럼에도 조금 귀찮다. 글을 쓸 때마다 이걸 복제하고, 제목을 바꾸고, 날짜를 고치는 것은 최종 목적인 편하게 글 쓰기에 부합하지 않는다.
그럼 어떤 방법을 사용할 수 있을까?

Bash를 사용하여 자동화하기

Bash가 뭘까?
Bourne Again Shell 의 줄임말로, 유닉스와 리눅스에서 가장 널리 쓰이는 명령어 해석기다.
ls, cd, git 등의 모든 명령어가 이를 기반으로 작동한다.
매번 긴 명령어를 입력하는 것은 비효율적이기에 alias나 스크립트를 사용하면 짧은 명령어로도 사용이 가능하다.

우리가 사용하는 이 jekyll chirpy 테마에서는 _posts/YYYY-MM-DD-Title.md 형식의 파일이 필요한데, 두 가지 방법을 통해 Bash script를 작성하고 사용해보려고 한다.

첫 번째 방법은 Bash와 alias를 사용하는 것이고, 두 번째 방법은 Bash에 .env와 hook을 사용하는 것이다.
두 방법을 먼저 비교해보자.

Bash + alias
  • alias를 .zshrc(또는 .bashrc)에 직접 등록해서 CLI 명령을 짧게 만드는 방식이다.
  • 개인 로컬 환경에 맞추어 설정가능하며 특정 디렉토리에서만 작동하도록 조건문으로 제한 가능하다.
  • 설정이 간단하고 즉시 사용 가능하지만 여러 PC나 협업 환경에선 각자 shell 설정을 해놓아야한다는 단점이 존재한다. (물론 우리는 괜찮을 것이다)
Bash + .env + hook
  • 프로젝트 루트에 .env 파일을 두고, 해당 디렉토리에 들어오면 자동으로 alias가 활성화되게 만드는 방식이다.
  • 프로젝트 기반이기 때문에 Git으로 공유가 가능하여 모든 환경에서 공통으로 사용 가능하다는 장점이 있지만 초기 설정이 더 복잡하다.

결국 정리하면 다음 표와 같다

항목방법 1: Bash + alias방법 2: Bash + .env + hook
설정 위치.zshrc.env (프로젝트) + .zshrc
설정 범위사용자의 PC (전역 또는 조건부)프로젝트 디렉토리 전용
공유 가능성❌ - 개인 설정✅ - Git으로 공유 가능
유지 보수간단하지만 로컬 한정초기 설정만 하면 협업에 이상적

방법 1. Bash + alias

alias는 직역하자면 별명인데, 명령어에서는 다음과 같은 맥락으로 쓰인다.

긴 명령어를 짧은 별명(alias)으로 만들어 자주 쓰는 명령을 간편하게 실행

예를 들어, 원래라면 bundle exec jekyll s -l 이라고 입력해야 로컬 서버를 열어 테스트 가능했던 것을 jserver를 입력하는 것만으로 작동하게 만든다면 그것을 alias라고 할 수 있다.

step 1 create_post.sh file

  • 당연하지만 가장 먼저 템플릿을 생성하는 파일을 만들어야 한다. 제목과 날짜(이건 옵션)를 받아서 블로그가 요구하는 형태로 생성한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/bin/bash

# 1. 제목 인자 받기
title="$1"
custom_date="$2"  # 선택적 인자

if [ -z "$title" ]; then
  echo "❌ 제목을 입력해주세요. 예: newpost \"제목\" [YYYY-MM-DD]"
  exit 1
fi

# 2. 제목을 slug 형태로 변환 (공백 → 하이픈, 소문자)
slug=$(echo "$title" | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')

# 3. 날짜 및 시간 설정
if [ -n "$custom_date" ]; then
  date="$custom_date"
  # custom_date가 유효한지 검사 (간단한 형식만 체크)
  if ! [[ "$date" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
    echo "❌ 날짜 형식이 올바르지 않습니다. 예: 2025-09-11"
    exit 1
  fi
  datetime="$date 00:00:00 +0900"
else
  date=$(date +"%Y-%m-%d")
  datetime=$(date +"%Y-%m-%d %H:%M:%S %z")
fi

# 4. 파일 경로 지정
filename="_posts/${date}-${slug}.md"

# 5. 파일 생성
mkdir -p _posts

cat <<EOF > "$filename"
---
title: "$title"
date: $datetime
categories: [Blog]
tags: [template]
---

EOF

echo "✅ Created: $filename"

사용하는 방법은 다음과 같다

1
2
~/Desktop/github/ktw-dev.github.io | main > bash tools/create_post.sh "예시 제목"
✅ Created: _posts/2025-02-28-예시-제목.md

OR

1
2
~/Desktop/github/ktw-dev.github.io | main > bash tools/create_post.sh "예시 제목" 2024-02-22
✅ Created: _posts/2024-02-22-예시-제목.md

step 2
~/.zshrc 혹은 ~/.bashrc에 alias를 등록한다. 필자는 vim을 사용하여 zshrc에 등록했다.

1
alias <별명>='bash <블로그 절대경로>/tools/create_post.sh'

특정한 폴더에서만 사용할 수 있게 조건부를 등록할 수도 있다

1
2
3
if [[ "$PWD" == *"<블로그 폴더 이름>"* ]]; then
  alias <별명>='bash tools/create_post.sh'
fi

이후 source ~/.zshrc 혹은 source ~/.bashrc를 사용하여 설정을 적용한다.

step 3
필자는 newpost <제목> 을 입력하면 포스트를 생성하도록 만들었다. 실제로 사용해본 결과는 다음과 같다.

  • 다른 폴더에서는 작동하지 않는 모습 확인 area-validation

  • 제목을 입력하지 않았을 때 발생하는 경고문 title-validation

  • 템플릿 생성 성공 및 그 결과 newpost-success newpost-result

이렇게

방법 2. Bash + .env + hook

This post is licensed under CC BY 4.0 by the author.

Trending Tags