[macOS 한글 호환성 1편] 한글 자소분리 해결법

2019. 8. 28. 20:06

맥을 사용하면서 자주 접하게 될 한글 인코딩 호환성 문제

macOS에서 사용하는 한글 인코딩은 Windows와 다르다. 맥에서 만든 파일은 윈도우에서 자음과 모음이 분리되어 보인다. 많은 사람들이 이를 자소 분리현상이라고 말한다. 또한, 일부 사이트는 한글이 깨지거나, 다운로드한 파일의 이름이 깨지는 경우가 많다. 이 또한 인코딩이 달라서 생기는 문제이다.

이번 글에서 다룰 것은 아니지만, 이 현상은 iOS에서도 나타나는 현상이다. 하지만 지금까지 iOS 사용자들은 이런 불편함을 느끼지 못했다. 파일 공유가 어려워서, 다운로드한 파일을 수정하는 경우는 많지만, iOS 장치에서 파일을 생성하여 공유하는 경우는 거의 없었다. 또한, 주요 클라우드 서비스는 파일을 업로드하면 자소 분리를 해결해주기 때문에 한글 인코딩 문제가 크게 다가오지 않았다. 그런데, 앞으로는 iOS 사용자들도 자주 겪게 될 것이다. 9월 중 정식 공개될 iOS 13에서는 Files 앱을 통해 파일 관리를 쉽게 할 수 있다. 문제는 맥과 같은 인코딩을 사용하기 때문에 베타 사용자들 입장에서는 iOS 13에서 한글 처리에 문제가 생긴 것으로 느끼기도 할 수 있다는 것이다.

어쨌든, 이번 글을 통해 두 가지를 다룰 것이다.

  1. 업로드하는 파일의 자소 분리 문제와 해결법
  2. 다운로드하는 파일의 텍스트 깨짐과 해결법

원인

맥과 윈도우는 인코딩 방식이 다르다.

윈도우는 NFC(Normalization Form Canonical Composition) 방식을, 맥은 NFD(Normalization Form Canonical Decomposition) 방식을 사용한다. 한국어로는 보통 완성형, 조합형이라고 말한다.

조합형은 '콜'을 저장할 때, 'ㅋ' + 'ㅗ' + 'ㄹ'로 저장한다

문자 코드
11
12
13

이라고 하면 실제 저장 내용은 111213으로 저장된다
'ㅋ', 'ㅗ', 'ㄹ'을 입력하는 동안 코드는 11, 1112, 111213으로 바뀐다.

윈도우는 '콜'이라는 문자에 다른 코드를 할당한다.

문자 코드
11
12
13
2032
222355

이라고 하면 실제 저장 내용은 222355가 된다.

'ㅋ', 'ㅗ', 'ㄹ'을 입력하는 동안 코드는 11,2032,222355로 바뀐다.

위는 예시일 뿐이며, 실제로는 완성형 중에도 여러 가지, 조합형 중에도 여러 가지 인코딩 방법이 존재한다.

증상

두 가지 모두 표준 정규화 인코딩 방식이다. 맥은 윈도우에서 만든 파일을 제대로 처리할 수 있으니, 맥은 두 가지 표준을 모두 지원하는 셈이다. 윈도우는 조합형으로 인코딩 된 파일을 제대로 표시할 수 없으니 호환성이 떨어진다고 볼 수 있다.

그러나 일반적인 사용자 입장에서는 유니코드나 인코딩 표준에 대해서 알 겨를이 없으니 맥의 문제라고 착각하기 쉽다. 개인적으로는 현실에서 꽤 많은 사용자가 맥의 문제라고 인식하는 것 같다. 윈도우가 제대로 출력하지 못하는 것인데도 불구하고...

출처 : clien.net

해결법

하지만 점유율 부분에서 이런 문제를 신경 써야 하는 쪽은 맥 사용자다. 다행히도 맥에서는 완성형으로 인코딩 된 파일을 표시할 수 있다. 그래서 파일 명을 완성형으로 인코딩하면 된다.

convmv 설치

