가장 좋은 블로깅 플랫폼?

지금 나는 Ghost를 DigitalOcean에 올려 블로그를 돌리고 있지만, 에디터의 기능이 부족함을 느껴 다른 블로그를 알아보고 있다.

Hugo

가장 먼저 알아봤던 건 Hugo이다-무려 Golang 기반이다- 런타임이 정말 매우 매우 빠르고 굉장히 마음에 들었지만 goldmark markdown 설정이 부족해 수식 렌더링을 하기 위해 번거로운 작업을 거쳐야 한다. markdown 렌더링 이후 katex 렌더링을 하기에, katex 내의 수식 문자열을 markdown에서 escape sequence 처리당하지 않도록 만들어줘야 하는것이다. 예를 들어 \( 대신 \\( 을 써야하며, {}_{5} 와 같은 문법도 {}\_{5}처럼 써줘야 한다. 이는 2번 escape 처리가 되지 않는 절대 다수의 외부 에디터(Ghost, Pandoc Markdown, Latex 등)과 전혀 호환이 되지 않으며 나에게는 굉장히 심각한 문제였다.

그런데 Hugo는 놀랍게도 Pandoc 기반 렌더링을 지원한다. 어.. 이것만 봤을 때는 굉장히 놀라웠는데, 직접 써보니 기능이 매우 제한적이다. Hugo의 제작자 bep는 보안상 이슈로 인해 arbitrary flag for pandoc을 꺼려하고 있어, 지금 pandoc은 무조건 고정된 flag 하나만을 넣어 실행해야 한다. 그러다 보니 tOC(tableOfContent)도 못 쓰고, pandoc의 유저는 대부분 customized된 flag를 매우 heavily하게 사용하는데 flag를 전혀 설정할 수 없으니 기능상에 제약이 많다.

음.. 솔직히 말해, 보안상 이슈를 걱정하는 것까진 이해가 가지만 "pandoc에 임의 argument 실행"이 과연 보안상에 큰 이슈를 일으킬지는 공감이 가지 않는다. 답답하네...  그러다 보니 pandoc 관련된 여러 좋은 Pull Requests들이 많지만 전부 merge되지 않고 대기당하고 있다. 근데 지금도 pandoc은 애초에 hugo에서 실행부터가 막혀있고, 사용자가 pandoc을 사용하려면 security.exec.allow 옵션을 직접 바꿔줘야 한다. 그냥 Pull Request 병합시켜주고 pandoc 쓸사람은 security 옵션 직접 바꿔서 쓰세요 대신 책임 알아서 지세요~ 이렇게 하면 되는 거 아닌가?? 잘 모르겠다.

Notion CMS

그 다음은 Notion을 CMS로 사용하는 블로그다. 내가 지금까지 접한 에디터중에 notion만큼 편리한 건 아무것도 없었다. 수식 렌더링, 이미지 삽입, 다양한 block 삽입 등 안 되는 게 없고 딱 하나 에디터로써 아쉬운 건 footnote(각주)나 인용(citation, bibliography) 기능이다.

근데 이걸 블로그로 쓰자고 하면... 제약사항이 꽤 많다. customized된 기능(analytics 등)을 넣기도 곤란하고, markdown과 완전 호환이 되지 않으니(물론 이는 장점이기도 하다) markdown 계열 프로그램과 같이 쓰기 힘들다.

notion을 블로그로 쓰는 방법은 크게 2가지가 있는데:

  1. notion을 바로 블로그로 띄우기
  2. notion은 단순 cms(content management system)으로 이용하고 nextjs, react 등을 이용해 웹사이트 띄우기(보통 정적 웹사이트)

첫번째 방법은 노션 페이지의 주소가 인간이 읽을 수 없는 문자열의 조합으로 나온다는 점, 그리고 customize가 거의 불가능하다는 점에서 나는 채택할 수 없었다.

그래서 두번째 방법 중심으로 알아봤는데..

NotiGoCMS(or kjk/notionapi): Golang, Hugo 기반

GitHub - lvntbkdmr/NotiGoCMS: A CMS for Hugo static website framework based on Notion.so
A CMS for Hugo static website framework based on Notion.so - GitHub - lvntbkdmr/NotiGoCMS: A CMS for Hugo static website framework based on Notion.so
GitHub - kjk/notionapi: Unofficial Go API for Notion.so
Unofficial Go API for Notion.so. Contribute to kjk/notionapi development by creating an account on GitHub.

NotiGoCMS를 포크해서 블로그로 만들어봤고, 나는 golang도 좋아하고(빠르다!) Hugo도 꽤 괜찮다고 생각했으므로 이것만 잘 된다면 매우 좋을 것 같았는데...

어... 근데 다양한 notion의 블록들이 렌더링이 안된다.

그 렌더링이 안되는 블록이 어차피 내가 안 쓰는 거라면 별 상관 없겠지만... 매우 치명적이게도 수식이 렌더링이 안된다.

수식이 없는 블로그는 난 절대 쓸 수 없다. 절망적이지만 이건 못 쓰는 걸로....

kjk/notionapi에 수식 렌더링 기능을 구현하고 PR할까 생각도 해봐서 한번 소스코드를 좀 읽어봤는데 애초에 구조 자체가 수식 렌더링 기능을 추가하려면 좀 근본적으로 뜯어고쳐야 하는 것처럼 보여서 일단 뒤로 미뤘다. 정말 이것밖에 길이 없다 싶으면 나중에 시도해볼지도...

궁금한 사람은 tomarkdown/markdown.go와 block.go의 Block struct를 확인해보자.

Nobelium: NextJS, react-notion-x 기반

GitHub - craigary/nobelium: A static blog build on top of Notion and NextJS, deployed on Vercel.
A static blog build on top of Notion and NextJS, deployed on Vercel. - GitHub - craigary/nobelium: A static blog build on top of Notion and NextJS, deployed on Vercel.

react-notion-x 기반이며 react-notion-x가 지원해주는 notion block이 꽤 다양하므로아마 할 수 있는 게 많을 것이다.

근데 나는 저거 예전에 이미 2주일쯤 써보고 버린 경험이 있다. 왜 버렸는지 정확히 기억은 안 나는데 뭔가 notion block중에 지원 안하는 게 있어서 그랬던 것 같다.

그리고 테마가 한정적이다. commit 개수도 적고 활발하지 않다.

참고로 내가 오픈소스 프로젝트를 여럿 봐오면서 안건데, 지속적으로 업데이트가 이루어지고 기능 구현이 활발하지 않으면 당장 Star 수가 많거나 하더라도 쓰지 않는 게 좋다. 나중에 outdated되고 기능구현도 제대로 안해줘서 피눈물 흘릴 수 있다...

물론 적은 양의 구현량과 지속적인 업데이트 없이도 안정적인 기능을 수행할 수 있는 종류의 프로그램은 당연히 예외다. 근데 노션은 계속 업데이트 될거고 이게 그걸 따라가줄까? react-notion-x는 활발한 commit 수를 봤을 때 아마 계속 업데이트를 해주겠지만 nobelium이 그럴지는 모르겠다.

nextjs-notion-starter-kit: NextJS, react-notion-x 기반

GitHub - transitive-bullshit/nextjs-notion-starter-kit: Deploy your own Notion-powered website in minutes with Next.js and Vercel.
Deploy your own Notion-powered website in minutes with Next.js and Vercel. - GitHub - transitive-bullshit/nextjs-notion-starter-kit: Deploy your own Notion-powered website in minutes with Next.js a...

nobelium처럼 react-notion-x기반인데 디자인이 굉장히 예쁘다. 최근에 나왔으며 commit도 활발하다.

다 마음에 드는데 크게 2가지가 꺼려지는데:

  1. js 기반이라 런타임이 golang보다는 느리다.
  2. notion의 향후 변화에 잘 맞춰서 이게 계속 유효하게 사용할 수 있을까?

그리고 이거 커스텀테마 되나?

next-theme 같은 게 있던데, 나는 뭔지 아직 잘 모르지만.. 커스텀테마가 된다면 진짜 이걸로 옮겨가는 게 좋을지도?

정리

정리하자면 golang+hugo 기반은 수식이 렌더링이 안되고 hugo 기반이므로 다양한 템플릿을 마음대로 사용할 수 있다.

nextjs-notion-starter-kit은 외형도 그렇고 정말 잘 만들긴 했는데.. 조금만 더 알아보야겠다.

hugo를 그냥 그대로 사용하려면 pandoc PR이 merge되든가 goldmark-katex PR이 merge되든가 해야 한다. (esqape 처리가 2번 되지 않도록 하는 goldmark 추가기능을 hugo에 병합한 PR이 있으니 관심 있으면 찾아보자. 근데 얘도 merge를 안 시켜준다. 이유가 있긴 한데... 음...)