QR 코드는 1994 년 일본 Denso Wave 가 자동차 부품 추적용으로 발명한 2 차원 바코드. 이제는 메뉴판·결제·티켓·Wi-Fi 공유 어디서나 보인다. 검은 사각형 격자처럼 보이지만 내부는 정밀하게 설계된 구조 — finder 패턴, error correction, mask 패턴이 합쳐져 카메라가 비뚤어진 각도나 오염된 표면에서도 안정적으로 읽도록 만든다. 이 가이드는 ISO/IEC 18004 사양을 기반으로 QR 코드 내부의 핵심 구성 요소를 정리한다.
전체 구조 — 함수 패턴 + 데이터 영역
QR 코드 한 장은 크게 두 부분으로 나뉜다:
- 함수 패턴 (Function patterns) — 스캐너가 코드의 위치·방향·크기를 인식하는 고정 영역. finder / alignment / timing / format / version.
- 데이터 영역 (Encoding region) — 실제 데이터 + Reed-Solomon error correction codeword 가 박히는 셀들. 함수 패턴 이외의 모든 셀.
Version (크기) 1 ~ 40 으로 정의. Version N = (4N + 17) × (4N + 17) 셀. Version 1 = 21×21, Version 40 = 177×177.
Finder 패턴 — 세 모서리의 큰 사각형
███████
█ █
█ ███ █
█ ███ █
█ ███ █
█ █
███████7×7 흑·백 동심 사각형. 세 모서리 (좌상·우상·좌하) 에 박힘. 검은 외곽 (7×7) → 흰 안쪽 (5×5) → 검은 중심 (3×3) 의 1:1:3:1:1 비율.
스캐너의 이미지 처리는 어떤 방향·각도에서 스캔해도 이 1:1:3:1:1 비율 라인을 검색해서 finder 위치를 찾는다. 세 개 모서리 위치만 알면 나머지 코드의 정렬·perspective transform 이 가능. 한 모서리는 의도적으로 비워둠 — 코드의 회전 방향 (어디가 위인가) 식별.
Separator + Alignment + Timing 패턴
- Separator — finder 주변 1 셀 흰색 띠. finder 와 데이터 영역 사이 분리. 스캐너가 finder 영역 끝을 인식하는 마진.
- Alignment patterns — Version 2 이상에 등장하는 5×5 작은 사각형. 큰 코드는 finder 세 개만으로는 중간 영역의 perspective 보정이 부정확 → 격자 안에 추가 alignment 박혀 정확도 ↑. Version 40 은 46 개.
- Timing patterns — finder 사이의 수평·수직 흑백 교차 라인. 스캐너가 셀 크기를 정확히 측정. 코드가 인쇄·촬영 과정 에서 살짝 왜곡돼도 셀 경계 식별 가능.
Format Information — error correction + mask 정보
finder 주변 15 비트 영역에 박힘. 어떤 ECC 수준 (L/M/Q/H) 인지 + 어떤 mask 패턴 (0-7) 이 적용됐는지 표시. 이 15 비트도 자체 BCH (15, 5) error correction 으로 보호 — format 영역 일부 손상돼도 복원.
스캐너 동작 순서: finder 발견 → format 디코드 → mask 확인 → 데이터 영역에 mask XOR 적용해 원본 데이터 복원.
Version Information — 큰 코드의 크기 정보
Version 7 이상부터 우상·좌하 finder 옆에 18 비트 version 정보 영역. BCH (18, 6) error correction. 7~40 (34 가지) version 번호 인코딩.
데이터 인코딩 — 4 가지 모드
QR 은 입력 데이터의 성격에 따라 다른 인코딩 모드 사용. 짧을수록 더 많이 박힘 → 한 문자당 비트 수가 다르다:
- Numeric (0001) — 숫자만. 3 자리 → 10 비트. 가장 밀도 높음 (Version 40 H 기준 7,089 자).
- Alphanumeric (0010) — 숫자 + 대문자 영문 +
$%*+-./:9 개 특수문자. 2 자리 → 11 비트. - Byte (0100) — 8-bit 임의 바이트 (UTF-8 등). 1 글자 → 8 비트. URL 이 보통 이 모드.
- Kanji (1000) — Shift-JIS 2 바이트 문자. 1 글자 → 13 비트. 일본어 한정 효율 ↑.
한 코드 안에서 모드 전환 가능 — "abc123" 이면 알파넘 + 숫자 분리 인코딩이 byte 단일보다 짧다. QR 코드 생성기 가 자동으로 효율적인 모드 선택.
Error correction — Reed-Solomon 의 마법
QR 의 가장 중요한 특징. 손상된 코드도 읽힌다. ECC 수준 4 가지:
| 수준 | 복원 가능 | 용도 |
|---|---|---|
| L (Low) | ~7% | 깨끗한 화면용 (앱·웹) |
| M (Medium) | ~15% | 일반 인쇄 |
| Q (Quartile) | ~25% | 산업용·옥외 |
| H (High) | ~30% | 로고 합성·험한 환경 |
Reed-Solomon 알고리즘은 데이터 codeword 외에 추가 error correction codeword 를 박는다. ECC 수준이 높을수록 추가 codeword 비중 ↑ → 같은 데이터를 박으려면 코드가 더 커진다.
Reed-Solomon 은 GF(2^8) Galois Field 다항식 연산 기반. 데이터를 다항식 계수로 보고, 에러 위치·값을 미지수 다항식으로 푸는 방식. 정확한 수학은 깊지만 직관적 핵심: codeword 사이의 거리를 충분히 벌려두면 일부가 손상돼도 가장 가까운 valid codeword 로 복원 가능.
로고 합성 트릭
QR 가운데 회사 로고를 박을 수 있는 비결이 ECC. 로고가 가린 영역을 "손상" 으로 간주해도 복원 범위 안 — 보통 H 수준 (~30%) 사용하면 가운데 25% 정도까지 가려도 안전.
Masking — 8 가지 패턴 중 최적 선택
데이터를 그대로 박으면 큰 흑색 덩어리나 finder 와 헷갈리는 패턴이 생길 수 있다. QR 사양은 데이터 영역에 8 가지 mask 중 하나를 XOR 적용해 시각적 균형 확보.
Mask 0: (row + col) % 2 == 0
Mask 1: row % 2 == 0
Mask 2: col % 3 == 0
Mask 3: (row + col) % 3 == 0
Mask 4: (row/2 + col/3) % 2 == 0
Mask 5: (row*col)%2 + (row*col)%3 == 0
Mask 6: ((row*col)%2 + (row*col)%3) % 2 == 0
Mask 7: ((row+col)%2 + (row*col)%3) % 2 == 08 개 mask 마다 결과 코드를 평가하는 4 가지 penalty 룰 (연속 동색 5 셀+ / 2×2 동색 블록 / finder-like 패턴 / 흑·백 비율) 점수를 매겨 총 penalty 가 최소 인 mask 선택. QR 코드 생성기 같은 generator 가 자동 계산.
실제 데이터 흐름 — "Hello!" 인코딩
- 모드 선택 — "Hello!" 는 알파넘에 ! 포함이라 byte 모드 사용 (0100).
- 문자 카운트 인코딩 — Version 1-9 의 byte 모드는 8 비트 카운트. "Hello!" = 6 글자 →
00000110. - 데이터 인코딩 — 각 문자 ASCII → 8 비트.
01001000 01100101 01101100 01101100 01101111 00100001. - terminator + padding —
0000+ padding bit + 패딩 바이트 (11101100,00010001교차) 로 codeword 채움. - Reed-Solomon ECC 생성 — ECC 수준에 따라 추가 codeword 계산.
- 모듈 배치 — finder/timing/alignment 자리 비우고 나머지에 codeword 비트 zigzag 배치.
- mask 선택 — 8 mask 평가 후 최저 penalty 적용.
- format 정보 — ECC 수준 + 선택된 mask 를 finder 주변 15 비트 영역에 박음 (BCH 보호).
흔한 함정
1. 너무 큰 URL
Version 40 H 의 byte 모드 한도 = 1,273 글자. URL 의 query parameter 가 길면 Version 폭주 → 코드가 조밀해져 스캔 어려움. URL shortener 먼저.
2. 콘트라스트 부족
검정에 가까운 색 + 흰색이 가장 안전. 두 색의 luminance 차이가 충분해야. 검은 배경에 흰 QR (반전) 은 일부 스캐너가 실패 — 대부분 QR 디코더가 "어두운 = 1" 가정. 명시적 invert 옵션 없으면 검색 X.
3. 작은 크기 + 인쇄 후 손상
명함에 박는 6mm 크기 QR 은 ECC L 로는 위험. M 이상 권장. 옥외 광고 대형 QR 은 빗물·먼지 가능성 → H 권장.
4. quiet zone 무시
QR 사양은 코드 주변에 4 셀 (= 코드 셀 크기 4 개분) 흰 여백 (quiet zone) 필수. 디자이너가 빡빡하게 잘라내면 스캐너가 finder 인식 실패. 인쇄 결과물 점검 시 흰 마진 확인.
5. micro QR 과 혼동
Micro QR (M1-M4) 은 별도 사양. Finder 1 개만 사용. 일반 QR 스캐너가 인식 못 할 수 있음. 모바일 결제 등 표준 QR 만 사용.
참고 자료
- ISO/IEC 18004:2024 — QR Code 공식 사양
- Reed-Solomon — Wikipedia
- Denso Wave (QR 발명사) — QR Code 역사
요약
- QR 코드는 finder / alignment / timing / format / version 다섯 함수 패턴 + 데이터 영역 구조.
- 데이터 인코딩 모드 4 가지 (numeric/alphanumeric/byte/kanji) — 입력에 따라 자동 선택, 짧을수록 효율 ↑.
- Reed-Solomon error correction 4 단계 (L 7% / M 15% / Q 25% / H 30%). 로고 합성은 H 권장.
- Mask 8 가지 패턴 중 finder-like 회피 + 시각 균형 최저 penalty 선택.
- QR 만들 때 quiet zone 4 셀 + 콘트라스트 + 적정 ECC 수준 점검.
- 직접 실험은 QR 코드 생성기 에서 — ECC L/M/Q/H 모두 즉시 비교 가능.