GSM-7 vs UCS-2: 이모지 하나가 SMS 요금을 두 배로 만드는 이유

이모지 하나만으로도 SMS 요금이 조용히 두 배 또는 세 배로 늘어날 수 있습니다. GSM 03.38은 140바이트 페이로드에 대해 두 가지 인코딩을 정의합니다. 160자를 담는 압축 GSM-7과 70자의 UCS-2입니다. GSM-7 알파벳 밖의 문자가 하나라도 있으면 전체 메시지가 UCS-2로 강제 전환됩니다. 워드 프로세서에서 복사한 문구를 붙여넣는 개발자와 마케터는 청구서가 도착해서야 이를 알게 되는 경우가 많습니다.

GSM-7 패킹: 140바이트 페이로드에 160자

SMS는 고정 140바이트 사용자 데이터 페이로드를 기준으로 설계되었습니다. GSM 03.38은 7비트 기본 알파벳을 정의해 이 140바이트에 160 셉텟을 담을 수 있게 합니다. 140 곱하기 8 나누기 7은 160입니다. 메시지가 해당 알파벳 안에만 있으면 단말기와 SMSC는 최대 160자 단일 세그먼트로 처리합니다. 기본 세트는 대소문자 라틴 문자, 숫자, 일반 구두점, 일부 통화 및 국가 기호를 포함합니다. 공백, 줄바꿈, 일반적인 영문 산문 문자는 모두 추가 비용 없이 들어갑니다.

연결(concatenation)은 계산을 바꿉니다. 다중 파트 메시지는 수신 기기가 세그먼트를 순서대로 재조합할 수 있도록 User Data Header를 삽입합니다. 일반적인 6바이트 UDH는 셉텟 공간을 차지하므로 GSM-7에서 세그먼트당 사용 가능 텍스트는 153자가 됩니다. 과금은 거의 항상 논리 메시지가 아니라 세그먼트 단위이므로, 200자 GSM-7 본문은 두 개의 과금 세그먼트(153 + 나머지)가 됩니다. 160 대 153 분할을 이해하는 것이 전송 전 비용을 예측하는 첫 단계입니다.

확장 테이블: 이미 셉텟 두 개를 쓰는 문자

GSM 03.38은 전용 이스케이프 셉텟으로 접근하는 확장 테이블도 정의합니다. 대괄호 [ ], 중괄호 { }, 캐럿 ^, 물결표 ~, 세로 막대 |, 백슬래시 \, 유로 기호 같은 문자는 기본 세트에 없습니다. 각각은 이스케이프와 확장 코드포인트로 인코딩되므로 사용 가능한 160(또는 153) 셉텟 중 2개를 씁니다. 화면에서는 짧게 보이는 메시지도 단순한 글자 수보다 일찍 세그먼트 경계를 넘을 수 있습니다.

이스케이프 메커니즘은 여전히 GSM-7이며 메시지를 UCS-2로 전환하지 않습니다. 이 구분이 중요합니다. 유로 기호나 대괄호를 몇 개 넣어도 효율적인 7비트 패킹을 유지할 수 있습니다. 인코더가 기본 알파벳과 확장 테이블 어디에도 없는 코드포인트를 만날 때만 전체 메시지가 GSM-7을 떠납니다. 그 순간까지 두 셉텟을 쓰는 확장 문자를 포함한 모든 문자는 160 또는 153 한도를 기준으로 셉텟 단위로 계산됩니다.

문자 종류GSM-7에서 소비하는 셉텟
기본 알파벳(A–Z, a–z, 0–9, 일반 구두점)1
확장 테이블([ ] { } ^ ~ | \ 및 유로)2 (이스케이프 + 코드)
GSM 03.38 밖 모든 문자(이모지, 굽은 따옴표, 대부분 비라틴)전체 메시지를 UCS-2로 강제 전환

UCS-2 폴백: 알파벳 밖 문자 하나가 전체를 재인코딩

GSM-7로 표현할 수 없는 문자가 하나라도 나오는 순간 인코더는 전체 사용자 데이터를 16비트 UCS-2(실질적으로 BMP용 UTF-16 코드 유닛)로 전환합니다. 같은 140바이트 페이로드는 이제 70자만 담습니다. 연결 UDH가 있으면 사용 가능 길이는 세그먼트당 67자로 줄어듭니다. 부분 폴백은 없습니다. 이모지 하나, 스마트 따옴표, 엔 대시, 또는 아랍·키릴·CJK 등 대부분 다른 스크립트 문자가 본문 전체를 다시 씁니다. 한 GSM-7 세그먼트였던 140자 영문 문장은 웃는 얼굴을 붙이는 순간 UCS-2 세 세그먼트가 됩니다.

이것이 예상치 못한 청구의 메커니즘입니다. 마케터는 워드 프로세서에서 문구를 작성해 SMS 도구에 붙여넣으며 굽은 따옴표나 non-breaking space를 unknowingly 넣는 경우가 많습니다. 사용자 생성 이름이나 제품 제목을 보간하는 개발자도 같은 보이지 않는 트리거를 주입할 수 있습니다. 재인코딩은 전부 아니면 전무이므로 세그먼트 수가 불연속적으로 점프합니다. 과금은 새 세그먼트 총합으로 배가됩니다. US $0.0125 세그먼트당, 149개국 $0.004부터 같은 공개 총포함 요금이 수치를 구체적으로 보여 줍니다. 추가 세그먼트마다 전체 요금이 한 번 더 부과되며 부분 가산이 아닙니다.

