Ktoolio

바이트 계산기

텍스트(한글/이모지) 바이트를 정확히 측정하고, 입력 제한(DB/폼/알림)에 맞춰 안전하게 자르며, 용량 단위 변환·전송/미디어 크기까지 한 번에 계산합니다.

Ln 0, Col 0UTF8
총 바이트
0Bytes
0.0 B / 0.0 B
글자수
0
줄 수
0
단어 수
0
UTF-16 Units
0
문자 기여도
총 문자: 0 · 유니크: 0
텍스트를 입력하면 바이트 분해가 표시됩니다...
문자별 바이트 (UTF-8)Max 2000 chars
텍스트를 입력하면 바이트 분해가 표시됩니다...
원인 요약
ASCII 0 (0B) · 2B 0 (0B) · CJK 0 (0B) · 4B+ 0 (0B)

바이트 계산기: 실전 가이드 · 사용법 · FAQ

바이트는 길이 제한의 실제 단위입니다. 이 가이드는 한글/이모지/정규화 같은 변수를 포함해, 폼·DB·API·알림·전송에서 안전하게 바이트 예산을 잡는 방법을 정리합니다.


왜 바이트가 실무에서 돈과 장애를 좌우하나

  • 제한은 글자 수가 아니라 바이트로 걸려 있는 경우가 많습니다. 한글/이모지 섞이면 겉보기 길이와 실제 크기가 갈라집니다.
  • API/로그/큐/웹훅은 페이로드 상한이 있어 초과 시 잘림·413·드롭·파싱 실패 같은 형태로 터집니다.
  • 메시징/알림은 바이트 기준 과금·제한이 흔합니다. 이모지 하나로 비용/길이가 흔들릴 수 있습니다.
  • 복사/붙여넣기 경로(OS/편집기)에 따라 정규화(NFC/NFD)가 달라져, 똑같이 보이는데 바이트가 달라지는 일이 생깁니다.

우리 생활 속 바이트(모르고 지나가는 순간들)

어떤 입력창에 50자 제한이라고 적혀 있어도, 서버가 실제로 보는 건 문자가 아니라 인코딩된 바이트인 경우가 많습니다.

그래서 닉네임이 잘 저장되다가 이모지 1개를 붙였더니 갑자기 실패하거나, 겉보기 동일한 문장이 복붙 출처에 따라 잘리는 위치가 달라지기도 합니다.

바이트는 속도와 비용에도 연결됩니다. 작은 차이라도 알림/로그/내보내기처럼 반복되는 흐름에서는 쌓여서 체감이 됩니다.

도구 100% 활용법 (빠른 워크플로)

1) 텍스트를 붙여넣고 총 바이트를 확인
처음은 UTF-8 기준으로 보세요(웹/DB/API 표준). 예상보다 크면 이모지/한글 비중이 원인인 경우가 많습니다.
2) 인코딩 선택
UTF-8은 저장/전송의 기본값입니다. UTF-16은 JS 내부 문자열(코드 유닛) 관점의 크기를 확인할 때 유용합니다.
3) 정규화 테스트
macOS/Windows 간 파일명·복붙·입력기가 섞이면 NFC/NFD 차이가 실제 매칭 실패/초과 원인이 됩니다.
4) 공백 정책을 실제 규칙대로 맞추기
공백/줄바꿈을 포함할지, 모든 공백을 제거할지(탭 포함) 등 서비스 규칙과 동일하게 맞춰서 예산을 잡으세요.
5) 예산 자르기(Truncate)로 엄격 제한 통과
UTF-8 바이트 기준 + 사용자 체감 문자(그래핌) 단위로 안전하게 자르면 이모지 깨짐을 줄일 수 있습니다.
6) 전송/미디어 추정은 시간·용량 감 잡을 때
오버헤드를 넣어 현실적으로(헤더/TLS/재전송/지연) 잡으세요.

문자 기여도(신규) — 무엇이 바이트를 키우는지 바로 보기

문자 기여도는 사용자 체감 문자(그래핌) 단위로 묶어서, 어떤 문자가 전체 바이트를 얼마나 키우는지(총 기여도) 바로 보여줍니다.

읽는 법(핵심 10초)

  • 총 기여도 = (문자 개수) × (문자 1개 바이트)
  • 기본 정렬(총 바이트 기여도)은 예산을 실제로 잡아먹는 범인을 찾는 데 가장 빠릅니다(반복 이모지/기호/공백 등).
  • 문자 1개 바이트 정렬은 비싼 문자(이모지/특수기호)를 빠르게 찾습니다.
  • 개수 정렬은 반복 패턴(줄바꿈/공백 과다 등)을 잡아냅니다.