우선 convmv를 설치해야 한다. convmv는 CONVerts filenames from one encoding to another and MoVe라는 뜻으로, 인코딩을 바꾸는 툴이다. mv는 파일을 이동하는 명령인데, 이름을 바꾸는 데에도 사용한다. 그러므로 인코딩을 바꾸는 툴이라고 봐도 된다.

터미널을 열고 brew install convmv 를 입력한다. brew가 설치되어 있지 않다면 brew를 먼저 설치해야 한다. brew는 리눅스용으로 컴파일된 프로그램을 실행할 수 있게 해주는 환경을 만들어준다.

convmv 사용법

convmv -f utf8 -t utf8 --nfc --notest <filename>

텍스트 인코딩을 utf8에서 utf8로 바꾸는데, nfc 정규화 방식을 사용한다는 의미이다.

자세한 내용은 man convmv를 참고하면 된다.

Automator로 만들기

기존의 터미널은 파일을 직접 입력해야 한다. 하지만 오토메이터를 사용하면 Finder에서 파일을 선택하여 바로 실행할 수 있고, 또한 여러 파일을 자동화할 수도 있다.

실행 가능한 Workflow 파일 만들기

  • 오토메이터 실행
  • 새로 만들기
  • Quick Action 선택
  • 왼쪽 사이드바에서 Run Shell Script를 선택하고, 오른쪽으로 끌어온다.
  • 오른쪽 패널을 이미지와 같이 바꾸고 입력한다.

for i in "$@"; do
    /usr/local/bin/convmv -f utf-8 -t utf-8 --nfc --notest "$i"
done
  • 파일을 ~/Library/Services에 저장한다.

Finder에서 사용할 수 있게 등록하기

  • 시스템 메뉴(애플 로고)
  • 시스템 환경설정(System Preferences)
  • Extentions
  • Finder
  • 방금 만든 Quick Action 선택

Finder에서 사용하기

