본문 바로가기

바이트 수 계산 방법 - 문자 인코딩별 정확한 크기 확인 가이드

한글, 영문, 특수문자의 바이트 수가 다른 이유와 인코딩별 정확한 바이트 수 계산 방법을 실전 예제와 함께 정리했습니다.


바이트 수 계산 방법 - 문자 인코딩별 정확한 크기 확인 가이드

문자 메시지를 보내려는데 글자 수는 맞는데 전송이 안 된 경험이 있으신가요? SMS 한 건에 들어가는 데이터 크기는 글자 수가 아니라 바이트 수로 결정됩니다. 같은 10글자라도 영문과 한글의 바이트 수는 완전히 다릅니다. 바이트 수 계산 방법을 정확히 알아두면 데이터베이스 설계, API 요청, 파일 전송 등 다양한 상황에서 오류를 예방할 수 있습니다.

바이트(Byte)의 기본 개념

컴퓨터가 데이터를 저장하고 처리하는 최소 단위는 비트(bit)입니다. 1비트는 0 또는 1 하나를 저장하고, 8비트가 모여 1바이트(Byte)가 됩니다. 영문 알파벳 한 글자는 보통 1바이트, 한글 한 글자는 인코딩 방식에 따라 2~3바이트를 차지합니다.

데이터 크기 단위 정리

단위크기예시
1 Bit0 또는 1스위치 하나
1 Byte8 Bit영문 1글자(ASCII)
1 KB1,024 Byte짧은 텍스트 파일
1 MB1,024 KB고해상도 사진 1장
1 GB1,024 MB영화 1편(표준 화질)

여기서 핵심은 글자 수와 바이트 수는 같지 않다는 점입니다. "Hello"는 5글자이면서 5바이트지만, "안녕하세요"는 5글자이면서 UTF-8 기준 15바이트입니다.

인코딩 방식별 바이트 수 차이

같은 문자라도 어떤 인코딩을 사용하느냐에 따라 바이트 수가 달라집니다. 바이트 수 계산 방법을 이해하려면 인코딩별 차이를 먼저 파악해야 합니다.

주요 인코딩별 한글 바이트 수

인코딩영문 1글자한글 1글자특수문자이모지
ASCII1바이트지원 안 됨1바이트지원 안 됨
EUC-KR1바이트2바이트1~2바이트지원 안 됨
UTF-81바이트3바이트1~3바이트4바이트
UTF-162바이트2바이트2바이트4바이트
UTF-324바이트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바이트
참고: 줄바꿈 문자도 바이트를 차지합니다. Windows에서는 줄바꿈이 \r\n으로 2바이트, Mac/Linux에서는 \n으로 1바이트입니다. 대량 텍스트를 다룰 때 이 차이가 누적되면 의외로 큰 차이가 납니다.

온라인 도구 활용

매번 수동으로 계산하기 번거롭다면 온라인 바이트 계산기를 활용하는 것이 효율적입니다. 데이터 크기를 다루는 작업을 자주 한다면 단위 변환기처럼 다양한 단위 간 변환을 지원하는 도구를 북마크해 두면 KB, MB 단위 환산도 빠르게 처리할 수 있습니다.

프로그래밍 언어별 바이트 수 확인법

개발 환경에서 바이트 수를 확인하는 코드를 언어별로 정리합니다.

JavaScript

new TextEncoder().encode("안녕하세요").length - UTF-8 기준 바이트 수를 반환합니다. 결과는 15입니다.

Python

len("안녕하세요".encode('utf-8')) - encode 메서드로 인코딩 후 길이를 측정합니다. 결과는 15입니다.

Java

"안녕하세요".getBytes("UTF-8").length - getBytes에 인코딩을 명시하는 것이 중요합니다. 결과는 15입니다.

주요 함수 비교

언어함수기본 인코딩주의사항
JavaScriptTextEncoderUTF-8length는 글자 수(바이트 아님)
Python 3str.encode()UTF-8len(str)은 글자 수 반환
JavagetBytes()플랫폼 의존인코딩 반드시 명시할 것
PHPstrlen()바이트 수mb_strlen()은 글자 수
Golen()바이트 수utf8.RuneCountInString()은 글자 수
팁: 대부분의 언어에서 문자열의 length 속성은 바이트 수가 아닌 글자 수를 반환합니다. 바이트 수를 얻으려면 반드시 인코딩 후 길이를 측정해야 합니다. 이 차이를 혼동하면 데이터 잘림 오류의 원인이 됩니다.

바이트 수 계산 시 자주 하는 실수

실무에서 바이트 수 관련 오류는 생각보다 자주 발생합니다. 미리 알아두면 디버깅 시간을 크게 줄일 수 있습니다.

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바이트라는 기본 규칙만 기억하면 대부분의 상황에 대응할 수 있습니다. 개발 환경에서는 각 언어의 인코딩 함수를 활용하고, 일상에서는 온라인 바이트 계산기를 사용해 빠르게 확인하세요.

3일 무료체험큰손탐지기, 지금 바로 시작하세요

설치 없이 웹에서 바로 사용 가능 · PC & 모바일 지원

무료체험 시작
카카오톡 상담