Skip to content

[DET-33] 나눔스퀘어 미지원 폰트 대응 (Pretendard)#164

Merged
Clt689 merged 4 commits into
devfrom
chore/merge-nanum-pretendard-font
Jul 12, 2026
Merged

[DET-33] 나눔스퀘어 미지원 폰트 대응 (Pretendard)#164
Clt689 merged 4 commits into
devfrom
chore/merge-nanum-pretendard-font

Conversation

@Clt689

@Clt689 Clt689 commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

변경 요약

  • scripts/merge-fonts.py — NanumSquareRound 빈 글리프를 Pretendard로 교체하는 병합 스크립트 추가
  • assets/fonts/nanum-pretendard/ — 병합 결과물(4개 웨이트) 커밋
  • src/lib/token/primitive/fonts.ts — 폰트 import 경로를 nanum-square-roundnanum-pretendard로 변경
  • .gitignore — 병합 결과물 제외 항목 삭제 (앱 빌드에 필요)

배경 및 접근 방식

NanumSquareRound는 모든 11,172개 한국어 음절을 cmap에 등록하고 있지만, 8,693개는 외곽선 없는 빈 글리프(contours=0) 다. , , 등 드문 음절을 TextInput에서 입력하면 iOS IME 조합 중 글자가 사라지는 현상의 원인이다.

해결책으로 두 가지를 검토했다:

방법 장점 단점
TextInput에서 fontFamily 제거 즉시 적용, 코드 변경 최소 TextInput만 시스템 폰트로 바뀌어 앱 전체 폰트와 시각적 불일치
폰트 병합 기존 디자인 유지, 앱 전체 폰트 일관성 보장 스크립트 실행 필요, 번들 사이즈 소폭 증가

앱 전체가 NanumSquareRound를 사용하므로 TextInput만 폰트가 달라지면 시각적 이질감이 생긴다고 판단, 병합 방식을 선택했다.

구현 세부 사항

fontTools 라이브러리를 활용한 빈 글리프 교체 방식:

  1. NanumSquare에서 contours=0인 한국어 음절 탐지 (8,693개)
  2. Pretendard를 NanumSquare UPM(1000)으로 스케일 조정 (Pretendard는 2048 UPM)
  3. 해당 음절의 glyph 데이터를 Pretendard 것으로 덮어씀 (합성 글리프 의존성 재귀 처리)
  4. 기존 cmap 엔트리는 그대로 유지 — fontFamily 문자열 변경 없음

OTA 배포 가능useFonts로 로드하는 JS 번들 자산이므로 네이티브 빌드 불필요

체크리스트

  • API Contract 변경
  • Env Variable(.env*) 키 추가/변경
  • AI Workflow
  • Auth/Permission 로직 변경
  • Lockfile(pnpm-lock.yaml 등) 변경
  • CI/CD 설정 변경

참고 이슈

  • Closes #

Clt689 added 2 commits July 10, 2026 01:01
NanumSquareRound 미지원 한글 음절(힣, 팉 등) 입력 시
TextInput에서 글자가 사라지는 현상을 해결하기 위한 도구.

사용법: python scripts/merge-fonts.py
사전 준비: pip install fonttools, scripts/pretendard/에 Pretendard .ttf 배치

Confidence: medium
Scope-risk: narrow
Not-tested: 실제 폰트 병합 결과물 앱 번들링 및 렌더링 검증 필요
@Clt689 Clt689 added the enhancement New feature or request label Jul 9, 2026
@Clt689
Clt689 requested a review from jihostudy July 9, 2026 16:04
@Clt689 Clt689 self-assigned this Jul 9, 2026
@Clt689 Clt689 changed the title chore(font): NanumSquareRound + Pretendard 폰트 병합 스크립트 [DET-33] chore(font): NanumSquareRound + Pretendard 폰트 병합 스크립트 Jul 9, 2026
@Clt689 Clt689 changed the title [DET-33] chore(font): NanumSquareRound + Pretendard 폰트 병합 스크립트 [DET-33] 나눔스퀘어 미지원 폰트 대응 (Pretendard) Jul 9, 2026
Clt689 and others added 2 commits July 10, 2026 01:08
NanumSquare는 11172개 한국어 음절 전체를 cmap에 등록하지만
8693개는 외곽선 없는 빈 글리프로, 힣·팋·탛 등 희귀 음절이
TextInput에서 사라지는 원인이었다.

scripts/merge-fonts.py 수정:
- fontTools Merger 대신 glyph 직접 교체 방식으로 변경
- NanumSquare 빈 글리프(contours=0) 탐지 후 Pretendard 글리프로 덮어씀
- UPM 불일치(Pretendard 2048 → NanumSquare 1000) scale_upem으로 정규화
- 합성 글리프(composite) 의존성 재귀 수집 지원

생성 폰트: assets/fonts/nanum-pretendard/ (4개 웨이트)
fonts.ts: nanum-square-round → nanum-pretendard 경로 변경
.gitignore: 병합 결과물 제외 항목 삭제 (앱 빌드에 필요)

Constraint: React Native는 CSS font-family 스택 미지원 — 단일 파일 병합 필수
Confidence: medium
Scope-risk: narrow
Not-tested: 실기기(iOS/Android) 렌더링 — 시뮬레이터 재확인 필요

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

@jihostudy jihostudy left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

실기기에서 확인은 해보신거겠죠? 맞다면 머지 가능 !! 고생하셨습니다 !

@Clt689
Clt689 merged commit c1a5dd7 into dev Jul 12, 2026
1 check passed
@Clt689
Clt689 deleted the chore/merge-nanum-pretendard-font branch July 12, 2026 09:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants