발단
나는 새로운 글을 쓸 때 파일을 만들어 놓고 나중에 쓰곤 한다. 파일을 만들어 놓는 건 일종의 습관인데, 대학에 다니던 시절에 과제가 생기면 일단 파일부터 만들곤 했다. 그리고 어떤 방향으로 갈지, 어떤 내용을 적을지 생각하고 메모하고, 한 번에 다 하지 않고 조금씩 조금씩 나눠서 적었었다.
블로그 글도 무의식적으로 그렇게 하려고 했는데, 빈 글이 제목만 가지고 빌드가 되었다. 그래서 파일은 일단 지워두고 폴더까지만 두고 draft라고 인식했다. 하지만 이는 상당히 귀찮은 작업이다.
그래서 마크다운 frontematter에 draft 플래그를 넣고 걔네는 빌드가 안 되게 할 수 없을까 생각했다.
시도
gatsby-node.js 파일을 보면 graphql query가 있다. 이 query에 filter를 넣어서 draft가 true가 아닌 경우에만 가져오게 했다.
{
allMarkdownRemark(
sort: { fields: [frontmatter___date], order: DESC }
filter: {frontmatter: { draft: { ne: true } }}
limit: 1000
) {
...
}
그랬더니 index 페이지에 (기본적으로 all posts 페이지) 글 목록에선 글 제목이 남아 있고 글을 누르면 빈 화면이 나왔다.
아, index 페이지에서도 없애야 하는구나. gatsby-node에는 마크다운의 페이지를 만드는 부분이구나.
그래서 /src/pages/index.js에도 filter를 위와 같이 넣었다. 그랬더니 글이 더 이상 나오지 않는다!
뭔가 이상하다
내가 제대로 한 걸까? 내가 한 것과 같은 기능을 구현한 사람들은 어떻게 했는지 검색을 했다. 그리고 이 글을 찾았다.
기본적으로는 똑같이 구현을 했다. 그런데 이 사람은 RSS feed에 대해서 언급을 해놨다. 아, RSS에서도 없애야겠구나? 그런데 내 블로그엔 sitemap도 있는데? 그리고 앞으로 카테고리 페이지를 넣으면 그 쪽에도 동일한 로직이 들어갈 거다. 그렇게 생각하면 중복이 너무 많다.
이 로직을 최소 4군데 이상 넣고 앞으로도 다른 곳에 넣을지도 모른다. 아무래도 query를 실행하는 시점이 아닌 파일 시스템에서 md 파일을 긁어오는 부분에서 draft를 걸러낼 수는 없을까?
그래서 gatsby-config.js에서 gatsby-source-filesystem 부분을 확인하고 이 플러그인의 doc을 참고했다. 그런데 딱히 내가 원하는 기능을 구현할 수 있을 것 같지 않다.
포기
Gatsby 문서를 계속 읽어가며 앞으로 좋은 방법이 보이면 그 방법으로 시도할 생각이다.
그러나 그 전에는 이 작업을 하지 않기로 했다. 왜냐면 draft를 걸러내는 로직을 여기저기 넣는 건 중복이 너무 많다. 더군다나 그 많은 일을 하고도 내가 draft인지 아닌지를 적고 지우는 작업은 여전히 해야한다.
가만 생각해보니 md 파일을 만들고 확장자만 잠시 바꿔두면 될 일이다. 왜 진즉에 이 생각을 못 했을까? 그저 파일을 만들거나 지워두는 생각만 했다.
그냥 확장자를 draft 정도로 하고 다시 복귀하는 방향으로 가야겠다.