한글·이모지·줄바꿈에서 글자 수와 UTF-8 바이트가 달라지는 이유
사용자가 보는 글자, 공백 제외 글자, 단어, 줄, UTF-8 바이트를 구분해 제출 제한을 정확히 확인합니다.
마지막 검토: 2026년 8월 25일 · 로직 버전 20260724-1 · 검증 벡터 한글/공백/이모지/줄바꿈
PROBLEM
왜 이 구분이 필요한가
화면에서 한 글자로 보이는 이모지는 여러 Unicode code point의 조합일 수 있고, 한글 한 글자는 UTF-8에서 보통 3바이트입니다. 그래서 자기소개서의 글자 제한, API의 byte 제한, SMS 과금 단위를 같은 숫자로 다루면 오차가 생깁니다. 줄바꿈도 운영체제에 따라 CRLF나 LF로 저장되지만 줄 수와 byte 수의 목적은 서로 다릅니다.
PROCEDURE
실무 적용 순서
먼저 제출처가 공백 포함 글자, 공백 제외 글자, UTF-8 byte 중 무엇을 제한하는지 확인합니다. 원문을 도구에 붙여넣고 다섯 지표를 각각 기록합니다. 공백 제외 값은 Unicode 공백을 제거한 뒤 세며, 단어 수는 형태소 분석이 아니라 공백 덩어리를 나누는 기준입니다. 이모지가 많은 문서는 실제 제출 서비스의 미리보기와 비교하고 API라면 전송 직전 UTF-8 byte 제한도 검증합니다.
BASIS
계산과 검증 근거
가능한 브라우저에서는 Intl.Segmenter가 grapheme cluster 단위로 사용자가 인식하는 글자를 나눕니다. UTF-8 byte는 TextEncoder 결과 배열의 길이입니다. 단어는 Unicode 공백을 기준으로 분리하고 줄은 CRLF, CR, LF를 한 줄 경계로 처리합니다. Segmenter가 없는 브라우저에서는 Array.from fallback을 사용하므로 결합 이모지 수가 달라질 수 있습니다.
LIMITS
지원 범위와 한계
입력 길이에 명시적 상한은 없고 브라우저 메모리에 의존합니다. 단어 수는 한국어 형태소나 문장 의미를 분석하지 않습니다. UTF-8 byte는 GSM-7, UCS-2 같은 SMS 인코딩과 다릅니다. 플랫폼이 자체 정규화, URL 단축, 금칙 문자 규칙을 쓰면 도구 결과와 다를 수 있습니다.
WORKED EXAMPLES
직접 재현할 예제
한글·이모지·줄바꿈 혼합
- 입력
- A 한글 😀\nB
- 결과
- 공백 포함 8자 / 공백 제외 5자 / UTF-8 15바이트 / 4단어 / 2줄
각 숫자는 서로 다른 제출 규칙을 나타냅니다.
가족 이모지
- 입력
- 👨👩👧👦
- 결과
- 지원 브라우저에서 1 grapheme
여러 code point가 하나의 사용자 인식 글자를 이룹니다.
한글 byte
- 입력
- 한글
- 결과
- 2 grapheme, UTF-8 6바이트
현대 한글 음절 하나는 UTF-8에서 보통 3바이트입니다.
공백 제거
- 입력
- 가 나\n다
- 결과
- 공백 포함 5자, 공백 제외 3자
공백과 줄바꿈을 제거한 값은 원문 길이와 목적이 다릅니다.
FAQ
자주 묻는 질문
가족 이모지가 한 글자인 이유는 무엇인가요?
여러 code point가 ZWJ로 결합된 하나의 grapheme cluster이기 때문입니다.
SMS 글자 수와 다른 이유는 무엇인가요?
SMS는 통신사와 메시지 종류에 따라 GSM-7, UCS-2 등 별도 인코딩 규칙을 사용합니다.
제출 플랫폼 숫자와 다르면 무엇을 따라야 하나요?
실제 접수와 차단을 수행하는 제출 플랫폼의 규칙을 우선해야 합니다.
입력 최대 길이가 있나요?
도구에 명시적 제한은 없지만 매우 긴 입력은 브라우저 메모리와 처리 성능에 영향을 받습니다.
SOURCES