한글 파일명 자소분리로 공유 폴더에 같은 파일이 두 개 생길 때
공유 폴더에 김민수 - 3분기 예산.xlsx라는 파일이 두 개 보이는데 하나는 열리지 않거나, 분명히 눈앞에 있는 파일을 윈도우 검색으로는 찾을 수 없다면, 한글 파일명 자소분리 문제를 겪고 있는 것입니다. 맥을 쓰는 동료가 한글, 일본어 가나, 악센트가 붙은 알파벳이 들어간 파일명을 분해된 형태(NFD)로 저장했고, 윈도우와 대부분의 리눅스 서버, 많은 웹 서비스는 조합된 형태(NFC)를 기대하기 때문입니다. 화면에서는 두 이름이 똑같아 보이지만 실제 바이트는 다르기 때문에 드라이브는 둘을 나란히 저장합니다. 해결 방법은 문제가 된 파일을 한 번 NFC로 바꾸고, 다시 생기지 않도록 몇 가지 습관을 정하는 것입니다.
한글 파일명 자소분리가 공유 저장소에서 충돌하는 이유
유니코드에서는 같은 글자를 두 가지 방식으로 적을 수 있습니다. 한은 하나의 코드 포인트(조합형, NFC)일 수도 있고, ㅎ, ㅏ, ㄴ이라는 자모 세 개가 이어진 형태(분해형, NFD)일 수도 있습니다. 그래서 한글이라는 이름이 바이트 수준에서는 ㅎㅏㄴㄱㅡㄹ로 저장되는 일이 생깁니다. 일본어 が(か + 탁점), 프랑스어 é(e + 악센트 기호), 독일어 ü도 마찬가지입니다.
macOS는 오래전부터 파일명을 NFD로 저장해 왔고, 지금도 Finder와 많은 맥 앱이 그렇게 파일을 만듭니다. 윈도우는 입력도 저장도 NFC로 합니다. 각 운영체제는 상대편 형태도 화면에 제대로 표시해 주기 때문에, 파일이 공유 공간에서 만나기 전까지는 아무도 눈치채지 못합니다.
- SMB 공유, NAS(시놀로지, QNAP, 윈도우 파일 서버, 리눅스 Samba). 파일 시스템은 클라이언트가 보내는 바이트를 그대로 저장합니다. 맥에서 NFD로 저장하고, 나중에 윈도우 사용자가 NFC로 저장하면 파일이 두 개가 됩니다. 어느 쪽 컴퓨터도 둘을 같은 이름으로 보지 않습니다.
- Google 드라이브, Dropbox, OneDrive. 데스크톱 동기화 클라이언트는 기기 간 파일명을 비교합니다. 클라이언트와 버전에 따라 맥의 NFD 이름과 PC의 NFC 이름을 다른 파일로 취급해 "충돌하는 사본" 파일이 생기거나 조용히 중복 파일이 만들어집니다. 웹에서 검색하면 둘 중 하나만 나올 수 있습니다.
- 카카오톡, 메일, 그룹웨어, Slack, Teams. 첨부파일은 보낸 사람 컴퓨터가 붙인 파일명을 그대로 가져갑니다. 맥 사용자가 보낸
이력서_박지은.pdf를 윈도우에서 내려받으면 디스크에는 NFD 이름으로 저장됩니다. 열리기는 하지만 나중에 같은 이름을 타이핑해서 검색하면 윈도우 검색이 찾지 못합니다. - 스크립트, 빌드 도구, Git. 문자열을 바이트 단위로 비교하는 모든 도구는 서로 다른 경로 두 개로 봅니다. 맥의 Git은 한글 파일을 삭제 후 다시 추가된 것으로 보고하거나, 윈도우 동료가 커밋한 파일을 찾지 못하기도 합니다.
중요한 점은 아무것도 손상되지 않았다는 것입니다. 파일 내용은 모두 멀쩡합니다. 같은 글자를 어떻게 적을지에 대해 이름만 서로 다를 뿐입니다.
어느 쪽이 NFD 파일인지 확인하는 방법
이름을 바꾸기 전에 진단부터 확인하세요. 눈으로는 구분할 수 없으므로 코드 포인트를 직접 봐야 합니다.
윈도우(PowerShell)
- 파일 탐색기에서 해당 폴더를 열고 주소창을 클릭한 뒤
powershell을 입력하고 Enter를 누릅니다. - 다음을 실행합니다.
Get-ChildItem | ForEach-Object { "$($_.Name) -> $([int[]][char[]]$_.Name -join ' ')" } - 중복된 두 파일을 비교합니다. 한글 NFC 음절은 44032~55203 범위의 숫자 하나로 나타나고, NFD는 4352~4607 사이의 숫자가 여러 개 이어진 형태로 나타납니다.
é의 경우 NFC는233, NFD는101 769(e와 결합 악센트)로 보입니다.
맥(터미널)
- 터미널을 열고 해당 폴더로
cd합니다(cd를 입력한 뒤 Finder에서 폴더를 창으로 끌어다 놓으면 됩니다). - 다음을 실행합니다.
python3 -c "import os,unicodedata as u; [print(n, 'NFD' if n!=u.normalize('NFC',n) else 'NFC') for n in os.listdir('.')]" NFD로 표시된 이름은 모두 윈도우와 리눅스가 NFC 쌍둥이 파일과 다른 파일로 취급하는 것들입니다.
터미널 없이 빠르게 확인하기
파일 속성이나 정보 가져오기 창에서 파일명을 복사해 FilenameFixer 웹앱의 텍스트 변환 칸에 붙여 넣으세요. 변환된 텍스트가 붙여 넣은 것과 다르면 그 이름은 NFD였던 것입니다. 변환은 브라우저 안에서 이루어지며 서버로 전송되지 않습니다.
이미 생긴 파일 정리하기
먼저 어느 사본이 최신인지 정합니다. 둘 다 열어 보고 수정 날짜를 확인한 뒤, 더 새롭거나 더 완전한 파일을 남깁니다. 그다음 남긴 파일의 이름을 NFC로 만듭니다.
방법 1: 윈도우에서 이름을 다시 타이핑하기
파일을 마우스 오른쪽 버튼으로 클릭해 이름 바꾸기를 선택하고, 이름 전체를 지운 뒤 키보드로 다시 입력합니다. 윈도우는 타이핑하면 NFC로 만들기 때문에 새로 입력한 이름은 항상 기대하는 형태가 됩니다. 파일이 한두 개라면 도구 없이 이 방법으로 충분합니다. 다만 예전 이름을 복사해서 붙여 넣으면 NFD 바이트가 그대로 유지되므로 효과가 없습니다.
방법 2: 공유 폴더에 올리기 전에 맥에서 일괄 변환하기
파일이 맥에서 만들어졌다면 출발점에서 고치는 것이 가장 깔끔합니다. FilenameFixer 웹앱을 열고 파일이나 폴더 전체를 페이지에 끌어다 놓은 뒤, 이름이 NFC로 변환된 파일을 내려받으면 됩니다. 무료이고 여러 파일을 한 번에 처리하며, 브라우저 안에서 로컬로 동작하므로 파일 자체가 컴퓨터 밖으로 나가지 않습니다. 디자이너나 번역가가 한글 이름이 붙은 파일 수십 개를 공유 폴더에 올리기 직전에 쓰기 좋은 방법입니다.
방법 3: 리눅스 NAS나 서버에서 명령줄로 처리하기
NAS나 Samba 서버에 셸로 접속할 수 있다면 convmv로 이름을 제자리에서 정규화할 수 있습니다.
convmv -f utf8 -t utf8 --nfc -r /volume1/shared/project
처음에는 --notest 없이 실행해 무엇이 바뀔지 확인하고, 그다음 --notest를 붙여 실제로 적용하세요. convmv가 없는 환경에서는 파이썬의 unicodedata.normalize('NFC', name)을 짧은 os.rename 반복문에 넣으면 같은 일을 할 수 있습니다.
방법 4: 윈도우 폴더 전체를 PowerShell로 처리하기
Get-ChildItem -Recurse | Where-Object { $_.Name -ne $_.Name.Normalize('FormC') } |
ForEach-Object { Rename-Item $_.FullName $_.Name.Normalize('FormC') }
NFC 쌍둥이 파일이 이미 있으면 그 파일에 대해 Rename-Item이 실패하는데, 이것이 오히려 안전장치가 됩니다. 한쪽을 덮어쓰는 대신 두 사본을 직접 비교해서 합치도록 만들어 주기 때문입니다.
카카오톡이나 메일로 받은 ZIP 압축파일
맥 사용자가 압축한 ZIP 안에 중복 파일이 들어 있으면, 윈도우에서 풀 때마다 모든 폴더에서 같은 문제가 반복됩니다. 압축을 푼 뒤에 일일이 이름을 바꾸는 대신, 압축파일을 ZIP 파일명 복구 도구(200 MB까지)에 넣으면 항목 이름이 NFC로 다시 쓰여진 ZIP을 돌려받아 깔끔하게 풀 수 있습니다.
다음 중복을 막는 습관
이름 바꾸기는 한 번 하는 정리 작업입니다. 그 뒤로 공유 폴더를 깨끗하게 유지하려면 다음 습관이 도움이 됩니다.
- 업로드할 때 정규화하기. 팀이 주로 Google 드라이브, Slack, 웹 기반 그룹웨어나 문서관리 시스템에서 일한다면, 맥 사용자는 FilenameFixer 크롬 확장 프로그램을 설치하면 됩니다. 웹사이트를 통해 파일을 올릴 때마다 파일명을 자동으로 NFC로 바꿔 주므로 NFD 이름이 애초에 서비스에 도달하지 않습니다. 학교 과제 제출이나 관공서 사이트 업로드처럼 한 번 올리면 되돌리기 어려운 경우에 특히 유용합니다.
- 모든 맥에서 Git의
core.precomposeUnicode설정하기.git config --global core.precomposeUnicode true를 실행하세요. 그러면 Git이 NFD 경로를 NFC로 바꿔 저장하므로, 맥과 윈도우 사용자 사이에서 파일이 삭제됐다 추가됐다 하는 유령 변경이 사라집니다. - 공유 폴더와 템플릿은 한 사람이 만들기. 폴더 이름은 파일 이름보다 훨씬 자주 복사됩니다. 프로젝트 최상위 폴더가 NFD로 된
2026년 평가라면 맥 사용자가 만드는 모든 하위 폴더가 그 문제를 물려받습니다. 윈도우에서 폴더 구조를 만들거나 한 번만 정규화해 두면 앞으로 생길 중복의 상당수를 없앨 수 있습니다. - 오래 쓰는 공유 경로는 가능하면 영문과 숫자로. 한국어 팀에서 항상 받아들일 수 있는 방법은 아니고, 자기 이름을 영어로 바꿔 써야 할 이유도 없습니다. 하지만
2026-Q3-예산보고서대신2026-Q3-budget처럼 내부 식별자 성격의 이름이라면 영문을 쓰는 데 비용이 들지 않고 문제 자체를 피할 수 있습니다. - 원인이 아니라 증상을 알아두기. "검색이 안 된다", "동기화에서 충돌하는 사본이 생겼다", "똑같은 파일이 두 개인데 하나는 0바이트다"는 모두 같은 버그입니다. 동료가 이런 증상을 말하면 누군가 파일을 지우기 전에 먼저 코드 포인트부터 확인하세요.
여기까지 어느 것도 유료 소프트웨어를 살 필요가 없습니다. 이름 다시 타이핑, PowerShell, convmv, Git 설정은 모두 기본 제공이거나 무료입니다. FilenameFixer가 제 몫을 하는 경우는 파일 수가 많을 때, 파일이 아직 맥을 떠나기 전일 때, 그리고 매번 기억해야 할 일을 하나 늘리는 대신 업로드 시점에 조용히 변환되기를 바랄 때입니다.