실전 팁

  • 제한을 초과했다면, 표 상단(총 기여도 상위)부터 줄이거나 대체하는 게 가장 빠릅니다.
  • 보이지 않는 문자가 원인인 경우가 많습니다: 여러 공백, NBSP 같은 특수 공백, 탭 확장 등이 바이트를 불립니다.
  • 이 표는 현재 옵션(정규화/공백/줄바꿈) 기준으로 집계됩니다. 실제 서비스 규칙과 옵션을 먼저 맞춘 다음 판단하세요.

언제 쓰면 효과가 큰가(짧고 현실적인 예시)

  • 닉네임/소개글이 짧은데도 저장 실패한다(이모지/한글 때문에 바이트 초과).
  • 알림/템플릿이 변수 치환 후 제한을 넘어서 발송이 잘리거나 실패한다.
  • CSV 가져오기/내보내기, 로그, 웹훅 페이로드를 안전하게 잘라야 한다(결정적 truncate 필요).
  • 파일명/식별자가 OS마다 똑같이 보이는데 매칭이 안 된다(정규화 이슈).
  • 사용자가 저장 버튼을 누르기 전에, 서버 검증과 완전히 동일한 기준으로 미리 확인하고 싶다.
글자수 세기·글자 삭제
문장을 다듬고(공백 포함/제외, 단어/문장) 정리한 뒤, 최종 바이트를 확인하면 더 빠릅니다.

바이트 예산 플레이북 (DB/API/프로덕트)

DB 스키마 설계
  • 제한을 문자 수가 아닌 바이트로 정의하세요(UTF-8 환경이면 특히).
  • MySQL은 utf8mb4 여부를 반드시 확인하세요(이모지 안전). 최악의 경우 1 글자(코드포인트)가 4바이트가 됩니다.
  • 닉네임/소개글 같은 UGC는 인덱스·정렬 규칙·오버헤드를 고려해 여유분(마진)을 두세요.
  • 저장은 서버에서 강제 검증하고, UI에서도 동일 규칙을 보여주면 이탈/클레임이 줄어듭니다.
API 페이로드 · 로깅
  • 요청 바디(JSON)·로그 필드에 상한을 두지 않으면 수집 파이프라인에서 터집니다(413, 드롭, 파서 실패).
  • Base64는 대략 4/3(약 33%) 커집니다.
  • 압축(gzip/br)은 전송량을 줄이지만, DB 저장/검증은 비압축 텍스트 기준으로 관리하는 게 안전합니다.
  • 잘림(truncate)은 결정적으로(동일 입력→동일 결과) 구현하세요. 감사가 필요하면 원문+해시를 병행하세요.
메시징 · 알림
  • SMS/LMS/MMS는 사업자/게이트웨이에 따라 바이트 카운트 방식이 다를 수 있습니다. 실제 발송 테스트로 확정하세요.
  • 이모지/특수문자 섞이면 비용/길이 예측이 깨집니다. 발송 전 바이트 프리뷰를 고정하세요.
  • 엄격 상한이 있으면 바이트로 자르고, 말줄임표(…)도 들어갈 때만 붙이세요.
  • 변수 치환 후 최악 케이스에서도 통과하는지로 예산을 잡으세요.

자주 터지는 제한값 & 함정 (퀵 레퍼런스)

아래 표는 출발점입니다. 실제 제한은 DB 설정/콜레이션/서비스/사업자 정책에 따라 달라질 수 있으니 반드시 환경에서 검증하세요.

Context무슨 일이 생기나대표 함정
MySQL VARCHAR (utf8mb4)문자 수처럼 보여도 인덱스/로우 제한은 바이트로 실패 가능인덱스 프리픽스·로우 크기·이모지 확장
PostgreSQL TEXT/VARCHARTEXT는 작게 제한되진 않지만 오버헤드/성능 예산은 여전히 중요페이로드 상한·인덱싱·성능 예산
JSON/웹훅 페이로드리버스 프록시/앱 레벨에서 바디 제한이 흔함413 에러·이벤트 드롭
Base64 저장대략 +33% 증가로그·JSON·저장 비용 증가
OS 간 파일명NFC/NFD 정규화 차이macOS ↔ Windows 매칭/경로 이슈

기술 메모 (엔지니어용)

