블로그 Hugo 이전 후기

내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.

블로그 Hugo 이전 후기

지난 4년간 블로그를 생성할 때 Hexo를 사용했는데, 최근 Hugo로 이전했다. StaticGen에서는 정적 사이트 생성기를 깃헙 스타 개수나 트위터 팔로우어 수로 정렬해 볼 수 있다. 4년 전 어떤 프로그램을 쓸까 고민하던 때만 해도 Hexo가 훨씬 인기가 많았던 것 같은데, 지금은 Hugo가 Hexo를 제친 것 같다.

익숙한 도구를 버리고 새로운 환경에 적응하기로 마음 먹는 것은 쉬운 일이 아니다. 테마까지 직접 작성해 사용하는 등 그동안 들인 노력을 생각한다면 Hexo를 떠나기가 어려웠다. Hexo를 선택한 이유까지 고려하면 알지 못하는 Go 언어로 작성된 Hugo를 쓰기로 한 것은 정말 큰 결심이 아닐 수 없다.

이런 이유에도 Hugo를 쓰기로 결정한 가장 큰 이유는 성능안정성이다. 이 글에서는 내가 Hexo를 사용하면서 불만이었던 성능과 안정성 문제를 간단히 설명하고, 그 밖의 차이점을 간단히 정리하려 한다. 여기서 Hexo와 Hugo의 모든 기능을 분석/비교하려는 의도는 전혀 없음을 미리 밝힌다.

성능

Hexo로 내 블로그를 생성하는 데는 대략 1분 걸린다. HTML, CSS, JS 최적화 수행이 포함된 시간이다. 최적화 옵션을 모두 빼도 40초가 걸린다. 블로그 글이 늘어나면 사이트 생성도 더 오래 걸릴 것이다. 실수를 해서 실행을 중단시키고 싶어도 쉽지 않다. Ctrl+C를 연달아 눌러도 중단되지 않아 한참을 기다려야 한다.

Hugo로는 전체 사이트를 생성하는데는 300ms 정도 걸린다. Hexo의 사이트 생성 시간을 60초라 하면 200배 차이가 나는 것이고, 40초라 해도 130배 차이가 나는 것이다. 엄청난 차이가 아닐 수 없다. Hugo로 생성할 때는 명령 실행과 거의 동시에 사이트 생성이 끝난다.

Hexo는 서버모드로 뜨는 데도 시간이 오래 걸린다. 에디터에서 글을 변경해도 반영되는 속도가 느리다. 태그 페이지 생성이 특히 느린데, 브라우저로 태그 페이지 링크를 클릭하면 한참 지나서야 페이지가 표시된다. Hugo에서는 그런 문제가 없다. 모든 게 쾌적하다.

안정성

나는 항상 소프트웨어 버전을 최신으로 유지하려 노력한다. Node.js나 기타 라이브러리도 가능한 최신 버전으로 유지한다. Hexo 버전도 마찬가지다. Hexo에서는 버전을 업그레이드 할 때마다 항상 문제가 생겼다. Hexo만의 문제라 할 수는 없지만, npm update를 하고 나면 에러가 발생하는 경우가 너무 잦았다.

업데이트 할 때 에러가 발생하면 그나마 다행이라 할 수 있다. 아무 문제 없이 업데이트 된 줄 알았는데, 사이트를 생성해 배포하고 나서 잘못된 것을 발견하면 문제가 심각해진다. 주로 수식 표현에 문제가 생기거나 코드 하이라이트에 문제가 생겼다. 이미지 링크가 깨지는 경우도 있고, 레이아웃이 깨지는 경우도 있었다.

내 블로그에 방문자가 많은 것은 아니지만, 블로그를 깨진 상태로 방치할 수는 없다. 블로그에 깨진 링크나 이미지, 수식이 있다면 글의 신뢰도도 낮아질 것이다. 그렇다고 소프트웨어를 업데이트할 때마다 블로그의 모든 페이지를 확인할 수도 없다. 이건 Hexo(또는 Node.js)의 문제지 내 문제가 아니다.

Hugo에서는 아직 이런 문제를 경험하지 못했다. Hugo로 마이그레이션한 후 몇 번 Hugo 버전이 올라갔지만 문제를 발견한 적은 없다. Hexo를 쓸 때는 소프트웨어 업데이트 후에 수백 페이지를 확인하며 혹시 깨진 데가 없나 확인해야 했지만, Hugo에서는 소프트웨어 버전 업데이트 후에도 마음이 편하다.

