환경 - (2) 세부적인 사용과 예시
본 카테고리는 정적 블로그 생성도구인 Jekyll에 관하여 작성하는 곳이다.
공식 사이트의 내용을 좀 더 풀어쓰고 스크린샷을 첨부하여 좀 더 상세히 기록하고자 한다.
Custom WEBrick Headers
Ruby on Rails
의 WEBrick 관련 헤더 설정이다.
_config.yml
에 사이트를 추가하여 맞춤 헤더를 제공할 수 있다.
1 | # FILE: _config.yml |
기본값
기본적으로 제공되는 Content-Type
과 Cache-Control
response header는 데이터의 특성을 지정하기 위한 동적 데이터와 캐싱을 사용하지 않도록 정적 데이터를 제공한다.
따라서 개발 도중에는 Chrome의 캐싱을 고려할 필요가 없다.
빌드 시 Jekyll 환경 지정
Build
혹은 Serve
시 환경 변수를 통해서 Jekyll의 환경설정을 할 수 있다.
환경변수는 Build
시 사이트 내의 코드 조건문을 적용받는다.
1 | {% if jekyll.environment == "production" %} |
위의 예제 코드를 분석해보자.
위의 코드에 의하여 빌드시 환경 변수 production
을 입력하지 않으면 if
문 안에 있는 코드는 실행되지 않는다.
1 | JEKYLL_ENV=production jekyll build |
위처럼 환경변수 값을 설정함으로써 특정 환경에서만 동작하는 컨텐츠를 제작할 수 있다.
기본값
JEKYLL_ENV
의 기본값은 development
이다.
따라서 jekyll build
처럼 Build
를 할 경우 전달값 JEKYLL_ENV
를 생략하면
JEKYLL_ENV=development
가 된다.
위의 기본값에 따라
1 | {% if jekyll.environment == "development"%} |
위의 if문
안의 코드는 자동으로 빌드된다.
environment
값은 production
이나 development
값이 아닌 다른 어떠한 값이라도 사용할 수 있다.
실제 Production Site가 아닌 개발 단계에서 Disqus
나 Google Analytics
와 같은 것은 노출할 필요가 없기때문에 숨길 수 있는 것이다.
반대로 Edit me in GitHub
를 개발 단계에선 노출하고 Production Site에서는 노출하지 않는 식으로 응용할 수도 있다.
1 | JEKYLL_ENV=production jekyll build |
위의 예제코드 처럼 빌드 명령 자체에 옵션을 사용함으로써 환경설정의 변경없이 A환경에서 B환경으로 이동할 수 있다.
기본 머리말(Front Matter Defaults)
YAML의 Front Matter를 사용하여 페이지와 포스트에 환경 설정을 적용할 수 있다.
기본 레이아웃, 맞춤형 제목, 더욱 정확한 날짜 지정 등을 페이지와 포스트의 추가하거나 머리말에 추가하는 것이다.
페이지나 포스트를 만들다보면 아래와 같은 특정 횐경 설정을 계속해서 반복하는 것을 느낄 수 있다.
- 모든 페이지와 포스트 파일에 동일한 레이아웃을 설정하거나 카테고리를 추가한다.
- 작성자의 이름을 페이지와 포스트를 만들 때마다 입력한다.
위와 같이 반복적인 작업을 하는 대신 사이트 구성 자체에서 기본값을 설정할 수 있다.
Jekyll의 환경 설정 파일인 _config.yml
의 defaults
키의 scope/values
를 사용하여 사이트 전체의 기본값을 설정할 수 있으며 특정 파일 경로에 따라 혹은 해당 경로의 파일 유형을 정의할 수 있다.
아래 나와있는 코드는 _config.yml
파일의 defaults
키를 이용해 사이트 전체의 기본 레이아웃을 적용하는 예제 코드이다
1 | defaults: |
주의사항
jekyll serve
커맨드를 수행중이라면 중지하고 다시 실행해야 한다.
자동으로 재생성하는 도중에는_config.yml
파일의 변경사항이 반영되지 않는다
위의 코드는 values
의 범위를 특정 경로에 존재하는 모든 파일로 제한하고 있다.
하지만 path
가 ""
로 설정되어 프로젝트 전체에 적용되고 있다.
모든 파일 에 레이아웃을 적용하되 특정 파일에 레이아웃을 설정하지 않으려면 아래와 같이 구성한다.
1 | defaults: |
여기서는 게시 유형이 posts
인 파일에만 레이아웃이 적용된다.
pages
, drafts
에도 동일한 방식으로 적용할 수 있다.
type
을 통해서 적용하는 것은 필수는 아니지만 scope/values
를 지정하려면 path
는 필수로 작성해야 한다.
위에서 말했듯 defalts
에 대해 여러 scope/values
를 적용할 수 있다.
아래의 코드를 보자.
1 | defaults: |
path
가 ""
이므로 프로젝트 내 모든 파일에 my-site
라는 레이아웃이 적용된다.
하지만 projects/
폴더에 존재하는 HTML 파일들은 project
레이아웃을 적용된다.
추가적으로 project
라는 카테고리에 속하는 동시에 Mr. Hyde
라는 작성자 변수 값도 갖게 된다.
또 하나의 예제를 보자
1 | collections: |
위의 코드에서 type
이 my_collection
인 콜렌션 내에서 default
레이아웃이 적용된다.
우선순위(Precedence)
Jekyll은 _config.yml
파일에서 defaults
영역에 정의된 모든 환경설정 값을 적용한다.
하지만 특정 범위가 아닌 구체적인 경로를 사용하여 다른 scope/values
의 적용을 덮어 쓸 수 있다.
먼저 예제를 다시 보자.
1 | defaults: |
위의 코드를 다시 풀어보면 기본 레이아웃은 my-site
이지만 path
의 구체적인 경로로 projects
에 속한 파일들은 project
레이아웃이 적용된다.
위와 같이 환경 설정을 적용했어도, 해당 페이지나 포스트에서 머리말을 설정하면 해당 머리말이 제일 우선시 된다.
예를 들면 아래와 같다.
1 | # _config.yml 파일의 경우 |
1 | # projects/foo_project.md 파일의 경우 |
projects
경로의 foo_project.md
파일은 project 경로에 속해 있어 _config.yml
의 환경설정에 의하면 project
레이아웃이 적용되어야 하지만 파일의 머리말이 제일 우선순위가 높으므로 foobar
레이아웃이 적용된다.