글자수와 바이트는 다르다
글자수는 사람이 보는 글자의 개수이고, 바이트는 그 글을 컴퓨터에 저장할 때 차지하는 크기입니다. 같은 글자라도 어떤 문자 인코딩(글자를 숫자로 바꾸는 규칙)을 쓰느냐에 따라 바이트 수가 달라집니다. 영문 알파벳과 숫자는 거의 모든 인코딩에서 1바이트지만, 한글은 인코딩에 따라 2바이트가 되기도 하고 3바이트가 되기도 합니다.
UTF-8: 오늘날의 표준
UTF-8은 웹 페이지와 대부분의 현대 소프트웨어가 쓰는 인코딩입니다. 유니코드 번호(코드 포인트)의 크기에 따라 1~4바이트를 씁니다(RFC 3629).
| 코드 포인트 범위 | 바이트 | 예 |
|---|---|---|
| U+0000 ~ U+007F | 1 | 영문, 숫자, 기본 기호 |
| U+0080 ~ U+07FF | 2 | é, ñ, 그리스·키릴·아랍 문자 |
| U+0800 ~ U+FFFF | 3 | 한글, 한자, 가나 |
| U+10000 ~ U+10FFFF | 4 | 대부분의 이모지, 옛 문자 |
한글 완성형 음절(가~힣, U+AC00~U+D7A3)은 모두 세 번째 구간에 있으므로 UTF-8에서 한 글자 3바이트입니다. 예를 들어 ‘안녕하세요’는 5글자, 15바이트입니다.
UTF-16
자바스크립트·자바·윈도우 내부에서 쓰는 UTF-16은 대부분의 글자를 2바이트로, 이모지처럼 U+10000 이상인 글자를 4바이트(서로게이트 쌍)로 저장합니다. 자바스크립트의 문자열 길이가 이모지를 2로 세는 이유가 여기에 있습니다.
EUC-KR: 한국형 완성형 인코딩
EUC-KR은 한국 산업 표준 KS X 1001을 바탕으로 한 인코딩입니다. 영문·숫자는 1바이트, KS X 1001에 들어 있는 글자는 2바이트입니다. KS X 1001에는 자주 쓰는 한글 음절 2,350자와 한자 4,888자, 가나·그리스·키릴 문자와 여러 기호가 들어 있습니다.
문제는 현대 한글 음절 11,172자 가운데 2,350자만 들어 있다는 점입니다. ‘똠’, ‘햏’, ‘뷁’처럼 목록에 없는 글자는 기본 EUC-KR 두 바이트로 표현할 수 없습니다. 표준 부속서의 조합 방식으로 8바이트를 쓰는 방법이 있지만 지원하는 프로그램이 드물어, 대개 ‘?’로 바뀌거나 오류가 납니다.
CP949: 확장 완성형
CP949(마이크로소프트의 ‘통합형 한글 코드’)는 EUC-KR을 넓혀 현대 한글 11,172자를 모두 2바이트로 담습니다. 윈도우의 한국어 기본 코드 페이지였기 때문에 오래된 한국어 문서와 시스템에서 널리 쓰입니다. 영문 1바이트, 한글 2바이트라는 ‘한글 2바이트’ 관행은 대부분 이 방식에서 나온 것입니다.
바이트가 중요한 경우
- 문자 메시지: 국내 문자 서비스는 단문(SMS)을 흔히 90바이트로 안내하고 한글을 2바이트로 셉니다. 한글로는 약 45자입니다. 넘으면 장문(LMS)으로 바뀌어 요금이 달라질 수 있으니, 정확한 기준은 쓰는 서비스의 안내를 확인하세요.
- 데이터베이스 필드: 오라클의 VARCHAR2처럼 길이를 바이트로 재는 설정에서는 같은 20자라도 영문과 한글이 차지하는 크기가 다릅니다. UTF-8 데이터베이스라면 한글 한 글자가 3바이트를 씁니다.
- 공공·금융 서식: 오래된 시스템과 연계되는 서식은 입력 칸 제한을 바이트로 두는 경우가 있습니다.
이 도구의 계산 방식
UTF-8 바이트는 각 글자의 코드 포인트로 정확히 계산합니다. EUC-KR과 CP949는 각 인코딩의 실제 문자표를 기준으로 글자마다 2바이트로 표현 가능한지 확인해 계산합니다. 표현할 수 없는 글자(이모지, 목록에 없는 한글 등)는 보통 ‘?’ 한 바이트로 바뀌므로 1바이트로 계산하고, 그런 글자가 몇 개인지 따로 표시합니다. 자소서 모드에서는 제한 기준을 ‘바이트(한글 2)’로 고르면 CP949 방식으로 셉니다.
기준일: 2026-09-23