피드로 돌아가기
KEncode: Packing Data for Strict Limits
Dev.toDev.to
Backend

JSON 대비 90% 용량 절감, Base62 기반 고밀도 상태 인코딩 라이브러리 KEncode

KEncode: Packing Data for Strict Limits

Rasmus Ros2026년 4월 30일12intermediate

Context

URL 콜백, Kubernetes Pod 명명 규칙, Stateless Pagination 등 엄격한 길이 제한이 있는 환경에서 애플리케이션 상태를 전달해야 하는 제약 발생. 기존 JSON이나 단순 문자열 파싱 방식은 과도한 오버헤드와 런타임 에러 가능성으로 인해 시스템 확장성과 가독성을 저해함.

Technical Solution

  • kotlinx.serialization 기반의 Custom Format 설계를 통한 강한 타입 보장 및 직렬화 자동화
  • Nullable 및 Boolean 필드의 플래그를 최상위 Root에 통합한 Bitset Header 구조를 통해 바이트 정렬 낭비 제거
  • 가변 길이 정수(Varint) 및 Collection Bitmap을 적용하여 동적 데이터의 페이로드 크기 최소화
  • BigInteger의 O(n^2) 비용을 회피하기 위한 Chunking 기법 기반의 O(n) 복잡도 Text Codec 구현
  • Base62, Base64, Base85 등 전송 환경에 최적화된 다중 ASCII-Safe Codec 지원
  • Encryption, Checksum 등 전처리 로직을 레이어링할 수 있는 Transform 인터페이스 제공

Impact

  • JobState 객체 기준 JSON(66 chars) 대비 KEncode(6 chars)로 데이터 크기 약 91% 감소
  • Protobuf + Base64(10 chars) 대비 약 40% 추가 압축 효율 달성
  • Base62 사용 시 특수문자 배제로 URL 선택 로직 및 K8s 명명 규칙 제약 완벽 충족

Key Takeaway

상태 저장소(DB) 조회 비용을 줄이기 위해 상태를 토큰화하여 클라이언트에 위임하는 'Stateless State Transfer' 전략 시, 단순 직렬화보다 비트 단위의 패킹과 적절한 Base-N 인코딩 조합이 시스템 지연시간(Latency)과 인프라 제약을 해결하는 핵심 수단이 됨.


1. 외부 시스템(K8s, URL)의 엄격한 길이 제한 확인

2. Boolean/Nullable 필드 집합 시 Bitset을 활용한 헤더 압축 검토

3. 전송 효율과 가독성 사이의 Trade-off에 따라 Base62(알파뉴메릭) vs Base85(최대 밀도) 선택

4. 대량의 정수 데이터 처리 시 Varint 적용 여부 판단

원문 읽기