← 전체 글

자소분리 현상? 맥 파일명 한글 깨짐 원인과 해결법

맥에서 만든 파일을 윈도우에서 열었더니 "계약서_최종.pdf"가 "ㄱㅖㅇㅑㄱㅅㅓ_최종.pdf"처럼 자음과 모음으로 쪼개져 보이거나, 탐색기 검색창에 분명히 보이는 이름을 입력해도 파일이 나오지 않는다면 파일 내용은 멀쩡합니다. 이름이 맥의 방식(NFD)으로 저장되어 있는데, 윈도우는 완성형(NFC)을 기대하기 때문입니다. 해결 방법은 이름을 완성형으로 다시 쓰는 것입니다. 파일이 몇 개 없다면 이름을 직접 다시 입력하면 되고, 여러 개라면 PowerShell 명령 한 줄이나 무료 브라우저 도구를 쓸 수 있습니다.

이 글은 개발 지식이 없어도 따라 할 수 있도록, 작업량이 적은 방법부터 순서대로 정리했습니다.

자소분리란 무엇이고 어떤 증상이 나타나나요

자소분리는 한글 한 글자가 자음과 모음 낱낱으로 나뉘어 보이는 현상을 말합니다. 파일 이름에서 "한글"이 "ㅎㅏㄴㄱㅡㄹ"로 보인다면 대부분 이 문제입니다. 같은 원인으로 다음과 같은 경우에도 이름이 깨질 수 있습니다.

  • 일본어의 탁음·반탁음이 글자에서 떨어져 나간 경우 (예: が가 か와 ゛로 분리)
  • é, ö 같은 악센트가 붙은 라틴 문자 (예: José, Zoë)
  • 베트남어처럼 성조 기호가 여러 개 겹친 글자

영문과 숫자만 쓴 이름, 예를 들어 "report_final_v3.docx" 같은 이름은 이 문제가 생기지 않습니다. 그래서 오랫동안 모르고 지나가는 경우가 많습니다.

윈도우에서 나타나는 증상은 보통 다음과 같습니다.

  1. 이름에 간격이 생기거나 글자가 분리되어 보입니다.
  2. 탐색기에서는 이름이 정상으로 보이는데, 검색창에 입력하면 결과가 없습니다.
  3. 같은 폴더에 이름이 똑같아 보이는 파일이 두 개 있는데 윈도우는 아무 경고도 하지 않습니다. 하나는 맥에서, 하나는 윈도우에서 만든 파일일 수 있습니다.
  4. 백업 프로그램이나 동기화 프로그램이 분명히 있는 파일을 "파일을 찾을 수 없음"으로 표시합니다.
  5. 웹 사이트 업로드가 거부되거나, 이름이 이상한 철자로 저장됩니다.

반대 방향도 같은 원인입니다. 윈도우에서 보낸 "Zoë.jpg"를 맥에서 받아 쓰는 스크립트가 윈도우식 철자를 찾지 못해 실패할 수 있습니다.

실제로는 카카오톡이나 메일로 첨부한 파일, 그룹웨어에 올린 결재 문서, 학교 과제 제출 사이트나 관공서 사이트에 올린 파일, USB·외장하드·NAS로 옮긴 파일에서 자주 보입니다.

NFD와 NFC를 쉽게 설명하면

유니코드는 컴퓨터가 여러 언어의 문자를 표현하기 위해 쓰는 표준입니다. 이 표준에서는 화면에서 똑같이 보이는 글자를 두 가지 방식으로 저장할 수 있습니다.

  • 완성형(NFC): "한"을 글자 하나로 저장합니다. 윈도우 한글 자판으로 "한"을 입력하면 이 방식으로 저장되고, 대부분의 웹 서버와 데이터베이스, 파일 시스템도 이 방식을 기본으로 가정합니다.
  • 분해형(NFD): "한"을 ㅎ, ㅏ, ㄴ 세 개의 자모로 저장합니다. "é"도 "e"와 그 위에 얹히는 악센트 기호 두 개로 저장하고, "が"도 "か"와 탁음 기호로 나뉩니다.

NFC와 NFD는 기술 문서에서 쓰는 용어일 뿐입니다. 외울 필요는 없고, 두 방식이 같은 글자를 다르게 저장한다는 것만 기억하시면 됩니다.

