OS X에서 생성한 Hexo 블로그 사이트의 전송

rsync help

Hexo로 생성된 정적 블로그 사이트 파일들은 서버에 업로드해야 서비스할 수 있다. 그런데 OS X에서 생성한 블로그의 카테고리나 태그에 한글이 사용된 경우 그대로 서버에 업로드하면 해당 카테고리나 태그 페이지를 찾지 못하는 오류가 발생한다. 그 이유는 OS X의 한글이 포함된 디렉토리와 파일명 인코딩 방법과 웹브라우저에 한글이 포함된 url을 인코딩하는 방법이 다르기 때문이다. 겉으로 보기에는 같은 디렉토리와 파일을 가리키는 것에도 사실은 전혀 다른 것을 가리키는 현상이 벌어지는 것이다.

윈도우를 제외한 대부분의 현대적 운영체제에서는 UTF-8 인코딩을 사용한다. OS X도 예외가 아니다. 그런데 OS X에서는 한글 디렉토리와 파일의 이름을 NFD(Normalization Form Canonical Decomposition) 방식으로 인코딩한다. 리눅스에서는 NFC(Normalization Form Canonical Composition) 방식으로 표현한다. 쉽게 말하면 OS X에서는 풀어쓰기를 하고 리눅에서는 모아쓰기를 하는 것이다. 그런데 풀어쓰기도 모아쓴 것으로 보여주는 터미널 프로그램으로 디렉토리와 파일 목록을 보면 똑같이 보이기 때문이 구분이 불가능하다. 이러한 현상은 한글뿐만 아니라 순수 로만 글자에 추가된 부호가 붙은 유럽어 문자, 가나, 한자에서도 볼 수 있다.

이 이론을 확인하기 위해 서버에서

1
$ convmv -f utf-8 -t utf-8 --nfc * --notest

와 같이 실행하여 한글이 포함된 디렉토리명을 NFC로 바꾸었더니 문제가 해결되었다. 그러나 블로그 사이트를 업로드할 때마다 이렇게 실행하는 것은 매우 번거로운 일이다. 그보다는

1
$ rsync -r --iconv=UTF-8-MAC,UTF-8 src-dir/* username@host:dst-dir

와 같이 --iconv=UTF-8-MAC,UTF-8 선택사항을 이용하여 rsync로 파일을 전송하는 것이 편리하다. 사용자의 OS X에 포함된 rsync가 2.6.9 등 2.X대라면 --iconv 선택사항이 작동하지 않는다. 그럴 때에는 다음과 같이 Homebrew로 최신판 rsync를 설치한다.

1
# brew install homebrew/dupes/rsync

Homebrew의 기본 정책은 OS X에 이미 포함된 도구는 추가로 설치하지 않는 것이지만 경우에 따라서는 추가 설치가 필요할 때도 있다.

참고 사이트