SMS 한글 45자 제한, 왜 90바이트가 기준일까 — EUC-KR과 UTF-8 바이트 차이
"SMS는 한글 45자, 영문 80자까지"라는 안내를 문자 발송 서비스에서 한 번쯤 봤을 겁니다. 그런데 왜 하필 45와 80일까요. 두 숫자 모두 하나의 공통 기준에서 나온 값입니다 — SMS의 진짜 제한은 90바이트이고, 한글과 영문이 인코딩에서 차지하는 바이트 수가 다르기 때문에 글자수 제한이 서로 달라 보이는 것뿐입니다.
1. SMS의 진짜 기준은 글자 수가 아니라 바이트
통신 3사가 SMS 표준으로 쓰는 인코딩은 EUC-KR입니다. 이 인코딩에서 영문·숫자 1글자는 1바이트, 한글 1글자는 2바이트를 차지합니다. SMS 한 건의 최대 용량은 90바이트로 정해져 있으므로, 한글만으로 채우면 90÷2=45자, 영문만으로 채우면 이론상 90자지만 실제로는 발신번호·제어정보 등 헤더가 일부 바이트를 차지해 통상 80자로 안내됩니다. 즉 "한글 45자"와 "영문 80자"는 서로 다른 규칙이 아니라, 같은 90바이트 한도를 EUC-KR의 2바이트(한글)와 1바이트(영문) 단위로 나눈 결과입니다.
| 문자 종류 | EUC-KR 바이트/글자 | 90바이트 기준 최대 글자수 |
|---|---|---|
| 한글(완성형) | 2바이트 | 약 45자 |
| 영문·숫자 | 1바이트 | 약 80자(헤더 여유분 반영) |
| 한글+영문 혼합 | 혼합 계산 | 바이트 합산 90 이하까지 |
2. UTF-8과 EUC-KR, 한글 바이트 수가 다른 이유
웹페이지나 API에서 흔히 쓰는 UTF-8은 한글 완성형 한 글자에 3바이트를 씁니다. 반면 SMS가 쓰는 EUC-KR은 2바이트를 씁니다. 이 차이는 두 인코딩이 커버하려는 범위가 다르기 때문입니다. UTF-8은 이모지·전 세계 문자를 포함한 유니코드 전체(14만자 이상)를 가변 길이 바이트로 표현해야 하므로 한글처럼 유니코드 코드포인트 값이 큰 문자는 3바이트가 필요합니다. 반면 EUC-KR은 애초에 한글·한자 등 동아시아 문자만 다루도록 설계된 2바이트 고정 인코딩이라 더 적은 바이트로 표현할 수 있습니다. "우리 서버 DB는 UTF-8인데 SMS 발송 대행사는 90바이트라고 안내한다"는 상황에서, 그 90바이트는 UTF-8이 아니라 EUC-KR 기준이라는 걸 알아야 정확한 글자수를 계산할 수 있습니다.
3. 이모지·특수문자가 섞이면 기준이 또 바뀐다
EUC-KR은 이모지를 표현할 수 있는 문자 집합이 아닙니다. 그래서 메시지에 이모지가 하나라도 포함되면 상당수 통신사 SMS 시스템은 자동으로 UCS-2라는 2바이트 고정 유니코드 인코딩으로 전체 메시지를 다시 인코딩합니다. 이 경우 원래 한글 기준 45자였던 제한이 UCS-2 기준으로 재계산되면서 실질 최대 글자수가 70자 안팎까지 줄어드는 경우가 흔합니다. 즉 "이모지 하나만 넣었을 뿐인데 갑자기 글자수 제한이 확 줄었다"는 현상은 버그가 아니라 인코딩 전환에 따른 정상 동작입니다.
4. 정리
- SMS 90바이트가 진짜 기준: 한글 45자·영문 80자는 이 90바이트를 EUC-KR 바이트 단위로 나눈 결과일 뿐입니다.
- UTF-8과 EUC-KR은 한글 바이트 수가 다르다: UTF-8 3바이트 vs EUC-KR 2바이트.
- 이모지 포함 시 UCS-2로 전환: 제한 글자수가 더 줄어들 수 있습니다.
- 초과 시 자동 LMS 전환: 요금이 더 비싸므로 발송 전 바이트 수 확인이 중요합니다.
자주 묻는 질문
Q. SMS는 왜 한글 45자, 영문 80자로 제한이 다른가요?
A. SMS의 실제 제한은 '글자 수'가 아니라 '바이트 수'(90바이트)이기 때문입니다. 통신사가 SMS 바이트 계산에 쓰는 EUC-KR 인코딩에서 한글 1글자는 2바이트, 영문 1글자는 1바이트를 차지합니다. 90바이트를 2로 나누면 45(한글), 헤더 여유분을 감안하면 80(영문) 안팎이 나오는 구조입니다.
Q. 90바이트를 넘으면 어떻게 되나요?
A. 자동으로 LMS(장문 메시지)로 전환됩니다. LMS는 최대 2,000자까지 보낼 수 있지만 SMS보다 요금이 비쌉니다. 대량 문자 발송 서비스를 쓸 때 무심코 몇 글자만 넘겨도 전체 발송 건이 LMS 요금으로 청구될 수 있어 사전에 바이트 수를 확인하는 것이 중요합니다.
Q. UTF-8과 EUC-KR의 한글 바이트 수는 왜 다른가요?
A. UTF-8은 유니코드 전체(약 14만자)를 가변 길이로 표현해야 해서 한글 완성형 한 글자에 3바이트를 씁니다. 반면 EUC-KR은 한글·한자를 포함한 동아시아 문자 집합만을 목표로 설계된 2바이트 고정 인코딩이라 한글 한 글자에 2바이트만 씁니다. 웹 UTF-8 기준 글자수 제한과 SMS의 EUC-KR 기준 바이트 제한을 혼동하면 실제 전송 가능 글자수를 오판하게 됩니다.
Q. 이모지가 들어간 문자는 SMS에서 몇 바이트로 계산되나요?
A. 대부분의 통신사 SMS 시스템은 이모지를 EUC-KR로 표현할 수 없어 UCS-2(2바이트 고정) 인코딩으로 전환하는데, 이 경우 전체 메시지 제한이 한글 45자가 아니라 훨씬 짧은 70자 안팎으로 줄어드는 경우가 많습니다. 이모지가 섞인 메시지는 발송 전 반드시 발송 대행사의 실제 제한을 확인해야 합니다.
Q. 완성형 한글이 아닌 자음·모음 낱자도 2바이트인가요?
A. 네. 이 사이트 글자수 세기 도구는 EUC-KR 추정 계산에서 완성형 한글(가~힣)뿐 아니라 자음(ㄱ~ㅎ)과 모음(ㅏ~ㅣ) 낱자도 각각 2바이트로 계산합니다. 실제 EUC-KR 규격에서도 이들은 별도 코드 영역에 2바이트로 할당돼 있습니다.
Q. LMS와 MMS는 어떻게 다른가요?
A. LMS는 SMS보다 긴 텍스트(최대 2,000자)만 담는 문자 메시지입니다. MMS는 이미지·동영상 등 멀티미디어 콘텐츠를 포함할 수 있는 복합 메시지로, 요금이 LMS보다도 더 비쌉니다.
Q. 카카오톡 알림톡도 이 바이트 제한을 따르나요?
A. 아닙니다. 카카오 알림톡은 SMS 망이 아니라 카카오톡 자체 서버를 통해 전송되므로 EUC-KR 90바이트 제한과 무관하게 별도의 자체 글자수 정책(보통 1,000자 안팎)을 적용합니다.
Q. 이 사이트 글자수 세기 도구로 SMS 발송 전 바이트를 미리 확인할 수 있나요?
A. 네. EUC-KR 추정 바이트 항목에서 90바이트 초과 여부를 바로 확인할 수 있어, 문자메시지 발송 전 SMS/LMS 전환 여부를 미리 가늠하는 데 유용합니다.