인코딩단일 세그먼트 한도연결 세그먼트 한도
GSM-7 (7비트)160자153자
UCS-2 (16비트)70자67자

UCS-2를 강제하는 보이지 않는 함정과 스크립트

워드 프로세서는 직선 아포스트로피와 따옴표를 곱슬 타이포그래피 형태로 바꾸고, 이중 하이픈을 em dash로 바꾸며, 비분리 공백을 삽입하는 경우가 흔합니다. 이러한 코드포인트는 어느 것도 GSM 03.38에 속하지 않습니다. 화면에서는 일반 ASCII 버전과 동일해 보이는 메시지가 UCS-2로 전송되어 여러 세그먼트 비용이 발생할 수 있습니다. 풍부한 유니코드를 선호하는 웹 페이지나 디자인 도구에서 복사·붙여넣기한 콘텐츠에도 동일하게 적용됩니다. 렌더링된 글리프가 아니라 실제 코드포인트를 확인하는 것만이 신뢰할 수 있는 방어입니다.

언어 선택도 똑같이 결정적입니다. 순수 영어, 기본 프랑스어·독일어·스페인어 등 라틴 스크립트 메시지는 기본 알파벳 밖 악센트 문자를 피하거나 음역하면 보통 GSM-7에 머뭅니다. 그리스어, 키릴, 아랍어, 히브리어, 데바나가리, 태국어, CJK 계열은 일반 문자에 대한 GSM-7 매핑이 없어 해당 스크립트를 상당량 사용하면 전체 메시지가 UCS-2로 강제됩니다. 이름이나 제품 단어 하나만으로도 충분합니다. 모든 종류의 이모지는 정의상 GSM-7 밖입니다. 실용 규칙은 단순합니다. 문자가 GSM 03.38 기본 또는 확장 세트에 없으면 전체 페이로드가 70/67이 됩니다.

전송 전 실용적 해결책

음역은 철자 충실도를 희생해 메시지를 GSM-7에 유지합니다. 악센트 문자를 가장 가까운 ASCII 대응으로 바꾸고, 굽은 따옴표를 직선으로 변환하며, em dash를 하이픈으로 되돌리면 160/153 한도가 복원되는 경우가 많습니다. 브랜드명이나 법적 문구처럼 정확해야 하는 경우 UCS-2를 받아들이고 높은 세그먼트 수에 예산을 잡으십시오. non-GSM-7 코드포인트를 스캔하고 두 인코딩 모두에서 결과 세그먼트 총합을 보고하는 자동 사전 점검는 개발자와 마케터에게 메시지를 SMSC에 제출하기 전 명확한 비용 신호를 줍니다.

템플릿을 만들 때 변수 필드를 주의 깊게 관리하십시오. 다른 스크립트의 고객 이름이나 이모지가 포함된 제품 제목이 원래 GSM-7 템플릿을 조용히 뒤집을 수 있습니다. 리치 텍스트 소스의 붙여넣기 버퍼를 제거하거나 정규화하십시오. SMS용 마케팅 문구에는 직선 ASCII 구두점을 선호하십시오. 이모지나 비라틴 텍스트를 반드시 보내야 한다면 UCS-2 세그먼트 경계가 자연스러운 구 구분에 오도록 본문을 설계하고 총 길이를 67자 청크가 최대한 적게 나오도록 유지하십시오. 감지된 알파벳에 따라 160/153과 70/67 표시를 전환하는 세그먼트 인식 길이 카운터가 대부분의 놀라움을 없앱니다. 요금은 통신사와 라우트에 따라 다르며, 앞서 인용한 공개 수치는 보편 요금이 아니라 세그먼트당 모델을 보여 줍니다. 경계 문자의 정확한 단말기 렌더링에는 여전히 불확실성이 있으므로 중요한 메시지는 대표 기기에서 테스트하십시오.

자주 묻는 질문

이모지 하나만 추가해도 SMS가 여러 메시지로 나뉘는 이유는 무엇인가요?
GSM 03.38 알파벳 밖의 모든 문자(모든 이모지 포함)는 전체 메시지를 GSM-7에서 UCS-2로 강제 변환합니다. 그러면 140바이트 페이로드에 160자 대신 70자만 들어갑니다(연결 시 153자 대신 67자). 따라서 GSM-7 세그먼트 하나에 맞던 본문이 UCS-2 세그먼트 두세 개로 늘어날 수 있으며, 요금은 세그먼트당 청구됩니다.
굽은 따옴표와 em 대시가 정말 SMS 인코딩을 바꾸나요?
네. 타이포그래피용 굽은 따옴표, em 대시, en 대시, 비분리 공백은 GSM-7 기본 및 확장 세트에 없습니다. 워드 프로세서에서 붙여넣으면 전체 메시지가 UCS-2로 재인코딩되어, 화면상 텍스트가 같아 보여도 세그먼트당 한도가 160/153에서 70/67로 줄어듭니다.
연결된 SMS에서 GSM-7과 UCS-2 각각 몇 자까지 들어가나요?
GSM-7 연결 세그먼트는 일반적인 6바이트 UDH 이후 153자를 담습니다. UCS-2에서는 같은 헤더로 세그먼트당 67자가 남습니다. 단일 세그먼트 한도는 GSM-7 160자, UCS-2 70자입니다. 비용은 논리적 메시지 수가 아니라 세그먼트 수로 결정됩니다.

관련