테마

블로그를 Hugo로 이전할 때 가장 마음에 걸렸던 것 중 하나가 테마다. Hexo도 그렇고 Hugo도 그렇고 이미 다른 사람들이 작성한 예쁜 테마가 많지만, 마음에 쏙 드는 테마를 찾기도 어려웠다. 테마를 직접 작성해야 블로그에 대한 모든 통제를 할 수 있다는 생각도 들어 테마는 직접 작성한 것을 사용하고 싶었다.

Hexo를 쓸 때 EJS로 테마를 작성해 사용했는데, 이걸 Hugo에서 사용할 수 있게 바꾸는 게 쉬울지 걱정이었다. 블로그 테마를 작성하는 것은 재미있는 일이지만 여기에 너무 많은 시간을 보내고 싶지는 않았다. 다행히 Hugo에서도 똑같이 보이도록 테마를 수정하는 것은 생각만큼 어렵지 않았다.

Hexo로 사이트를 만들었을 때 불만 중 하나는 불필요한 페이지 생성을 막을 방법을 찾을 수 없다는 점이었다. 예를 들어 아카이브 페이지(/archive)를 페이지 처리하지 않도록 설정했는데도 /archive/page/2, /archive/page/2 같은 페이지가 생성되었다. Hugo에서는 이런 불필요한 페이지가 생성되지 않는다.

컨텐트 관리

Hexo에서는 _draft 디렉터리가 따로 있어 작업중인 글은 _draft 디렉터리에 보관하고 공개할 때는 파일을 _posts 디렉터리로 옮겼다. Hugo에서는 content 디렉터리에 실제 생성할 사이트 URL 경로와 동일한 구조로 디렉터리 구조를 만들어 파일을 관리하면 된다. 작업중인 글은 front matter에서 draft:true로 설정해 놓으면 로컬 서버에서는 보이고 사이트 생성 시에는 제외된다.

Hugo에서 한 가지 아쉬운 점이 있다. 나는 글을 연도별 디렉터리에 관리하는데 Hugo에서는 디렉터리가 다른 글에 대해서는 Prev/Next 링크를 만들어주지 않는 것 같다. 그래서 현재 블로그에서는 2017년도 마지막 글에서 2018년도 첫 글로 연결되는 Prev 링크가 없고, 2018년도 첫 글에서 2017년도 마지막 글로 연결되는 Next 링크가 없다. 그러나 치명적인 단점은 아니다.

Hexo와 Hugo의 컨텐트 관리 방식은 어느 쪽이 더 낫다기 보다는 그냥 방식이 다른 것이라 생각한다. 이 정도 차이는 충분히 적응할 수 있다. 지금은 이미 Hugo 방식에 적응했다.

배포

Hexo에서는 hexo generate --deploy 명령으로 사이트 생성과 배포를 한 방에 할 수 있었다. 사이트 소스를 업데이트한 경우에는 커밋 메시지를 잘 지정해 커밋을 할 수 있고, 사이트를 생성해 배포하는 경우에는 Hexo가 Site updated: + timestamp 형식의 커밋 메시지를 생성해 푸시한다.

Hugo에는 따로 배포 명령이 있는 것 같지 않다. hugo 명령으로 사이트를 생성한 다음 public 디렉터리에 생성된 파일을 직접 배포해야 한다. 새 글을 쓰고 배포할 때마다 소스 저장소와 public 디렉터리를 따로 커밋하고 푸시해야 해 번거롭다. 그러나 성능과 안정성을 고려하면 이 정도 불편은 충분히 감수할 수 있다.

결론

Hugo로 바꾸길 잘 한 것 같다. 블로그 생성 속도가 예전보다 훨씬 빨라져 만족스럽다. 버전을 업그레이드 해도 사이트가 깨지지 않아 마음이 편하다. Go 언어를 모른다는 점이 마음에 조금 걸리지만, 최종 사용자로서 Hugo를 사용한다고 생각하면 불편하게 여길 일도 아니다. 내가 사용하는 모든 소프트웨어의 개발 언어를 알아야 하는 것은 아니니까. 그러나 Hugo 사용을 계기로 Go 언어를 공부해볼까 하는 생각을 해보기도 한다.