피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Unicode Half-block 기반 1.2MB 경량 Rust QR 렌더러 설계
A 150-Line Rust CLI That Renders QR Codes in Your Terminal — Half-Block Characters Pack Two Modules per Cell
AI 요약
Context
터미널 셀의 세로 길이가 가로보다 긴 특성으로 인해 QR 모듈을 1:1 매칭 시 직사각형으로 왜곡되는 문제 발생. 이로 인한 인식률 저하와 GUI 없는 SSH/CI 환경에서의 URL 전달 제약을 해결하기 위한 설계 필요.
Technical Solution
- Half-block Unicode(U+2580, U+2584, U+2588)를 활용하여 단일 셀에 수직으로 2개의 QR 모듈을 패킹하는 렌더링 로직 구현
qrcodecrate를 통한 Reed-Solomon 오류 정정 및 마스크 패턴 선택 로직 추상화- 렌더러를 Closure 기반의 Pure Function으로 분리하여 인코더 의존성 없는 격자 데이터 단위 Unit Test 구조 확보
- QR 스펙의 Quiet Zone(4모듈)을 2모듈로 최적화하여 터미널 내 수직 공간 점유율 감소
- LTO 및 opt-level "z" 적용을 통한 정적 바이너리 크기 최소화 설계
실천 포인트
- 터미널 출력 시 폰트의 Aspect Ratio를 고려한 Unicode 특수문자 매핑 검토 - 정적 바이너리 배포 시 strip, LTO, panic='abort' 설정을 통한 최적화 적용 - 외부 라이브러리 의존성이 큰 로직은 Closure를 활용해 Pure Rendering 레이어로 분리하여 테스트 속도 개선