Blog 이전하기 (2023)

10년도 더 전에 static site generator를 쓰는 것으로 이전해보겠다했었는데, 정작 이제야 실행에 옮겼다. 모든 걸 다 옮긴 것은 아니고 아래처럼 옮겼다.

  • 2011년 및 그 이후의 (거의 모든) 글들. 그 이전 글들은 draft상태로 저장만 해놨는데 언제 살릴진 모르겠다.
  • 페이지로 작성한 글들. 아직 공개하지 않았고 차차 살릴 생각.
  • 이전 permalink. /blog/archives/{numeric-post-id} 형식의 링크는 모두 유지. 이걸로 Google 검색은 가능한 범위 내에서 안깨보려고 노력했다.

댓글 포함한 일정 부분은 포기. DB 백업이 있으니 되살릴 순 있지만 당장은 계획이 없다.


어떻게 옮겼는가?

우선 wordpress-to-hugo-exporter 를 이용해서 CLI로 덤프했다. 그리고 가져온 markdown 파일에서 일부분을 수정했다.

  • 모두 draft로 전환: find . -type f -name '*.md' -exec gsed -i -E -e 's/^title:/draft: true\ntitle:/' '{}' ';'
  • 각 글에서 type: post 제거. 이거 빼야 렌더링이 되더라. find . -name '*.md' -exec gsed -i -E -e '/^type: post/d' '{}' ';'
  • 시간대가 UTC로 잡혀서 이걸 UTC+9 로 변경1

이러고 나선 개별 글을 1년 단위 씩 묶어서 검수하면서 변환했는데, jetpack markdown 기능을 쓴 경우 HTML 태그가 많이 남아있어서 바로 쓸 수 없었다. Python markdownify를 써서 아래 명령을 만들었다:

#!/bin/bash -e

markdownify \
  | cat -s \
  | gsed -E -e '/^$/d' -e 's/[ \t]+$//'

그리고 이걸 vim에서 :'<,'>%!markdownify.sh 해서 변환했다. 생각보다 수작업이 좀 필요해던 것은 내부 링크 살리는 부분이었는데, 이건 간단히 짠 스크립트로 안되어서 손으로 좀 많이 고쳤다. 대강 10년치 검수하고나니 공개하기로 결정. 나머지는 시간이 해결해주겠지. 여기까지 오는데 휴일 2일 포함해서 4일을 썼다.


  1. 아래와 같은 스크립트를 만들어서 썼다. 한국 표준시가 DST였다면 이렇게 간단하겐 안되었을 것.

    git grep --files-with-matches '^date:.*+00:00' \
      | xargs -n 1 bash -c \
        'DT=$(TZ=ETC/UTC date -j -v+9H -f %Y-%m-%dT%H:%M:%S\+00:00 \
            $(egrep "^date: .*\+00:00" $0 | cut -d" " -f2) \
            \+%Y-%m-%dT%H:%M:%S+09:00); \
        gsed -i -E -e "s/^date:.*$/date: $DT/" $0'
    
     ↩︎