바이트 수 계산 방법 - 문자 인코딩별 정확한 크기 확인 가이드
한글, 영문, 특수문자의 바이트 수가 다른 이유와 인코딩별 정확한 바이트 수 계산 방법을 실전 예제와 함께 정리했습니다.
![]()
문자 메시지를 보내려는데 글자 수는 맞는데 전송이 안 된 경험이 있으신가요? SMS 한 건에 들어가는 데이터 크기는 글자 수가 아니라 바이트 수로 결정됩니다. 같은 10글자라도 영문과 한글의 바이트 수는 완전히 다릅니다. 바이트 수 계산 방법을 정확히 알아두면 데이터베이스 설계, API 요청, 파일 전송 등 다양한 상황에서 오류를 예방할 수 있습니다.
바이트(Byte)의 기본 개념
컴퓨터가 데이터를 저장하고 처리하는 최소 단위는 비트(bit)입니다. 1비트는 0 또는 1 하나를 저장하고, 8비트가 모여 1바이트(Byte)가 됩니다. 영문 알파벳 한 글자는 보통 1바이트, 한글 한 글자는 인코딩 방식에 따라 2~3바이트를 차지합니다.
데이터 크기 단위 정리
| 단위 | 크기 | 예시 |
|---|---|---|
| 1 Bit | 0 또는 1 | 스위치 하나 |
| 1 Byte | 8 Bit | 영문 1글자(ASCII) |
| 1 KB | 1,024 Byte | 짧은 텍스트 파일 |
| 1 MB | 1,024 KB | 고해상도 사진 1장 |
| 1 GB | 1,024 MB | 영화 1편(표준 화질) |
여기서 핵심은 글자 수와 바이트 수는 같지 않다는 점입니다. "Hello"는 5글자이면서 5바이트지만, "안녕하세요"는 5글자이면서 UTF-8 기준 15바이트입니다.
인코딩 방식별 바이트 수 차이
같은 문자라도 어떤 인코딩을 사용하느냐에 따라 바이트 수가 달라집니다. 바이트 수 계산 방법을 이해하려면 인코딩별 차이를 먼저 파악해야 합니다.
주요 인코딩별 한글 바이트 수
| 인코딩 | 영문 1글자 | 한글 1글자 | 특수문자 | 이모지 |
|---|---|---|---|---|
| ASCII | 1바이트 | 지원 안 됨 | 1바이트 | 지원 안 됨 |
| EUC-KR | 1바이트 | 2바이트 | 1~2바이트 | 지원 안 됨 |
| UTF-8 | 1바이트 | 3바이트 | 1~3바이트 | 4바이트 |
| UTF-16 | 2바이트 | 2바이트 | 2바이트 | 4바이트 |
| UTF-32 | 4바이트 | 4바이트 | 4바이트 | 4바이트 |
UTF-8에서 한글은 3바이트, EUC-KR에서는 2바이트입니다. 웹 환경에서는 UTF-8이 표준이므로, 대부분의 경우 한글 1글자 = 3바이트로 계산하면 됩니다.
UTF-8이 전 세계 웹사이트의 약 98% 이상에서 사용되고 있습니다(W3Techs 기준). 따라서 특별한 이유가 없다면 UTF-8 기준으로 바이트 수를 계산하는 것이 안전합니다.
바이트 수 계산 방법 실전 가이드
직접 계산하는 방법부터 온라인 도구를 활용하는 방법까지 정리합니다.
수동 계산 공식
UTF-8 기준으로 간단히 계산할 수 있습니다.
- 영문, 숫자, 기본 특수문자: 글자 수 x 1바이트
- 한글: 글자 수 x 3바이트
- 한자, 일본어: 글자 수 x 3바이트
- 이모지: 개당 4바이트
예를 들어 "Hello 안녕"이라는 문자열의 바이트 수를 계산하면 다음과 같습니다.
- H, e, l, l, o: 5글자 x 1바이트 = 5바이트
- 공백: 1글자 x 1바이트 = 1바이트
- 안, 녕: 2글자 x 3바이트 = 6바이트
- 합계: 12바이트
온라인 도구 활용
매번 수동으로 계산하기 번거롭다면 온라인 바이트 계산기를 활용하는 것이 효율적입니다. 데이터 크기를 다루는 작업을 자주 한다면 단위 변환기처럼 다양한 단위 간 변환을 지원하는 도구를 북마크해 두면 KB, MB 단위 환산도 빠르게 처리할 수 있습니다.
프로그래밍 언어별 바이트 수 확인법
개발 환경에서 바이트 수를 확인하는 코드를 언어별로 정리합니다.
JavaScript
new TextEncoder().encode("안녕하세요").length - UTF-8 기준 바이트 수를 반환합니다. 결과는 15입니다.
Python
len("안녕하세요".encode('utf-8')) - encode 메서드로 인코딩 후 길이를 측정합니다. 결과는 15입니다.
Java
"안녕하세요".getBytes("UTF-8").length - getBytes에 인코딩을 명시하는 것이 중요합니다. 결과는 15입니다.
주요 함수 비교
| 언어 | 함수 | 기본 인코딩 | 주의사항 |
|---|---|---|---|
| JavaScript | TextEncoder | UTF-8 | length는 글자 수(바이트 아님) |
| Python 3 | str.encode() | UTF-8 | len(str)은 글자 수 반환 |
| Java | getBytes() | 플랫폼 의존 | 인코딩 반드시 명시할 것 |
| PHP | strlen() | 바이트 수 | mb_strlen()은 글자 수 |
| Go | len() | 바이트 수 | utf8.RuneCountInString()은 글자 수 |
바이트 수 계산 시 자주 하는 실수
실무에서 바이트 수 관련 오류는 생각보다 자주 발생합니다. 미리 알아두면 디버깅 시간을 크게 줄일 수 있습니다.
1. 글자 수와 바이트 수 혼동
가장 흔한 실수입니다. 데이터베이스 컬럼을 VARCHAR(10)으로 설정했을 때, MySQL에서는 10글자를 의미하지만 일부 시스템에서는 10바이트를 의미합니다. 한글 3글자를 넣으려 했는데 9바이트라 초과되는 경우가 발생합니다.
2. BOM(Byte Order Mark) 무시
UTF-8 파일 앞에 붙는 BOM(EF BB BF)은 3바이트를 차지합니다. 파일 크기를 계산할 때 이 3바이트를 빠뜨리면 오차가 생깁니다. 특히 CSV 파일을 엑셀에서 열 때 BOM이 있어야 한글이 깨지지 않는 경우가 있어, 의도적으로 BOM을 추가하기도 합니다.
3. 조합형 문자의 바이트 수
이모지 중 일부는 여러 코드포인트가 결합된 형태입니다. 예를 들어 가족 이모지는 내부적으로 여러 개의 이모지가 ZWJ(Zero Width Joiner)로 연결되어 있어 최대 25바이트 이상을 차지할 수 있습니다.
- 일반 이모지: 4바이트
- 스킨톤 적용 이모지: 8바이트
- 결합 이모지(가족, 국기 등): 8~25바이트 이상
실무에서 바이트 수가 중요한 순간
바이트 수 계산 방법을 알아야 하는 실제 상황들을 정리합니다.
SMS/MMS 구분 기준
국내 통신사 기준으로 SMS는 EUC-KR 인코딩에서 80바이트(한글 40자)까지 발송됩니다. 이를 초과하면 자동으로 LMS로 전환되며, 요금이 달라집니다. 마케팅 문자를 보낼 때 바이트 수를 정확히 계산하지 않으면 예상보다 높은 비용이 발생할 수 있습니다.
데이터베이스 컬럼 설계
MySQL의 UTF-8(utf8mb3) 인코딩은 한 글자당 최대 3바이트를 사용합니다. VARCHAR(255)로 설정하면 255글자까지 저장 가능하지만, 인덱스 키 크기 제한(767바이트)에 걸릴 수 있습니다. 이런 경우 VARCHAR(191)로 줄여야 합니다.
API 요청 크기 제한
많은 API가 요청 본문의 크기를 바이트 단위로 제한합니다. 예를 들어 특정 메시징 API에서 메시지 크기를 4,096바이트로 제한한다면, 한글로는 약 1,365자까지만 보낼 수 있습니다. 영문이라면 4,096자가 가능하므로 같은 제한이라도 언어에 따라 실질적인 용량 차이가 큽니다.
활용 체크리스트
- 데이터베이스 설계 시 인코딩에 맞는 컬럼 크기를 설정했는지 확인
- API 연동 시 요청/응답의 바이트 제한을 사전에 체크
- 파일 업로드 기능 구현 시 바이트 단위 크기 검증 로직 추가
- 다국어 지원 서비스라면 언어별 바이트 수 차이를 반드시 고려
바이트 수 계산은 복잡한 개념이 아닙니다. UTF-8 기준으로 영문 1바이트, 한글 3바이트라는 기본 규칙만 기억하면 대부분의 상황에 대응할 수 있습니다. 개발 환경에서는 각 언어의 인코딩 함수를 활용하고, 일상에서는 온라인 바이트 계산기를 사용해 빠르게 확인하세요.