맥은 오랫동안 디스크에 이름을 분해형으로 저장해 왔습니다. 최근 맥은 두 방식을 더 유연하게 다루지만, 맥에서 쓰는 많은 프로그램은 여전히 분해형 이름을 만듭니다. Finder의 "압축" 기능으로 만든 ZIP 파일도 그중 하나입니다. 그래서 맥에서 나온 파일은 ZIP, 메일, USB, 공유 드라이브, 웹 업로드 같은 경로를 거치면서 분해형 이름을 그대로 가지고 나오는 경우가 많습니다.

윈도우는 두 형식을 자동으로 바꾸지 않습니다. 두 이름을 서로 다른 글자 순서로 취급하기 때문에, 같은 폴더에 "같은" 파일이 두 개 생기기도 하고, 완성형으로 검색하면 분해형 파일이 검색되지 않기도 합니다. 글자가 깔끔하게 보이는지 아니면 틈이 벌어져 보이는지는 글꼴과 프로그램에 따라 달라서, 같은 파일이 탐색기에서는 괜찮고 메일 프로그램에서는 깨져 보일 수 있습니다.

파일 내용에는 아무 영향이 없습니다. 분해형 이름을 가진 PDF도 다른 PDF와 똑같이 열립니다. 잘못된 것은 이름표뿐입니다.

파일 수에 맞는 해결 방법

파일이 몇 개인지에 따라 아래 방법 중 하나를 고르시면 됩니다.

한두 개라면 윈도우에서 이름을 직접 다시 입력하기

  1. 탐색기에서 파일을 선택하고 F2를 누릅니다.
  2. 깨진 부분을 지운 뒤, 한글 자판으로 이름을 직접 다시 입력합니다. 직접 쓴 문서에서 글자를 복사해 붙여넣는 방법도 있습니다.
  3. Enter를 누릅니다.

윈도우는 입력한 글자를 완성형으로 저장하므로 이후에는 정상적으로 동작합니다. 깨진 이름을 복사해서 그대로 붙여넣으면 분해형 철자가 다시 들어가므로 피하셔야 합니다.

폴더 안에 파일이 많다면 PowerShell 사용하기

PowerShell은 윈도우에 기본으로 들어 있고, .NET에는 문자열을 완성형으로 바꾸는 기능이 내장되어 있어서 따로 설치할 필요가 없습니다.

  1. 탐색기에서 해당 폴더를 엽니다.
  2. 주소 표시줄을 클릭하고 powershell을 입력한 뒤 Enter를 누릅니다. 그 폴더를 가리킨 상태로 PowerShell 창이 열립니다.
  3. 아래 줄을 붙여넣고 Enter를 누릅니다.
Get-ChildItem -File | Where-Object { $_.Name -ne $_.Name.Normalize('FormC') } | Rename-Item -NewName { $_.Name.Normalize('FormC') }

Where-Object 부분은 이미 완성형인 이름을 건너뛰므로, 두 번 실행해도 문제가 생기지 않습니다. 폴더 이름도 바꾸고 싶다면 -File을 지우고, 하위 폴더까지 포함하려면 Get-ChildItem 뒤에 -Recurse를 붙이면 됩니다. 중요한 파일이라면 대량 이름 변경을 할 때처럼 먼저 복사본에서 시험해 보시기를 권합니다.

명령줄을 쓰기 어렵거나 회사 PC라서 설치가 제한될 때는 브라우저 도구 사용하기

FilenameFixer 웹 앱은 무료이며, 브라우저에서 같은 변환을 합니다. 파일을 페이지에 끌어다 놓으면 분해형 이름을 완성형으로 한꺼번에 바꾸고, 결과 파일을 내려받을 수 있습니다. 파일과 파일 이름은 서버로 올라가지 않고 브라우저 안에서 처리됩니다. 계약서처럼 외부로 나가면 곤란한 문서라면 이 점을 확인하시면 됩니다. 엑셀이나 메일에서 이름 목록을 복사해 텍스트 입력란에 붙여넣으면, 완성형으로 바뀐 목록을 돌려받을 수도 있습니다.

압축파일(zip)을 풀었더니 이름이 깨질 때

ZIP 파일은 이 문제를 가장 많이 옮기는 매체입니다. 맥의 Finder 압축 기능이 분해형 이름을 압축 파일 안에 그대로 기록하기 때문입니다. 윈도우에서 풀면 그 안의 한글과 악센트가 붙은 이름이 모두 분해형으로 나타납니다.