이젠 아래 이미지처럼 사용하면 된다.

  1. itda 2020.01.21 20:19

    안녕하세요?

    brew를 설치하라고 나오는데,

    convmv brew를 어디서 다운받고 어떻게 설치하는 건지 상세하게 알려주실 수 있는 지요?

  2. itda 2020.01.21 20:19

    안녕하세요?

    brew를 설치하라고 나오는데,

    convmv brew를 어디서 다운받고 어떻게 설치하는 건지 상세하게 알려주실 수 있는 지요?

    • BlogIcon 친절한 콜홍 2020.01.22 00:58 신고

      이 공식 홈페이지 참고하시면 됩니다
      https://brew.sh/
      영어가 어렵다면 번역기를 사용하시거나 한국 블로그 검색해보세요!!

      그리구 Convmv brew를 설치하는 것이 아니라, brew를 설치하면 이후에 brew를 통해 convmv를 추가로 설치하는 겁니다.
      brew 는 앱스토어 느낌으로 여러가지 커맨드 프로그램을 설치하고 관리해주는 프로그램입니다

  3. neotrue 2020.02.04 19:32

    정말,, 추천 드릴 수 밖에 없는 글이네요. 감사합니다!!

  4. 헥헥 2020.03.02 22:53

    자소 문제로 골치를 썩고 있었는데.. 좋은 팁 감사드립니다^^
    제가 초보라서.. 위 내용 중 궁금한게 있는데요..
    for i in "$@"; do /usr/local/bin/convmv -f utf-8 -t utf-8 --nfc --notest "$i" done
    위 명령은 한글로 된 폴더, 파일 둘다 적용할 수 있는건가요?
    혹은 한글로 된 폴더에 적용하면 하위 폴더(파일)에도 일괄 적용이 가능한가요?
    도움 부탁드립니다. (__)

    • BlogIcon 친절한 콜홍 2020.03.03 00:58 신고

      이 명령을 해석하자면

      파일 이름을 텍스트로 가져와서
      ("&@"부분) 텍스트 인코딩을 바꾸는 거예요(convmv 이하 부분)

      결론은 텍스트로 가져오는 것이기 때문에 하위 폴더에는 사용할 수 없습니다.


      또한 텍스트를 가져오는 것이기 때문에 파일이든 폴더든 상관 없이 인코딩 변경이 됩니다.

  5. 헥헥 2020.03.03 02:17

    하위 폴더 적용은 안되는군요.. 그럼 여러 개의 파일을 동시에 선택한 후 변환하는 것은 가능한가요?
    자꾸 귀찮게 해드려서 죄송합니다. ㅠ

  6. 헥헥 2020.03.11 01:21

    알려주신 팁을 오늘 적용해 봤습니다. 아주 잘되네요!! 감사합니다.^^

  7. workspace 2020.03.21 01:04

    안녕하세요 커맨드를 실행하면 자꾸

    Ready! I converted 0 files in 0 seconds.

    만 뜹니다.. 해결방법이 있을까요?

    • BlogIcon 친절한 콜홍 2020.03.21 14:43 신고

      명령 입력부분의 위쪽을 스크린샷처럼 바꾸셔야 합니다.
      위쪽을 바꿔야 파일 이름이 명령에 전달되거든요

  8. workspace 2020.03.21 21:30

    스크린샷과 동일하게 오토메이터를 설정해두었습니다.
    오토메이터로 해본결과 적용되는것 같지가 않아서 터미널로 입력해보았는데 터미널에서 입력시 똑같은 상황이 발생합니다 ㅜㅜ
    터미널에서 위치도 정확하게 설정해두었는데도 0files in 0seconds 만 출력됩니다.,..

    • BlogIcon 친절한 콜홍 2020.03.21 22:04 신고

      이건 파일 이름을 텍스트로 받는 것이기 때문에 터미널로 실행하면 안될 수도 있습니다.

      터미널로 테스트해보시려면 스크립트 세줄을 복사해서 test.sh로 저장하시고
      터미널에서 ./test.sh "테스트 할 파일" 을 입력해보세요.

  9. workspace 2020.03.21 22:14

    test.sh 를 chmod777 로 권한변경후 실행해본 결과 똑같이 0files in 0seconds 라고 출려됩니다... ㅠㅠ

    • BlogIcon 친절한 콜홍 2020.03.21 22:40 신고

      혹시 첫 줄이 for f in "$@" 로 되어 있진 않으신가요?

      오토메이터에서 Pass input: as arguments로 설정하면 코드 입력 부분에 샘플이 생기는데 그 샘플에서는 f를 사용합니다.
      이걸 i로 바꿔주세요.

  10. workspace 2020.03.21 23:11

    우선 피드백 계속 친절히 주셔서 너무 감사합니다 ㅜㅜㅜ
    오토메이터로 실행: 이미 i로 설정되어있네요... as arguments 가 한글 목록으로는 '변수'인것인거죠?
    test.sh로 실행: 스크립트를 계속 실행해봐도 같은 결과입니다.... 혹시나 하여 sudo 로도 실행해본 결과 똑같습니다...

    • BlogIcon 친절한 콜홍 2020.03.21 23:21 신고

      흠... File or directory not found라고는 안 뜨는거죠?

      혹시 파일 이름이 한글이 아닌건 아닌가요?
      파일명이 utf-8로 인코딩 된 것만 처리하는 것이기 때문에 실행이 안 될 수도 있습니다.
      그런 경우에는 바뀌지 않는 파일 이름을 파인더에서 한 번 바꾸고 실행하는 방법이 있구요. 이름에 무언가 한글을 추가해보세요.
      아니면 스크립트에서 -f utf-8 인 것을 원래 인코딩에 맞춰서 바꾸셔도 됩니다.

      파일 갯수가 적은 경우에는 전자가 편할거예요.

  11. workspace 2020.03.21 23:38

    다 한글 이름 파일들 입니다...
    file -I 커맨드를 돌려본 결과 charset=binary 라고 출력됩니다.
    그래서 -f 을 binary 라고도 해보고 base64라고도 해봤는데 결과는 똑같네요..
    진짜 뭐가 문제인 걸까요 ㅠㅠ
    cannot find directory 문제는 아닌것같습니다.

    • BlogIcon 친절한 콜홍 2020.03.22 11:50 신고

      제가 정상적으로 작동하는 파일도 charset=binary라고 나오네요.

      혹시 맥에서 방금 만든 파일로도 0files in 0 seconds라고 나오나요?

      brew에서 convmv를 업데이트하거나 재설치해보세요.


      파일을 찾지 못했다고 나오지 않는걸 봐서는 convmv명령까지 파일이 제대로 전달되는 것 같습니다.
      그렇다면 convmv에서 인코딩을 제대로 인식하지 못하는 것으로 보입니다.

    • BlogIcon 친절한 콜홍 2020.03.22 11:53 신고

      맥에서 새로 만든 파일로도 제대로 안 된다면

      1. 맥 구성 문제로 한글 인코딩이 이상한 것이거나
      2. convmv의 문제로 인코딩을 인식할 수 없거나
      둘 중 하나밖에 가능성이 없습니다.

      우선 convmv재설치 하시구요.
      가능하다면 다른 맥을 사용해보시고, 그게 어렵다면 다른 사용자계정을 만들어서 시도해보세요.

  12. 맥초보 2020.03.25 01:40

    좋은 정보 정말 감사합니다. 앞으로 맥으로도 과제할때 걱정 없을거 같습니다. 한가지 질문이 있는데요. 확장프로그램 설정에서 설정한 빠른동작이 터치바 항목으로 가 있습니다. 이걸 어떻게 Finder항목으로 옮길 수 있을까요? 저장할때 Finder로 설정했는데 이상하네요 ㅠㅠ

    • BlogIcon 친절한 콜홍 2020.03.25 19:19 신고

      Finder로 설정한 건 파인더에서만 이 오토메이터를 사용할 수 있게 하는거구요, 확장프로그램 설정에 나오는 것과는 관련 없어요.
      저는 파인더와 터치바 항목에 둘 다 나타납니다.

    • 맥초보 2020.03.25 19:56

      감사합니다. 한가지만 더 여쭤도 될까요? ㅠㅠ
      저는 우클릭 했을때 Services항목이 없습니다. 제가 잘못한게 있을까요?

    • BlogIcon 친절한 콜홍 2020.03.25 20:03 신고

      그게 확장 프로그램 설정에서 사용 체크를 해야 나타나는거예요.
      확장프로그램에 나타나지 않는 이유를 모르면 해결할 수 없을 듯합니다

    • 맥초보 2020.03.25 20:08

      됐습니다!!ㅎㅎ 잘 쓰겠습니다 ㅎㅎ

    • BlogIcon 친절한 콜홍 2020.03.25 20:08 신고

      다행이네요! 잘 쓰세요~

  13. Eric 2020.03.31 09:55

    이러한 방법 알려주셔서 감사합니다.
    제가 난독증이 있어서 그러는데요..
    convmv 설치 하고, Automator로 만들기 하고..

    그리고 파인더에서 항상 수정해 줘야 하는건가요??
    이런 질문 드려서 죄송합니다.

    • BlogIcon 친절한 콜홍 2020.03.31 10:26 신고

      오토메이터까지 알맞게 이해 하신거예요!

      그 아랫 단계를 하시면 언제든지
      파인더 - 파일 선택 - 마우스 우클릭 - 서비스 - 한글 파일명 자소분리 수정
      을 클릭해서 윈도에서 자소가 분리되어 보이는 현상을 해결할 수 있습니다!

  14. 디언 2020.04.13 11:09

    안녕하세요
    brew를 아래 명령어로 설치하고
    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    brew install convmv 로 convmv설치한후
    automator 실행 하고 캡쳐내용대로 넣은후 save한후
    finder에서 쓸수있게 service로 등록하고
    finder에서 한글명의 엑셀파일을 우클릭해서 해당 quick action을 클릭한후
    윈도우 pc에서 해당 파일을 봤는데.. 여전히 자소음이 분리되어 나타납니다 ㅠ
    혹시나해서 convmv를 uninstall 후 install다시했는데도 마찬가지에요..
    혹시 어느 부분을 놓쳤거나 점검해봐야할지요..

    • BlogIcon 친절한 콜홍 2020.04.20 00:15 신고

      어떤 의미인지 모르겠습니다.
      말씀하신 걸 보면 제대로 따라한 것 같습니다.
      처음부터 다시 한 번 차근차근 해보세요.

  15. mansesjh22 2020.04.20 00:13

    안녕하세요! 꿀팁 정말 감사합니다ㅠㅠ
    근데 과정 중에 오토메이터에 셸 스크립트를 쓰고 저장 전에 제가 잘못하고 run을 눌렀었는데요...ㅜㅜ이게 크게 문제되지는 않나요??

  16. 시미간 2020.04.24 16:43

    와우! 자소분리 문제 해결법을 찾던 중... 이 포스트를 발견했습니다!

    잘 작동합니다!

    감사합니다!

  17. ㅇㅇ 2020.05.01 04:19

    최근까지 활발히 댓글 달아주신거 보고 댓글 남깁니다.
    현재 MacOS 10.15.3에서, 정상 작동하지 않습니다. 코드 문제는 아니고요, 위에 어떤 분이 말씀하신 것처럼 제대로 변환이 안됩니다.

    ❯❯❯ convmv 도큐멘트.docx -f utf8 -t utf8 --nfc --notest
    Ready! I converted 0 files in 0 seconds.
    ❯❯❯ convmv -f utf8 -t utf8 --nfc --notest 도큐멘트.docx
    Ready! I converted 0 files in 0 seconds.
    ❯❯❯ convmv -f utf8 -t utf8 --nfd --notest 도큐멘트.docx
    mv "./도큐멘트.docx" "./도큐멘트.docx"
    Ready! I converted 1 files in 0 seconds.

    이런 상황이고요, 정확히 어떤 이슈인지 모르겠습니다. 확실한 것은 어떤 방법을 이용해도 convmv으로는 윈도우에서 한글 깨지는 현상이 없어지지 않아요. 최근까지 이 블로그에서 안내해준 오토메이터로 잘 쓰고 있었는데, Mac Version issue인지 convmv 이슈인지 모르겠어요 (전자같긴한데) 확인 가능한가요?

    • ㅇㅇ 2020.05.01 04:22

      폴더에 적용해도 마찬가지입니다.

      ❯❯❯ convmv -r -f utf8 -t utf8 --nfd --notest ./test
      mv "./test/도큐멘트.docx" "./test/도큐멘트.docx"
      Ready! I converted 1 files in 0 seconds.

      이렇게는 뜨는데, 막상 윈도우에서 보면 그대로 깨져 있어요.

  18. 노란공룡 2020.07.21 19:58

    맥에서 이 글의 방법으로도 iterm2에서 한글이 풀려서 보이시는 분들은, 아마도 macOS의 기본 Terminal에서는 잘 보일 겁니다. 이런 경우는 iterm2의 설정으로 간단히 해결 됩니다.

    iterm2 > preferences > Profiles > Text > Unicode normalization form 을 None에서 NFC 또는 HFS+로 바꿔보세요 --3--3---333 ^^

    • BlogIcon 조아라 2020.07.31 19:12

      우와 감사합니다 터미널에서 한글폴더 검색은 성공했는데 보이는건 깨져보여서 의아스러웠었거든요 덕분에 속시원해졌어요~!

  19. tky7068 2020.08.07 16:55

    참고가 되었습니다. 감사합니다. ^^

    • BlogIcon jewooks 2020.08.13 15:30

      일단 먼저 제가 오랫동안 스트레스 받았던 부분을 해결해 주셔서 너무 감사합니다 !

      저는 액셀 함수 출력 부분에 다른 엑셀시트를 넣을때 항상 한글이 깨져서 너무 괴로웠는데 작성자님 덕분에 속이 편해 졌습니다. 감사합니다 ㅠㅠ

  20. 2020.09.09 14:03

    비밀댓글입니다

    • BlogIcon 친절한 콜홍 2020.09.23 11:59 신고

      휴대폰을 바꾸면서 알림을 못 받았더니 이런 귀한 댓글에 답변을 못 드렸네요 ㅠㅠ

      확실히 맥에서 인코딩이 서로 다른 파일에 대해 작업하기 어려움이 있습니다.
      그래서 윈도우 사용자와 파일 공유를 하는게 아니더라도 인코딩을 바꿔두는게 편하기도 하지요.

      특히 구글 드라이브같은 파일 공유 서비스를 이용할 때 인코딩을 변경해주지 않는다면 파일이 겹치거나 동기화가 되지 않는 등 어려움이 있구요...

      좋은 의견 감사합니다!

+ Recent posts