hsol/jaso

OSX 의 NFD 사용으로 인한 한글 자소분리 버그를 해결합니다.

60
GitHub 스타
12
포크
Python
언어
MIT
라이선스
2026.08.02
최근 푸시
2026.08.04
별표한 날

AI 분석

설치 난이도: 쉬움
큐레이터 노트
한글 파일명 자소분리 문제로 맥-윈도우 협업 시 불편을 겪는 개발자/디자이너에게 유용하다. 폴더 감시 기반 NFC 자동 변환과 LaunchAgents 활용 방식, 개인정보를 최소화한 통계 설계를 참고할 만하다.

강점

  • 맥에서 발생하는 한글 자소분리(NFD) 문제를 폴더 감시로 자동 해결해 주는 실용적인 도구다.
  • 여러 폴더를 동시에 감시할 수 있고, 로그인 시 자동 실행과 일괄 변환 기능을 제공한다.
  • Apple Developer ID 서명·공증으로 설치가 간편하고, 사용 통계도 익명으로 최소한만 수집한다.

약점

  • Apple Silicon(M1 이상) 전용이라 인텔 맥에서는 사용할 수 없다.
  • 기존에 있던 파일은 기본적으로 변환되지 않아 '한번에 변환'을 직접 실행해야 한다.
  • macOS 전용 앱이라 윈도우 사용자 쪽에서는 별도 조치가 필요하다.

주의사항

  • macOS 11 이상이 필요하며, 인텔 맥에서는 실행되지 않는다.
  • 앱을 다른 위치로 옮기면 로그인 시 자동실행을 껐다 켜야 한다.
  • 사용 통계가 기본적으로 전송되므로, 원하지 않으면 메뉴에서 꺼야 한다.
  • 감시 폴더에 이미 존재하는 파일은 자동 변환 대상이 아니라는 점을 인지해야 한다.

시작 가이드

  • Apple Silicon 맥에서 DMG를 설치해 실제 폴더 감시 및 자동 변환 동작을 확인해 본다.
  • docs/DEVELOPMENT.md를 읽고 빌드·릴리스·서명 설정을 파악한다.
  • 구글 드라이브·원드라이브 등 클라우드 동기화 폴더에서도 정상 동작하는지 테스트한다.
  • 인텔 맥 지원이나 윈도우용 대응 도구가 필요할지 검토한다.

README 한국어 번역

이 번역은 AI가 원문 README를 옮긴 것입니다. 원문이 항상 우선합니다.

자소

맥에서 만든 파일·폴더 이름의 한글이 윈도우에서 깨지는 것(자소분리)을 자동으로 막아주는 맥 앱입니다. 감시할 폴더를 지정해두면 — 여러 곳을 걸어둬도 됩니다 — 그 안에서 새로 생기거나 이름이 바뀌는 파일을 알아서 NFC로 되돌립니다.

⬇︎ 최신 버전 내려받기 (.dmg)

Apple Silicon(M1 이상) 맥 전용, macOS 11 이상이 필요합니다. 인텔 맥에서는 실행되지 않습니다. Apple Developer ID로 서명·공증했으므로 "확인되지 않은 개발자" 경고 없이 바로 실행됩니다.

무슨 문제인가요

맥(APFS/HFS+)은 파일명 한글을 NFD로 저장합니다. ㄱ + ㅏ + ㄱ처럼 자모로 쪼개서 씁니다. 반면 윈도우와 대부분의 소프트웨어는 NFC를 씁니다. 을 글자 하나로 씁니다.

그래서 맥에서 이렇게 됩니다.txt로 저장한 파일을 구글 드라이브·원드라이브·웹하드로 공유하면 윈도우 쪽에서는 이렇게 보입니다.

ㅇㅣㄹㅓㅎㄱㅔㄷㅗㅣㅂㄴㅣㄷㅏ.txt

10년 넘게 고쳐지지 않은 문제라서, 맥과 윈도우를 오가며 협업하면 계속 마주치게 됩니다.

기존 방식과 뭐가 다른가요

