AI 구축 가이드2026-07-30

파이썬으로 만든 DXF 도면 한글 깨짐, 인코딩 아니라 폰트 문제였어요

타이틀카드 — "파이썬 DXF 도면 한글 깨짐 / 인코딩 아니라 폰트 문제였어요"

AI한테 "이 제어 도면 파이썬으로 그려줘"라고 시켰어요.
잠시 뒤 열어본 DXF 파일엔 글자 자리마다 □□□가 줄줄이 박혀 있더라고요.
치수도, 태그 이름도, 죄다 두부 모양 네모.

결론부터 말할게요.
이건 인코딩(글자 깨짐) 문제가 아니라, 폰트에 한글 글리프가 없어서 생기는 문제예요. 그래서 파일을 UTF-8로 다시 저장해봤자 안 고쳐져요.
해결은 딱 하나, 도면 텍스트 스타일에 한글 트루타입 폰트를 심어주는 거예요.

제 본업은 수소 설비 제어예요 — 판넬 설계, PLC 로직, 현장 커미셔닝.
요즘은 반복되는 도면 작업을 AI한테 파이썬 스크립트로 짜서 맡기는데, 그 과정에서 이 두부 깨짐에 제대로 한번 당했어요.
그것도 사람들 앞에서 라이브로 도면을 뽑아 보이던 자리에서요.
이 글은 그날 이 문제를 뜯어보고 규칙으로 박은 기록이에요. (전제: Windows + Python + ezdxf 라이브러리 기준, 2026년 7월 확인.)

1. 증상: AI가 그려준 도면에 한글이 죄다 □□□로 떴어요

가장 많이들 겪는 장면이에요. DXF는 멀쩡히 열리는데, 한글만 네모나 물음표로 보이는 경우죠.
영문·숫자는 정상이고 한글만 골라서 깨지면, 원인은 거의 정해져 있어요.

제가 겪은 건 이랬어요. AI가 짜준 스크립트로 도면을 뽑았더니, CAD에서도 미리보기에서도 한글 텍스트가 전부 두부였어요.

정상 : PLC 판넬 배치도  (영문·숫자만 있을 때)
깨짐 : □□□ □□□ □□□   (한글 텍스트 자리)

처음엔 저도 "파일 인코딩이 UTF-8이 아닌가?" 하고 그쪽부터 팠어요.
근데 그게 아니었어요. 파일을 어떻게 저장하든 한글은 계속 네모로 나왔거든요.
헛다리를 며칠 짚고 나서야 진짜 원인이 보였어요.

2. 진짜 원인: 인코딩이 아니라 '폰트에 한글이 없는' 거예요

핵심은 이거예요. DXF의 기본 텍스트 스타일은 txt.shx라는 영문 전용 폰트를 참조하는데, 이 폰트엔 한글 글자 모양 자체가 들어있지 않아요.
없는 글자를 그리라고 하니, CAD는 어쩔 수 없이 네모(□)로 자리만 채우는 거예요.

이걸 인코딩 문제랑 헷갈리기 쉬운데, 둘은 완전히 달라요.

- 인코딩 문제 = 바이트를 잘못 해석해서 글자가 "꺄뚫" 같은 이상한 글자로 바뀌는 것
- 폰트(글리프) 문제 = 글자 데이터는 멀쩡한데, 그릴 폰트에 그 모양이 없어서 네모로 나오는 것

제 도면은 후자였어요. 데이터엔 "판넬"이 제대로 들어있는데, 그걸 그릴 txt.shx에 '판'도 '넬'도 없으니 네모가 뜬 거죠.

두 문제의 갈림길 — 왼쪽 '인코딩 문제: 바이트 오역 → 판넬이 꺄뚫로', 오른쪽 '폰트 문제: 데이터는 판넬 정상 → 그릴 글리프 없음 → □□□'. 가운데 라벨 "한글만 네모면 폰트 문제, 이상한 글자로 바뀌면 인코딩 문제"

그래서 판별법은 간단해요.
한글만 골라 네모로 뜨면 폰트 문제, 전체가 이상한 글자로 바뀌면 인코딩 문제예요.
네모라면 파일을 아무리 다시 저장해도 안 고쳐지니, 폰트부터 손대야 해요.

3. 해결: 텍스트 스타일에 트루타입 폰트를 심고 전부 물려요

방법은 세 줄이면 끝나요. 한글 트루타입 폰트(맑은 고딕)로 텍스트 스타일을 하나 만들고, 모든 텍스트에 그 스타일을 물려주면 돼요.

ezdxf 기준으로 이렇게 했어요.

import ezdxf

doc = ezdxf.new()
msp = doc.modelspace()

# ① 한글 트루타입 폰트로 텍스트 스타일 생성
doc.styles.add("HANGUL", font="malgun.ttf")   # 맑은 고딕

# ② 텍스트마다 그 스타일을 반드시 지정
msp.add_text(
    "판넬 배치도",
    dxfattribs={"style": "HANGUL", "height": 3.0},
).set_placement((10, 10))