UTF-8 vs UTF-16: 무엇을 재고 있는가
UTF-8은 저장/전송에 쓰이는 바이트 인코딩입니다. UTF-16은 JS 문자열 내부 표현(코드 유닛) 기준입니다. 이모지 등은 서러게이트 페어(코드 유닛 2개)를 사용합니다.
그래핌(사용자 체감 문자): 이모지 1개가 여러 코드포인트일 수 있음
피부톤 변형, ZWJ 조합 이모지 등은 여러 코드포인트가 합쳐져 한 글자처럼 보입니다. 코드 유닛으로 자르면 조합이 깨져 □(tofu)로 보일 수 있습니다.
정규화(NFC/NFD): 똑같이 보여도 바이트가 다름
한 글자를 합성 1개 코드포인트로 표현할 수도, 분해된 여러 코드포인트로 표현할 수도 있습니다. OS/파일시스템/복붙 경로에 따라 형태가 달라집니다.
공백 정책은 비즈니스 규칙이다
서버는 공백을 무시하는데 UI는 포함해서 계산하면, 사용자는 왜 저장이 안 되지?를 겪습니다. 예산 산정 규칙을 엔드투엔드로 통일하세요.

프로덕션 체크리스트 (그대로 복붙해서 쓰는 용도)

  1. 바이트 상한을 정하고(왜 필요한지) 문서화한다.
  2. 인코딩(UTF-8/UTF-16)을 결정하고 일관되게 강제한다.
  3. 정규화 정책(none/NFC/NFD)을 정하고 크로스플랫폼 입력에 적용/검증한다.
  4. 공백 규칙(공백/개행/탭)을 정하고 UI·서버가 동일 규칙으로 계산하게 한다.
  5. 그래핌 단위 안전 자르기 + 말줄임표는 들어갈 때만 추가한다.
  6. 테스트 케이스: ASCII, 한글/CJK, 이모지, ZWJ 조합, 결합문자, 긴 개행.
  7. 디버깅을 위해 원문 지표와 최종 저장 바이트를 함께 로깅한다.
팁: UI 미리보기 → 서버 검증 → DB 제약이 반드시 일치해야 합니다. 사고는 보통 이 3개가 어긋날 때 납니다.
중요 고지
바이트는 DB 콜레이션/인덱스 규칙, 사업자/플랫폼 정책, 시스템 오버헤드에 따라 실제 제한이 달라질 수 있습니다. 이 결과를 기준선으로 삼되, 운영 환경에서 최종 검증 후 제약을 확정하세요.

FAQ

한글은 항상 UTF-8에서 3바이트인가요?
현대 한글 음절(가-힣)은 대부분 UTF-8에서 3바이트가 맞습니다. 다만 정규화/결합문자 등 입력 형태에 따라 달라질 수 있습니다.
이모지 1개가 왜 4바이트를 넘기도 하나요?
UTF-8에서 많은 이모지는 단일 코드포인트만으로도 4바이트입니다. 피부톤/ZWJ 조합처럼 여러 코드포인트 묶음이면 총 바이트가 더 커집니다.
제한은 문자 수로 잡아야 하나요, 바이트로 잡아야 하나요?
장애/유실을 막고 싶다면 바이트로 예산을 잡는 게 안전합니다. 문자 수는 멀티바이트 문자에서 착시가 생깁니다.
자르기(truncate) 했더니 이모지가 깨져요.
UTF-16 코드 유닛 기준으로 잘라서 서러게이트/ZWJ 조합이 분리된 경우입니다. 바이트 기준 + 그래핌 단위로 자르는 방식이 안전합니다.
gzip 하면 DB 저장 용량도 줄어드나요?
전송(네트워크)에서는 줄 수 있지만, DB는 기본적으로 텍스트를 해당 인코딩으로 저장합니다. 저장을 줄이려면 별도 압축 저장 전략이 필요합니다.
MB와 MiB는 왜 다르죠?
MB는 10^6(십진수), MiB는 2^20(이진수)입니다. OS는 MiB 기준 표기가 흔하고, 제조/마케팅은 MB를 자주 씁니다.
전송 오버헤드는 몇 %로 잡아야 해요?
정답은 없습니다. 일반 인터넷은 0–10%로 시작하되, 무선/혼잡/지연/재전송이 많으면 더 크게 잡으세요.
실전 메모
최대 길이는 바이트 상한 + 정책(인코딩/정규화/공백 규칙)으로 고정하세요. 그리고 UI 미리보기, 서버 검증, DB 제약이 100% 동일해야 조용한 데이터 손상과 CS 폭탄을 막을 수 있습니다.