머리말 기본값

페이지와 포스트에서 환경설정 값을 조정하는 방법 중 하나는 머리말을 사용하는 것입니다. 기본 레이아웃 설정이나 제목 수정, 또는 더 자세한 날짜 / 시간 지정 등을 페이지나 포스트의 머리말에 입력할 수 있습니다.

종종, 같은 내용의 환경설정들을 계속해서 반복 입력하고 있는 자신을 발견할 지도 모릅니다. 각각의 파일에 동일한 레이아웃을 설정하거나 여러 개의 포스트를 동일한 카테고리(들)에 추가하는 것 말이죠. 심지어는 작성자 이름처럼 블로그의 거의 모든 포스트에 동일하게 사용되는 값을 사용자 변수로 일일히 추가하게 될 수도 있습니다.

Jekyll 은 사이트 환경설정에 변수들의 기본값을 지정하는 방법을 제공하기 때문에, 새 포스트나 페이지를 추가할 때마다 이러한 환경설정들을 반복하지 않아도 됩니다. 그러기 위해서는, 프로젝트의 루트 디렉토리에 있는 _config.yml 파일에 defaults 라는 키를 사용하여 사이트에 전체에 사용되는 기본값을 정의할 수 있습니다.

defaults 키에 여러 쌍의 범위/값(scope/values)을 배열로 입력할 수 있어, 특정 경로의 파일이나 파일 종류에 사용되어야 하는 디폴트 값을 정의할 수 있습니다.

사이트의 모든 포스트와 페이지에 기본 레이아웃을 추가하는 경우를 생각해 봅시다. _config.yml 파일에 아래 내용을 추가하면 됩니다:

defaults:
  -
    scope:
      path: "" # an empty string here means all files in the project
    values:
      layout: "default"
종료한 뒤 다시 `jekyll serve` 명령을 실행해주세요.

환경설정 파일인 _config.yml 에는 전역 환경설정과 전역 변수가 설정되어 있으며 이것들은 실행 시 최초 한 번만 읽어들여집니다. 자동 재생성 모드에서도 _config.yml 파일의 변경사항은 다시 실행하기 전까지는 반영되지 않습니다.

데이터 파일의 변경사항은 반영됩니다.

여기서 우리는 values 의 범위를 경로 scope 에 존재하는 모든 파일로 제한하고 있습니다. 하지만 경로에 빈 문자열을 설정했기 때문에, 프로젝트 내의 모든 파일 에 적용될 것입니다. 프로젝트 내의 모든 파일에 한 레이아웃을 적용하길 원치 않을 수도 있습니다 - 예를 들자면, CSS 파일같이 말이죠 - 이런 경우엔 scope 키에 type 값을 지정할 수 있습니다.

defaults:
  -
    scope:
      path: "" # 이 빈 문자열은 프로젝트의 모든 파일을 의미함
      type: "posts" # 이전 Jekyll 2.2 에서는 `post`
    values:
      layout: "default"

이제, typeposts 인 파일에만 레이아웃이 설정될 것입니다. type 의 값으로는 pages, posts, drafts 또는 사이트 내의 컬렉션 이름을 사용할 수 있습니다. scope/values 쌍을 생성할 때, type 은 선택사항이지만 path 는 반드시 정의해야 합니다.

앞서 언급했던 것처럼, defaults 에 여러 개의 범위/값 쌍을 설정할 수 있습니다.

defaults:
  -
    scope:
      path: ""
      type: "pages"
    values:
      layout: "my-site"
  -
    scope:
      path: "projects"
      type: "pages" # 이전 Jekyll 2.2 에서는 `page` 
    values:
      layout: "project" # 이전 디폴트 레이아웃 설정을 덮어씀
      author: "Mr. Hyde"

이 디폴트 값으로 인하여, 모든 페이지는 my-site 레이아웃을 사용하게 됩니다. projects/ 폴더 안에 있는 모든 HTML 파일들은 project 레이아웃을 사용하게 됩니다. 또한 이 파일들은 Mr. Hyde 라는 값을 가진 Liquid 변수 page.author 도 갖게 됩니다.

collections:
  my_collection:
    output: true

defaults:
  -
    scope:
      path: ""
      type: "my_collection" # 사이트의 컬렉션"들"
    values:
      layout: "default"

이 예제에서, my_collection 이라는 이름의 컬렉션 안에서는 layoutdefault 로 설정됩니다.

머리말 기본값에 글로브 패턴 사용

머리말 기본값에 글로브(glob) 패턴 (현재는 * 만 사용 가능함) 을 사용하는 것도 가능합니다. 예를 들면, section 폴더의 모든 하위 디렉토리 안에 있는 special-page.html 파일에 특정 레이아웃을 설정할 수 있습니다.3.7.0

collections:
  my_collection:
    output: true

defaults:
  -
    scope:
      path: "section/*/special-page.html"
    values:
      layout: "specific-layout"
글로브 패턴과 성능

글로브 패턴을 사용하는 것은 성능에 부정적인 영향을 미친다고 알려져 있고 현재 이 기능은, 특히 윈도우즈에, 최적화 되어있지 않습니다. 글로브 패턴을 사용하면 관련된 컬렉션 디렉토리의 크기에 비례해서 빌드 시간이 증가할 것입니다.

우선순위

Jekyll 은 _config.yml 파일의 defaults 섹션에 설정된 환경설정 값을 모두 적용합니다. 범위에 더 자세한 경로를 사용하면 선택적으로 다른 범위/값을 덮어쓸 수 있습니다.

끝에서 두 번째 예제의 내용처럼 말이죠. 먼저, 우리는 페이지 레이아웃 기본값을 my-site 로 설정했습니다. 그 다음, 더 자세한 경로를 사용해서, projects/ 경로에 있는 페이지에 대해서만 레이아웃을 project 로 설정했습니다. 페이지나 포스트의 머리말에 사용하는 어떤 설정에든지 이 방법을 사용할 수 있습니다.

마지막으로, _config.yml 파일에 defaults 섹션을 추가해서 사이트 환경설정 디폴트 값을 정의했어도, 페이지나 포스트에서 값을 덮어쓸 수 있습니다. 페이지나 포스트의 머리말에서 다시 해당 환경설정 값을 정의하면 됩니다. 예를 들면 다음과 같습니다:

# _config.yml 파일
...
defaults:
  -
    scope:
      path: "projects"
      type: "pages"
    values:
      layout: "project"
      author: "Mr. Hyde"
      category: "project"
...
# projects/foo_project.md 파일
---
author: "John Smith"
layout: "foobar"
---
여기부터는 포스트 내용입니다...

이제 사이트를 구축하면, projects/foo_project.md 파일의 layoutproject 가 아닌 foobar 로, authorMr. Hyde 가 아닌 John Smith 로 설정됩니다.