QR 코드의 원리 — 버전, 오류 정정 레벨, 용량 완전 정리
QR 코드는 1994년 일본 덴소웨이브가 자동차 부품 추적을 위해 개발한 2차원 코드입니다. "Quick Response"라는 이름 그대로 빠른 판독에 초점을 맞춰 설계됐고, 개발사가 특허권을 행사하지 않기로 하면서 전 세계 표준(ISO/IEC 18004)으로 자리 잡았습니다. 이 글에서는 QR 코드를 "그냥 만들어지는 네모 그림"이 아니라 구조적으로 이해하고, 실무에서 버전과 오류 정정 레벨을 어떻게 선택해야 하는지 정리합니다.
QR 코드의 구조: 흰 배경 위 검은 점의 정체
QR 코드를 확대해 보면 작은 정사각형 점들의 격자로 이루어져 있습니다. 이 점 하나하나를 모듈(module)이라고 부르며, 검은 모듈은 1, 흰 모듈은 0을 나타내는 디지털 데이터입니다. 격자 안에는 역할이 다른 몇 가지 고정 패턴이 배치됩니다.
- 위치 탐지 패턴(Finder Pattern) — 세 모서리에 있는 큰 이중 사각형입니다. 스캐너는 이 세 개를 먼저 찾아 코드의 위치·방향·기울기를 파악합니다. QR 코드를 거꾸로 찍어도 인식되는 이유가 바로 이것입니다.
- 정렬 패턴(Alignment Pattern) — 코드가 클수록 개수가 늘어나는 작은 사각형으로, 곡면에 부착되거나 비스듬히 촬영된 코드의 왜곡을 보정합니다.
- 타이밍 패턴(Timing Pattern) — 위치 패턴 사이를 잇는 흑백 교차 줄로, 모듈 좌표의 기준선 역할을 합니다.
- 포맷 정보 — 오류 정정 레벨과 마스크 패턴 정보가 담긴 영역입니다. 나머지 영역에 실제 데이터와 오류 정정 코드가 채워집니다.
실무 포인트: 세 모서리의 위치 탐지 패턴이 가려지면 판독이 급격히 어려워집니다. 로고를 넣거나 디자인을 입힐 때는 반드시 중앙부에만 배치하고, 모서리 패턴은 건드리지 마세요.
버전: 21×21부터 177×177까지
QR 코드의 크기는 버전(Version) 1~40으로 표준화되어 있습니다. 버전 1은 21×21 모듈이고, 버전이 하나 오를 때마다 가로세로 4모듈씩 커져 버전 40은 177×177 모듈이 됩니다. 담는 데이터가 많을수록 더 높은 버전(더 촘촘한 격자)이 필요합니다.
| 버전 | 모듈 수 | 숫자만 | 영숫자 | 한글 포함(UTF-8, 근사치) |
|---|---|---|---|---|
| 1 | 21×21 | 41자 | 25자 | 약 5~8자 |
| 5 | 37×37 | 255자 | 154자 | 약 35~45자 |
| 10 | 57×57 | 652자 | 395자 | 약 90~110자 |
| 25 | 117×117 | 4,296자 | 2,606자 | 약 600자 |
| 40 | 177×177 | 7,089자 | 4,296자 | 약 980자 |
※ 오류 정정 레벨 L 기준. 레벨을 높이면 용량은 줄어듭니다. 한글은 UTF-8에서 글자당 3바이트를 차지해 영문보다 용량을 많이 씁니다.
생성기는 입력한 데이터 양에 맞춰 버전을 자동으로 선택하므로 버전을 직접 고를 일은 없습니다. 중요한 것은 데이터가 길수록 모듈이 촘촘해져 같은 인쇄 크기에서 판독이 어려워진다는 사실입니다. URL을 담을 때 불필요한 파라미터를 지우고 짧게 만드는 것이 판독률을 높이는 가장 쉬운 방법입니다.
오류 정정 레벨: L·M·Q·H 무엇을 골라야 하나
QR 코드의 가장 큰 장점은 일부가 훼손되어도 판독된다는 점입니다. 리드-솔로몬(Reed-Solomon) 오류 정정 알고리즘 덕분인데, 데이터와 함께 복구용 코드를 저장해 두기 때문입니다. 복구용 코드를 얼마나 넣을지가 오류 정정 레벨입니다.
| 레벨 | 복구 가능 비율 | 권장 상황 |
|---|---|---|
| L (Low) | 약 7% | 화면 표시 전용, 데이터가 매우 길어 코드를 단순하게 유지해야 할 때 |
| M (Medium) | 약 15% | 일반적인 인쇄물·웹 게시 (대부분의 경우 기본값으로 충분) |
| Q (Quartile) | 약 25% | 야외 부착물, 오염·마모가 예상되는 환경 |
| H (High) | 약 30% | 중앙에 로고를 삽입할 때, 손상 위험이 큰 산업 환경 |
레벨을 올리면 복구력이 강해지는 대신 같은 데이터라도 코드가 더 촘촘해집니다. 즉 복구력과 판독 용이성은 트레이드오프입니다. 로고를 넣지 않는 일반 용도라면 M이 균형점이고, 로고를 넣는다면 로고가 가리는 면적만큼 복구 여유가 필요하므로 H를 선택하세요. 로고는 전체 면적의 20%를 넘지 않는 것이 안전합니다.
정적 QR vs 동적 QR
QR 생성 서비스를 비교하다 보면 "동적(dynamic) QR"이라는 말을 자주 보게 됩니다. 둘의 차이는 코드에 담기는 내용입니다.
- 정적 QR — 목적지 URL이나 텍스트가 코드 안에 직접 들어갑니다. 영구적으로 작동하고 외부 서비스에 의존하지 않지만, 생성 후 내용을 바꿀 수 없습니다.
- 동적 QR — 코드에는 중계 서버의 짧은 URL이 들어가고, 스캔하면 서버가 실제 목적지로 이동시킵니다. 목적지를 나중에 바꿀 수 있고 스캔 통계를 볼 수 있지만, 서비스 구독이 끝나면 코드가 죽고 스캔 기록이 제3자에게 수집됩니다.
본 사이트의 생성기는 정적 QR을 만듭니다. 명함, 안내판, 제품 라벨처럼 오래 쓰는 인쇄물에는 만료 걱정이 없는 정적 QR이 적합합니다. 캠페인 추적이 필요하면 URL에 UTM 파라미터를 붙여 웹 분석 도구로 측정하는 방법도 있습니다.
자주 묻는 질문
QR 코드에 한글이 깨져 보여요.
코드 자체의 문제가 아니라 스캐너 앱이 문자 인코딩을 잘못 해석한 경우가 대부분입니다. 본 생성기는 UTF-8로 인코딩하며, 최신 스마트폰 기본 카메라와 카카오톡 스캐너는 UTF-8을 정상 처리합니다. 오래된 전용 스캐너 장비를 쓴다면 장비의 인코딩 설정을 확인하세요.
QR 코드를 흑백이 아닌 색상으로 만들어도 되나요?
가능합니다. 단, 어두운 전경 + 밝은 배경의 대비를 유지해야 합니다. 색을 반전(밝은 모듈 + 어두운 배경)하면 많은 스캐너가 인식하지 못합니다. 자세한 기준은 인쇄 가이드를 참고하세요.
같은 내용인데 생성할 때마다 모양이 조금 다른 이유는?
QR 표준에는 8가지 마스크 패턴이 있어서, 생성기는 흑백 모듈이 고르게 분포되도록 최적의 마스크를 골라 적용합니다. 어떤 마스크가 적용되든 담긴 데이터는 동일하며 판독 결과도 같습니다.