Hugo 포스트 생성 방법

여기에서는 Hugo에서 신규 포스트를 생성하는 방법에 대해서 설명한다.

새 포스트 파일 생성

Hugo에서 게시하는 웹 사이트 포스트는 content 디렉터리에 Markdown 파일로 만든다(예: sample.md). 포스트 파일은 비어있는 텍스트 파일에서 만들 수 있지만 hugo new 명령을 사용하여 포스트 형태 파일(archetypes/default.md)을 기반으로 Markdown 파일을 자동으로 생성할 수 있다.

포스트 파일(Markdown 파일) 만들기

% hugo new sample.md
Content "/Users/user/my-site/content/sample.md" created

위와 같이 실행하면 content디렉터리에 sample.md 파일이 생성된다. 작성된 파일의 앞 부분에는, 아래와 같은 머리말(Front matter) 라고 하는 헤더가 작성되어 있다. 이 헤더가 archetypes/default.md에 기반으로 자동 생성된 것이다.

content/sample.md

---
title: "Sample"
date: 2023-05-05T23:50:09+09:00
draft: true
---

그러고 제목(title)을 원하는대로 다시 작성하고, Front matter 헤더 이후에 기사의 본문을 작성해 가면 된다. 게시할 수 있는 수준까지 작성이 되었다면, 헤더 부분의 draft: true 행을 삭제한다.

Archetypes

여기서 기반이 되는 archetypes/default.md 파일을 살펴보도록 하자.

archetypes/default.md

---
title: {{ replace .TranslationBaseName "-" " " | title }}"
date: {{ .Date }}
draft: true
---

title 필드에는 hugo new 명령으로 지정한 이름이 자동으로 들어가고, date 필드에는 현재의 시각이 자동으로 들어가게 되어 있다. 이 파일의 내용을 바탕으로 포스트 파일이 작성되고 있는 것을 알 수 있다.

포스트 작성과 동시에 편집기에서 편집 시작

hugo new 명령으로 포스트 파일을 만들 때 --editor 옵션을 지정하면, 포스트 파일 생성과 동시에 지정된 편집기에서 파일을 열 수 있다.

예: 기사 파일을 만들고 vim에서 열기

% hugo new sample.md --editor vim

처음에 실행하면 아래와 에러가 나올 수 있다.

% hugo new sample.md --editor vi
Content "/Users/user/hugo-tutorial/my-site/content/sample.md" created
Editing "/Users/user/hugo-tutorial/my-site/content/sample.md" with "vi" ...
Error: access denied: "vi" is not whitelisted in policy "security.exec.allow"; the current security configuration is:

[security]
  enableInlineShortcodes = false

  [security.exec]
    allow = ['^dart-sass-embedded$', '^go$', '^npx$', '^postcss$']
    osEnv = ['(?i)^((HTTPS?|NO)_PROXY|PATH(EXT)?|APPDATA|TE?MP|TERM)$']

  [security.funcs]
    getenv = ['^HUGO_']

  [security.http]
    methods = ['(?i)GET|POST']
    urls = ['.*']

알려준 메세지 대로 기본 정책을 그래도 복사해서 config.toml 내용에 넣고, allow 배열 항목에 '^vim$'를 추가한다.

[security]
  enableInlineShortcodes = false

  [security.exec]
    allow = ['^dart-sass-embedded$', '^go$', '^npx$', '^postcss$', '^vim$']
    osEnv = ['(?i)^((HTTPS?|NO)_PROXY|PATH(EXT)?|APPDATA|TE?MP|TERM)$']

  [security.funcs]
    getenv = ['^HUGO_']

  [security.http]
    methods = ['(?i)GET|POST']
    urls = ['.*']

그러고 다시 시도하면 실행이 될 것이다. 단, 포스트 파일이 먼저 생기고, 에디터를 여는 거라서 기존에 파일이 이미 있다는 메세지가 나올수 있다.

% hugo new sample.md --editor vim
Error: /Users/user/hugo-tutorial/my-site/content/sample.md already exists

그러면 기존은 지우고 다시 실행하면 된다.




최종 수정 : 2023-05-06