(2022년 10월 9일 시점에 개츠비에서 Eleventy로 갈아탔다. 개츠비의 여러가지 기능에 만족하기도 했지만 나만의 블로그를 만드는 데 있어서 기능보다는 Eleventy의 단순 명료한 정적 사이트 제작 환경이 더 마음에 들었다. 참고해서 보시길.)

벌써 3주 이상 블로그 환경을 워드프레스에서 개츠비(Gatsby)로 옮기고 있다. 발단은 도메인 문제가 걸린 외부적인 요인인데 원하지 않게 시간이 많이 소모되고 있지만 결과적으로 요즘 유행하는 Jamstack에 대해 알아보고 개츠비 기반의 정적 사이트 제작에 대해 여러가지를 정리해볼 수 있었다. 아직 진행 중이고 문제도 많아 언제 끝날지 모르지만 일단 GitHub에 정착하게 되어 글을 올려본다.

이 과정에서 내가 얻은 가장 큰 교훈은 하나로 요약할 수 있다. 블로그 이전은 웬만하면 추천하지 않는다.

워드프레스의 장점과 단점

워드프레스가 전세계 블로그 플랫폼의 최강자이긴 하지만 누구나 만족하며 사용하지는 않을 것이다. 7년간 워드프레스를 사용하면서 장점으로 느낀 것은 다음과 같은 것들이다. 개발자 관점이 들어가 있다.

다음은 단점이다.

Jamstack

그래서 이왕 블로그를 이전하는 김에 대안을 찾아보게 되었고 먼저 눈에 들어온 것이 GitHub에서 Git 저장소에 HTML을 올리면 바로 웹 사이트를 띄울 수 있다는 “정적인 사이트” 플랫폼이었다. Jamstack은 이러한 정적인 사이트의 핵심 기술인 JavaScript, API, Markup을 합한 기술 스택이란 의미이며 웹 초창기의 HTML 기반 정적인 사이트와는 다르게 진화한 JavaScript 위주 웹사이트의 기반 기술을 의미한다.

GitHub는 깃허브 페이지라는 개념으로 정적인 사이트를 지원하는데 Ruby 언어 기반의 정적 사이트 제너레이터인 Jekyll을 기본적으로 사용할 수 있게 해준다.

Jekyll 테마 중 Minimal Mistakes를 알게 되었고 그 블로그 스타일이라든가 지원하는 기능이 마음에 들어서 설치해보고 커스터마이징을 시작했는데… 좀더 깊게 커스터마이징하려면 Ruby를 설치하고 소스를 수정해야 하는 것이었다. 정적 사이트를 만드는데 내가 잘 모르는 서버 기술이 필요하다니.

아쉽지만 낯선 Ruby를 공부하기보다는 다른 방법을 찾아보기로 했다. 이미 React 기반의 웹사이트 제작 도구인 Gatsby는 알고 있었지만 블로그를 쉽게 만들 수 있는지는 몰랐는데 샘플 프로젝트 성격인 "스타터"가 상당히 많이 있어서 Jekyll처럼 선택하고 설치하면 금방 블로그를 띄울 수 있음을 알게 되었다. 그래서 이번에는 Lumen이라는 Gatsby 스타터를 선택하여 커스터마이징을 시작했다. 그러나 역시 쉽지만은 않았다. 커스터마이징 과정에서 다음과 같은 교훈을 얻었다.

워드프레스에서 Gatsby 기반 개발/배포로 옮기기

Gatsby는 다른 정적 사이트 생성기와 마찬가지로 Markdown 파일을 콘텐트 소스로 하여 정적인 HTML을 만들어 낸다. 이 과정에서 효율적인 페이지 구조, 이미지 리샘플링 등의 최적화가 자동으로 처리된다. 이 HTML이나 CSS, JS, 이미지 등을 GitHub에 저장소에 올리고 GitHub 페이지를 열겠다고 설정하면 된다.

내가 Gatsby Lumen 스타터를 기반으로 워드프레스에서 GitHub로 블로그를 이전한 과정은 다음과 같다.

  1. 워드프레스 콘텐트 내보내기(XML 파일 다운로드)
  2. wordpress-export-to-markdown을 사용하여 마크다운 파일 및 이미지 파일 추출 - 원하는 마크다운 형식을 위해 소스 수정 - 추출 반복
  3. Gatsby Lumen을 로컬에 클론하고 그 안에 마크다운, 이미지 복사, gatsby develop을 실행하여 브라우저에서 확인, 커스터마이징 반복
  4. gatsby build로 배포를 위한 산출물을 만듦. gatsby develop과 달리 마크다운 페이지에 오류가 있는 경우 전체 빌드가 중단되므로 오류를 모두 없앤 후 빌드해야 한다.
  5. GitHub에 개인 GitHub 페이지 저장소를 만듦(feeva.github.io)
  6. 산출물을 개인 GitHub 페이지 저장소로 푸시 - gh-pages -d public -b master -r git@github.com:feeva/feeva.github.io.git
  7. 이제 https://feeva.github.io 를 열면 페이지가 나타난다.

Gatsby Lumen 커스터마이징

기본 상태의 Lumen을 보니 원래 워드프레스에 비해 부족한 것이 많았다. 지금까지 다음과 같이 커스터마이징했다. 커스터마이징 결과는 feeva.gatsby-starter-lumen 프로젝트로 GitHub에 올렸다.

다음은 안되는 것, 앞으로 하려고 생각 중인 것들이다.

기타 어려웠던 문제들

이번 작업에서 가장 시간을 많이 잡아 먹은 것은 Disqus 댓글을 붙이는 작업이었다. 댓글 모듈을 뭘 사용할 것인가부터 고민이 많았으며 특히 기존 워드프레스 댓글을 Disqus에 부었는데도 블로그에는 나타나지 않는 문제를 잡느라 시간이 많이 걸렸다.

기타 예상치 못한 문제들은 다음과 같다.

맺음말

아직 온전하지는 않지만 페이지가 빠르게 열리는 걸 보면 상당히 만족스러운 기분이다. 그러나 도입부에서 말했듯이 상당히 힘든 과정이다. 결국 모든 걸 내가 책임지고 커스터마이징해야 한다는 것은 장점이면서도 피곤한 단점이 되기도 한다. 요즘 대세가 되고 있는 정적 사이트 개발이 좀더 일반화가 되면 이런 과정이 좀더 쉬워지리라 생각해본다.