์๋
ํ์ธ์, yaml ํ์ด์ง ๋ด์์ ๋งํฌ๋ค์ด์ ์์ฑํ๋ ๋ฐ ๋์์ ๋ฐ์ ์ ์์ต๋๊น? jekyll์์ gatsby๋ก ์ ํ์ ์๋ํ๊ณ ์์ง๋ง jekyll์ ์ข์ ๊ธฐ๋ฅ ์ค ํ๋๋ markdownify
ํ์ดํ๋ฅผ ํตํด ๋ชจ๋ ๋ฌธ์์ด(์: yaml ํ์ผ์์)์ ์ ๋ฌํ ์ ์๋ ์ ๋ ํ
ํ๋ฆฟ ์ธ์ด ์์ต๋๋ค. ์ด๊ฒ์ ํ์ด์ง์ ๊ตฌ์กฐํ๋๊ธฐ๋ฅผ ์ํ์ง๋ง yaml ํ์ผ์ ํจ๊ป ์ ๋ฆฌ๋ ์ ๋ณด๊ฐ ์ฌ๋ฌ ๊ฐ ์์ ๋ ์ ์ฉํ์ต๋๋ค. ์์:
- title: My Title
image: ./assets/image.png
description: >
Here is a long winded description that includes a [link](https://code-somewhere.com).
- title: Second Item
image: ./assets/image2.png
description >
more text ...
๋น์ทํ ์ฐธ๊ณ ๋ก, ์ด ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ผ์ ๋ค๋ฅธ ๊ณณ์์ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ๊ณผ ๊ฐ์ ํดํค ์๋ฃจ์
์ด ์์ง๋ง webpack์ด pages/
์ด๋ฏธ์ง๋ฅผ ๋ณต์ฌํ๋๋ก ์๋ฆด ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์ด๋ฏธ์ง์์ gatsby-source-filesystem + gatsby-transformer-yaml + gatsby-transformer-sharp/gatsby-plugin-sharp๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ์ด๋ฏธ์ง๋ฅผ ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด gatsbyjs.org๊ฐ ์์ฑ์ ์๋ฐํ๋ฅผ ์ฟผ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ฐธ์กฐํ์ธ์.
https://github.com/gatsbyjs/gatsby/blob/master/www/src/templates/template-blog-post.js#L306 & https://github.com/gatsbyjs/gatsby/blob/master/docs/ ๋ธ๋ก๊ทธ/์ ์.yaml
๋งํฌ๋ค์ด์ ํตํด yaml ํ๋๋ฅผ ์คํํ ๋ โ ๋ฏธ๋์ด ์ ํ์ ๋งํฌ๋ค์ด์ผ๋ก ์ง์ ํ๋ ํ์ ๋ ธ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด gatsby-transformer-remark๊ฐ ์ด๋ฅผ html๋ก ๋ณํํฉ๋๋ค(์: https://github.com/gatsbyjs/gatsby/blob/d855150dadb91e80b836d2bd5e1405e2a8). /gatsby-source-contentful/src/normalize.js#L143
๊ทธ๊ฒ์ด ๋งค์ฐ ๋์ ์์ค์ด๊ณ ์คํ ๊ฐ๋ฅํ์ง ์์ ๊ฒฝ์ฐ ์ฃ์กํฉ๋๋ค. Gatsby๋ ์ฌ์ฉ์ ์ง์ ๋ฐ์ดํฐ ๋ณํ ํ์ดํ๋ผ์ธ์ ์ฝ๊ฒ ์ค์ ํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. ์ผ๋ฐ์ ์ธ ์์ ์ ๊ฒฝ์ฐ ์ฌ๋๋ค์ ์ด์ ๊ฐ์ ๊ฒ์ ์๋์ผ๋ก ์ค์ ํ๋ ๊ณ ๊ธ ํ๋ฌ๊ทธ์ธ์ ๋ง๋ค ์ ์์ง๋ง ์์ง yaml => markdown => html์ ๋ํด ์๋ ์ฌ๋์ด ์์ต๋๋ค.
์ด๋ ๊ฒ ํ๋ ค๋ฉด Gatsby์ ๋ฌธ์๋ฅผ ์ดํด๋ณด๊ณ ํ๋ฌ๊ทธ์ธ์ ์ดํด๋ณด๊ณ ์ํ๋ ์์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ดํดํด์ผ ํฉ๋๋ค.
์กฐ์ธ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ ๋ ์ง๊ธ ๋ณธ์ง์ ์ผ๋ก gatsby ํ๋ฌ๊ทธ์ธ์ ๋ง๋๋ ๋ฐ ๊ทธ๋ ๊ฒ ๋ง์ ์๊ฐ์ ํ ์ ํ ์ค๋น๊ฐ ๋์ด ์์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์์งํ ์๋ฃจ์ ์ด ์์ต๋๋ค.
import data from './_data.yaml'
import markdownIt from 'markdown-it'
const md = markdownIt({
html: true,
linkify: true
})
const loadedData = data.map(item => ({
...item,
image: item.image && require(item.image),
description: md.render(item.description)
}))
์ด๊ฒ์ ๋น๋ ๋จ๊ณ์์ ์ฌ์ ํ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ๋ด ๋ชฉ์ ์ ๋ง๊ฒ ์๋ํฉ๋๋ค. ๋ฌธ์ ๋ graphql์ด ๋จผ์ ๋ฐ์ดํฐ๋ฅผ ๋น๋ํ๊ณ ์ฌ๋ฌ ํ์ด์ง์ ์ ์ฌํ ํ
ํ๋ฆฟ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ค๋ ๊ฒ์
๋๋ค. ๋ค์๊ณผ ๊ฐ์ '๋ชจ๋' ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค.
```
ํ์ด์ง/
ํ ํ์ด์ง/
index.js
_data.yml
์์ฐ/
img1.png
๋ค๋ฅธ ํ์ด์ง/
...
์ด๋ฅผ ์ํํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ onCreateNode๋ฅผ ์ฌ์ฉํ์ฌ ๋งํฌ๋ค์ด ํ๋๋ฅผ ์ปดํ์ผํ๋ ๊ฒ์
๋๋ค. https://www.gatsbyjs.org/tutorial/part-four/#programmatically -creating-pages-from-data ํ๊ณ ์ปดํ์ผ๋ ํ๋๋ฅผ createNodeField
์๋ ์ ํ๋๋ก ์ถ๊ฐํฉ๋๋ค.
๋น์ ์ ๋น์ ์ gatsby-node.js์์ ๊ทธ๋ ๊ฒ ํ ๊ฒ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๋ฏธ์ง์์ gatsby-source-filesystem + gatsby-transformer-yaml + gatsby-transformer-sharp/gatsby-plugin-sharp๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ์ด๋ฏธ์ง๋ฅผ ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด gatsbyjs.org๊ฐ ์์ฑ์ ์๋ฐํ๋ฅผ ์ฟผ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ฐธ์กฐํ์ธ์.
https://github.com/gatsbyjs/gatsby/blob/master/www/src/templates/template-blog-post.js#L306 & https://github.com/gatsbyjs/gatsby/blob/master/docs/ ๋ธ๋ก๊ทธ/์ ์.yaml
๋งํฌ๋ค์ด์ ํตํด yaml ํ๋๋ฅผ ์คํํ ๋ โ ๋ฏธ๋์ด ์ ํ์ ๋งํฌ๋ค์ด์ผ๋ก ์ง์ ํ๋ ํ์ ๋ ธ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด gatsby-transformer-remark๊ฐ ์ด๋ฅผ html๋ก ๋ณํํฉ๋๋ค(์: https://github.com/gatsbyjs/gatsby/blob/d855150dadb91e80b836d2bd5e1405e2a8). /gatsby-source-contentful/src/normalize.js#L143
๊ทธ๊ฒ์ด ๋งค์ฐ ๋์ ์์ค์ด๊ณ ์คํ ๊ฐ๋ฅํ์ง ์์ ๊ฒฝ์ฐ ์ฃ์กํฉ๋๋ค. Gatsby๋ ์ฌ์ฉ์ ์ง์ ๋ฐ์ดํฐ ๋ณํ ํ์ดํ๋ผ์ธ์ ์ฝ๊ฒ ์ค์ ํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. ์ผ๋ฐ์ ์ธ ์์ ์ ๊ฒฝ์ฐ ์ฌ๋๋ค์ ์ด์ ๊ฐ์ ๊ฒ์ ์๋์ผ๋ก ์ค์ ํ๋ ๊ณ ๊ธ ํ๋ฌ๊ทธ์ธ์ ๋ง๋ค ์ ์์ง๋ง ์์ง yaml => markdown => html์ ๋ํด ์๋ ์ฌ๋์ด ์์ต๋๋ค.
์ด๋ ๊ฒ ํ๋ ค๋ฉด Gatsby์ ๋ฌธ์๋ฅผ ์ดํด๋ณด๊ณ ํ๋ฌ๊ทธ์ธ์ ์ดํด๋ณด๊ณ ์ํ๋ ์์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ดํดํด์ผ ํฉ๋๋ค.