포인트는 add_text 할 때 "style": "HANGUL"빠뜨리지 않는 것이에요.
스타일만 만들어놓고 텍스트에 안 물리면, 그 텍스트는 여전히 기본 폰트(txt.shx)를 써서 도로 네모가 나요.

치수(dimension)를 쓴다면 치수 문자 스타일도 같이 지정해줘야 해요.

dimstyle = doc.dimstyles.get("Standard")
dimstyle.dxf.dimtxsty = "HANGUL"   # 치수 문자도 한글 스타일로
DXF 글자가 화면에 그려지는 경로 — ①텍스트 엔티티 "판넬" → ②참조하는 STYLE 확인 → ③STYLE이 가리키는 폰트 파일 → ④폰트에 글리프 있으면 정상 출력 / 없으면 □. 아래 라벨 "STYLE에 한글 폰트를 심어야 이 경로가 끝까지 이어진다"

4. 그래도 깨지면: 한글 고집 말고 영어로 (실전 폴백)

폰트 스타일을 심었는데도 깨질 때가 있어요.
맑은 고딕 파일(malgun.ttf)을 CAD나 렌더러가 못 찾는 환경이면, 스타일을 지정해도 대체 폰트로 밀려서 또 네모가 나거든요.

이럴 때 저는 도면 텍스트를 영어로 바꿔버려요.
정면도는 FRONT VIEW, 사양은 SPECIFICATION, 이런 식으로요.
깨진 한글보다 멀쩡한 영어가 도면으로선 훨씬 나아요.
실제로 제가 자동 생성하는 도면들은 지금 대부분 영문 라벨로 돌아가요. 폰트 환경을 안 타서 안전하거든요.

5. 확인 방법 (성공 판정 기준)

코드만 고치고 "됐겠지" 하면 안 돼요. 저는 이 두부에 데어서, 뽑은 뒤 반드시 눈으로 확인해요.

- ☐ 생성한 DXF를 이미지로 렌더링해서(ezdxf matplotlib 백엔드 등) 한글이 안 깨졌는지 눈으로 본다
- ☐ 도면 안 텍스트 엔티티의 style이 전부 "HANGUL"로 지정됐는지 세어본다 (하나라도 빠지면 그것만 네모)
- ☐ 다른 PC/뷰어에서도 한 번 열어본다 (폰트 없는 환경 대비)

이 세 개가 통과하면, 그 도면은 남한테 보내도 두부가 안 떠요.

자주 묻는 질문

Q. DXF 한글 깨짐, UTF-8로 저장하면 안 고쳐지나요?
대부분 안 고쳐져요. 한글만 네모(□)로 뜨는 건 인코딩이 아니라 폰트 글리프 부재 문제라, 파일 인코딩을 바꿔도 그대로예요. 텍스트 스타일에 한글 트루타입 폰트를 지정하는 게 정답이에요.

Q. txt.shx 말고 어떤 폰트를 쓰면 되나요?
한글 글리프가 든 트루타입 폰트면 돼요. Windows면 맑은 고딕(malgun.ttf), 굴림(gulim.ttc) 같은 게 무난해요. SHX 계열 중에도 한글 폰트가 있지만, 배포·호환을 생각하면 트루타입이 편해요.

Q. AI가 짜준 도면 스크립트인데 왜 이런 걸 놓치나요?
AI는 도면 그리는 코드는 빠르게 잘 짜지만, "이 환경에 한글 폰트가 있나", "스타일을 텍스트마다 물렸나" 같은 건 실제로 뽑아봐야 드러나요. 그래서 저는 AI가 짠 도면 스크립트는 무조건 한 번 렌더링해서 눈으로 확인하고 넘어가요.

정리하면요

DXF 한글 깨짐은 원인만 제대로 잡으면 세 줄로 끝나요.

| 볼 것 | 착각하기 쉬운 것 | 실제 해결 |
|---|---|---|
| 증상 | 한글만 □□□로 뜸 | 인코딩 아님 → 폰트 문제 |
| 원인 | 파일이 UTF-8이 아니라서? | 기본 폰트 txt.shx에 한글 글리프 없음 |
| 해결 | 파일 다시 저장 | STYLE에 malgun.ttf 심고 텍스트마다 물리기 |
| 최후 | 한글 고집 | 안 잡히면 영문 라벨로 폴백 |

AI한테 도면을 맡길수록, 저는 "코드가 돌았나"보다 "뽑은 걸 눈으로 봤나"를 먼저 챙겨요.
한 번 렌더링해서 확인하는 그 30초가 두부 사태를 막아주더라고요.
혹시 같은 네모에 막혀 계셨다면, 파일 인코딩 말고 폰트 스타일부터 확인해보세요.
도면 자동화하다 만난 이런 함정들은 makefield.ai에 종류별로 모아두는 중이에요.

---
태그: #DXF한글깨짐 #파이썬DXF #ezdxf한글 #DXF폰트 #CAD한글깨짐 #DXF두부 #도면자동생성 #malgun폰트 #txtshx #파이썬도면 #AI도면생성 #현장엔지니어 #제조업AI #엔지니어AI #도면읽는AI

현장 엔지니어를 위한 AI 전환 — MakeField AI

makefield.ai 보러가기 네이버 블로그에서 보기