지금까지는 Contact반디네이머 같은 도구로 그때그때 일괄 변환하거나, convmv -r -f utf-8 -t utf-8 --nfc. 같은 명령을 직접 돌려서 해결했습니다. 문제는 한 번 고쳐도 끝이 아니라는 것입니다. 맥에서 파일을 하나 더 만들거나 이름만 바꿔도 그 파일은 다시 NFD가 되고, 윈도우 쪽 동료는 또 깨진 이름을 봅니다.

자소는 그 반복을 없앱니다. 폴더를 한 번 지정해두면 — 작업 폴더, 공유 폴더, 다운로드 폴더처럼 여러 곳을 함께 걸어둘 수 있습니다 — 이후로는 감시하다가 자동으로 NFC를 유지하므로, 변환을 "실행하는" 일 자체가 사라집니다.

앱 사용하기

1. 앱 실행

DMG 파일을 통해 설치한 후 Applications 폴더에서 자소 앱을 실행하거나, 개발 중이라면 다음 명령어로 실행할 수 있습니다:

poetry run python src/main.py

2. 대상 폴더 선택

자동변환을 원하는 폴더를 선택해줍니다.

이제 수정되거나, 이동하거나, 추가되는 폴더 및 파일명의 한글이 자소분리되지 않습니다!

폴더가 하나라도 걸리면 메뉴 맨 위에 "감시 중인 폴더" 아래로 감시 중인 폴더들이 걸어둔 순서대로 늘어서고, 구분선 아래가 명령입니다.

감시 중인 폴더
사진
문서
──────────
폴더 추가
한번에 변환
로그인 시 자동실행
도움말
종료

폴더를 더 걸려면 "폴더 추가"를 누릅니다 (아직 한 곳도 없을 때는 "대상 폴더 선택"입니다). 누를 때마다 목록에 한 줄씩 늘어납니다.

한 폴더만 빼려면 목록의 그 폴더 이름 위에 마우스를 올려 "감시 해제"를 누릅니다. 나머지 폴더는 그대로 감시가 이어집니다. (이름이 같은 폴더를 둘 걸었다면 서브메뉴 첫 줄의 전체 경로로 구분할 수 있습니다.)

걸어둔 폴더는 기억되므로, 앱을 다시 켜면 바로 이어서 감시합니다. 감시를 해제한 폴더는 기억에서도 지워져 다시 켜도 돌아오지 않습니다.

3. 로그인 시 자동실행

메뉴에서 "로그인 시 자동실행"을 클릭하면 체크 표시가 켜지고, 다음 로그인부터 앱이 자동으로 실행됩니다. 다시 클릭하면 해제됩니다.

내부적으로는 ~/Library/LaunchAgents/tech.proofer.jaso.plist를 만들거나 지우는 방식이며, 앱을 다른 위치로 옮겼다면 체크를 껐다 다시 켜주세요.

4. 한번에 변환

기본적으로 이전에 추가된 파일에 대해서는 변환을 진행하지 않습니다. 이 경우 "한번에 변환" 기능을 활용하여 변환할 수 있습니다. 등록된 폴더를 모두 훑고, 폴더별로 몇 개를 바꿨는지 알려줍니다.

5. 변환완료!

6. 사용 통계 보내기

어떤 기능이 실제로 쓰이는지 알기 위해 익명 사용 통계를 보냅니다. 보내는 것은 **앱 실행, 폴더 추가·해제, 한번에 변환(건수), 자동으로 이름을 바꾼 건수(한 시간에 한 번 합계), 자동실행 켬·끔, 오류 종류**와 앱 버전뿐입니다.

폴더 경로도 파일 이름도 보내지 않습니다. 계정이나 이메일도 없고, 설치할 때 만든 임의의 번호 하나로만 구분합니다.

메뉴에서 "사용 통계 보내기"를 클릭해 끄면 그 뒤로는 한 건도 나가지 않습니다.

개발자라면

빌드·릴리스·서명 설정은 docs/DEVELOPMENT.md에 있습니다.

원본 저장소: hsol/jaso

라이선스: MIT

게재 제외를 원하시면 삭제 요청을 보내주세요.