먼저 압축을 풀고 위의 PowerShell 명령을 실행하셔도 됩니다. 압축을 풀기 전에 파일을 고치고 싶다면 ZIP 파일명 복원 페이지를 이용할 수 있습니다. 200MB 이하의 압축 파일을 올리면 안의 이름을 완성형으로 고쳐서, 윈도우에서 깔끔하게 풀리는 ZIP 파일을 돌려줍니다. 이 작업도 압축 파일을 업로드하지 않고 브라우저에서 처리합니다.

다만 이름이 단순히 분리된 정도가 아니라 물음표, 네모 상자, "À̹Ì" 같은 문자열로 읽을 수 없게 깨져 있다면 다른 문제입니다. 분해형 이름이 아니라 문자 인코딩이 맞지 않는 경우이므로, 이때는 윈도우의 "모두 압축 풀기"로는 해결되지 않을 수 있습니다. 인코딩 설정을 바꿀 수 있는 압축 프로그램을 찾아보시기 바랍니다.

다음에 같은 문제를 줄이는 방법

맥에서 파일을 보낼 때. 윈도우 사용자가 받을 파일이라면 가능한 한 이름에 악센트나 한글을 넣지 않는 편이 안전합니다. 영문과 숫자로 된 이름은 어떤 환경에서도 그대로 보입니다. 이름의 철자가 꼭 필요하다면 보내기 전에 완성형으로 바꾸고, 받는 사람이 이름이 이상하게 보일 때 어떻게 하면 되는지 함께 알려 주시면 좋습니다.

웹 사이트에 파일을 업로드할 때. 많은 사이트와 콘텐츠 관리 시스템이 완성형 이름을 기준으로 동작하기 때문에, 맥에서 올린 분해형 이름이 거부되거나 다르게 저장될 수 있습니다. FilenameFixer 크롬 확장 프로그램은 업로드 창에서 파일을 고르는 순간 이름을 자동으로 완성형으로 바꿔 주므로, 업로드 전에 따로 이름을 고치는 단계가 없어집니다. 확장 프로그램 자체에는 분석 도구가 포함되어 있지 않습니다.

스크립트를 만들거나 서버를 운영할 때. 파일이 시스템에 들어오는 지점에서 이름을 NFC로 정규화하고, 이름을 비교할 때도 양쪽을 모두 정규화한 뒤에 비교하는 것이 좋습니다. Python에서는 unicodedata.normalize("NFC", name), JavaScript에서는 name.normalize("NFC"), .NET에서는 name.Normalize(NormalizationForm.FormC)를 씁니다. 맥에서 Git을 쓰는 경우에는 git config --global core.precomposeunicode true를 설정하면, 파일 이름이 완성형으로 기록되어 맥과 윈도우 사이에서 변경 사항이 계속 나타나는 일을 줄일 수 있습니다.

자주 묻는 질문

파일이 손상된 것인가요? 아닙니다. 글자를 저장하는 방식만 다를 뿐이고, 이름을 바꿔도 파일 내용은 건드리지 않습니다.

탐색기에서는 이름이 정상으로 보이는데 검색이나 동기화에서 안 되는 이유는 무엇인가요? 대부분의 글꼴에서 탐색기는 두 형식을 거의 같은 모양으로 그립니다. 하지만 검색과 동기화 프로그램은 실제 글자 순서를 비교하므로, "é"와 "e + 악센트"는 서로 다른 것으로 판단됩니다.

맥 사용자는 이름 변경 후에도 파일을 정상적으로 볼 수 있나요? 네, 최근 macOS는 두 형식을 모두 읽습니다. 다만 여러 시스템을 오가는 파일이라면 완성형이 더 안전한 선택입니다.

따로 설치해야 하나요? PowerShell 방법은 설치가 필요 없습니다. 브라우저 도구는 Chrome, Edge, Firefox, Safari 같은 브라우저만 있으면 됩니다. 크롬 확장 프로그램은 선택 사항이며 웹 업로드를 할 때만 도움이 됩니다.

정리하면 다음과 같습니다. 자소분리는 같은 글자를 두 가지 방식으로 저장하는 데서 생기는 문제입니다. 맥은 대개 분해형으로, 윈도우는 완성형으로 이름을 다루기 때문에 충돌이 납니다. 이름을 직접 다시 입력하거나, PowerShell로 한꺼번에 바꾸거나, 브라우저 도구를 쓰면 파일이 다시 정상적으로 동작합니다.