QR 코드의 작동 원리: 구조, 오류 정정, 저장 용량 완벽 정리
휴대폰이 QR 코드를 읽을 때 실제로 어떤 일이 일어날까요? 파인더 패턴, 모듈, 버전, 오류 정정 수준, 그리고 QR 코드에 담을 수 있는 데이터 양까지 알기 쉽게 정리했습니다.
게시일 5분 소요
QR 코드는 식당 테이블, 택배 상자, 기차표, 명함, 결제 단말기 등 어디에나 있습니다. 하지만 흑백 사각형 안에 무엇이 숨어 있는지, 로고로 일부를 가려도 코드가 여전히 작동하는 이유가 무엇인지 아는 사람은 많지 않습니다. 이 가이드에서는 QR 코드의 작동 원리를 쉬운 말로 설명합니다.
짧은 역사
QR 코드(Quick Response code의 줄임말)는 1994년 일본 도요타 그룹 계열사인 덴소 웨이브(Denso Wave)의 하라 마사히로가 개발했습니다. 자동차 공장에서는 1차원 바코드보다 더 빠르게 부품을 추적할 방법이 필요했습니다. 기존 바코드는 한 방향으로만 데이터를 저장해 20자 정도밖에 담지 못하지만, QR 코드는 가로와 세로 두 방향으로 데이터를 저장해 수천 자까지 담을 수 있습니다.
덴소 웨이브는 이 기술의 특허를 취득했지만 권리를 행사하지 않기로 했고, 이 형식은 국제 표준(ISO/IEC 18004)이 되었습니다. 이러한 개방성 덕분에 누구나 어떤 기기에서든 무료로 QR 코드를 만들고 읽을 수 있게 되었습니다.
QR 코드의 구조
모든 QR 코드는 모듈이라는 작은 칸으로 이루어진 정사각형 격자입니다. 각 모듈은 어둡거나 밝으며 1비트를 나타냅니다. 격자의 일부 영역은 정해진 역할을 맡고 있습니다.
- 파인더 패턴 — 모서리에 있는 세 개의 큰 사각형입니다. 코드가 거꾸로 놓여 있거나 비스듬한 각도에서 촬영되더라도 스캐너가 코드를 즉시 찾아내고 방향을 파악할 수 있게 해 줍니다.
- 정렬 패턴 — 버전 2부터 들어가는 작은 사각형으로, 코드가 곡면에 인쇄되었거나 비스듬히 보일 때 왜곡을 보정하는 데 도움을 줍니다.
- 타이밍 패턴 — 파인더 패턴 사이에 어두운 칸과 밝은 칸이 번갈아 이어지는 선입니다. 스캐너에 각 모듈의 크기를 알려 줍니다.
- 포맷 정보 — 파인더 패턴 옆의 띠 영역으로, 오류 정정 수준과 사용된 마스크 패턴을 저장합니다.
- 콰이어트 존 — 코드 주위의 빈 여백입니다. 이 여백도 표준 사양의 일부로, 여백이 없으면 스캐너는 코드가 어디서 끝나고 배경이 어디서 시작되는지 구분할 수 없습니다.
나머지 영역은 모두 격자 전체에 고르게 섞여 배치된 데이터 코드워드와 오류 정정 코드워드입니다.
버전: 어떤 코드는 왜 더 촘촘할까
QR 코드에는 버전이라고 부르는 40가지 크기가 있습니다. 버전 1은 21 × 21 모듈이고, 버전이 하나 올라갈 때마다 한 변에 4모듈씩 늘어나 버전 40은 177 × 177 모듈이 됩니다. 인코딩하는 데이터가 많을수록 버전이 높아지고, 같은 인쇄 크기에서 모듈 하나하나는 더 작아집니다.
그래서 짧은 URL은 깔끔하고 여유 있는 패턴을 만들고, 긴 텍스트는 더 크게 인쇄해야 하는 촘촘한 패턴을 만듭니다. QR 코드 생성기에서 코드를 만들면 미리보기에 버전과 모듈 수가 표시되므로 밀도를 계속 확인할 수 있습니다.
인코딩 모드와 저장 용량
QR 코드는 내용에 맞춰 가장 효율적인 인코딩 모드를 선택합니다.
| 모드 | 문자 | 최대 용량(버전 40, L 수준) |
|---|---|---|
| 숫자 | 0–9 | 7,089자리 |
| 영숫자 | 0–9, A–Z, 공백, $%*+-./: |
4,296자 |
| 바이트 | 모든 데이터(주로 UTF-8 텍스트) | 2,953바이트 |
| 한자(Kanji) | 일본어 한자 | 1,817자 |
이는 이론상 최댓값입니다. 실제로는 수백 자 정도까지가 안정적으로 스캔됩니다. 참고로 한글은 바이트 모드로 저장되며 UTF-8에서 한 글자당 3바이트를 차지하므로, 영문보다 같은 글자 수에서 코드가 훨씬 촘촘해집니다. 더 많은 내용을 공유해야 한다면 대신 웹 페이지로 연결되는 짧은 링크를 인코딩하세요.
오류 정정: 로고를 넣을 수 있는 비밀
QR 코드는 흠집 난 CD나 DVD가 계속 재생될 수 있게 해 주는 것과 같은 수학 원리인 리드-솔로몬 오류 정정을 사용합니다. 코드 일부가 손상되거나 더러워지거나 가려져도 원래 데이터를 복원할 수 있도록 추가 코드워드를 덧붙이는 방식입니다. 수준은 네 가지입니다.
- L(낮음) — 손상된 코드워드의 약 7%를 복원
- M(보통) — 약 15%
- Q(높음) — 약 25%
- H(매우 높음) — 약 30%
수준이 높을수록 코드는 더 튼튼해지지만, 중복 데이터에 더 많은 공간을 쓰기 때문에 크기도 커집니다. 바로 이것이 로고 QR 코드를 가능하게 하는 원리입니다. 가운데에 넣은 로고는 의도적으로 코드 일부를 “손상”시키고, 오류 정정이 그 빈틈을 메웁니다. 로고를 넣는다면 Q 또는 H 수준을 선택하고, 로고 크기는 코드 면적의 약 4분의 1 이하로 유지하세요.
팁: 오류 정정이 좋은 대비를 대신해 주지는 않습니다. 색이 너무 연하거나, 크기가 너무 작거나, 콰이어트 존이 없는 코드는 H 수준에서도 인식되지 않을 수 있습니다.
마스킹: 패턴을 읽기 쉽게 유지하기
원시 데이터는 우연히 한 가지 색으로 된 큰 덩어리나 파인더 패턴처럼 보이는 모양을 만들어 스캐너를 혼란스럽게 할 수 있습니다. 이를 막기 위해 인코더는 특정 모듈을 반전시키는 수학 공식인 8가지 마스크 패턴 중 하나를 적용하고, “감점 점수”가 가장 낮은 패턴을 선택합니다. 스캐너는 포맷 정보에서 마스크 번호를 읽어 이를 되돌립니다. 마스크에 신경 쓸 필요는 전혀 없지만, 내용이 거의 같은 두 코드가 완전히 다르게 보일 수 있는 것은 바로 마스크 때문입니다.
스캔할 때 일어나는 일
카메라를 QR 코드에 비추면 스캐너는 다음 과정을 거칩니다.
- 세 개의 파인더 패턴을 찾아 코드의 위치, 크기, 회전 각도를 계산합니다.
- 정렬 패턴을 이용해 원근을 보정하여 기울어진 코드를 평평한 격자로 만듭니다.
- 타이밍 패턴을 자로 삼아 각 모듈이 어두운지 밝은지 샘플링합니다.
- 포맷 정보를 읽고 마스크를 제거한 뒤 코드워드를 수집합니다.
- 리드-솔로몬 디코딩으로 오류를 복구합니다.
- 링크, 와이파이 접속 정보, 연락처 카드 등 데이터를 해석하고 알맞은 동작을 제안합니다.
이 모든 과정에는 몇 밀리초밖에 걸리지 않습니다. 온라인 QR 코드 스캐너로 직접 확인해 보세요. 업로드한 이미지, 링크, 카메라 영상을 대상으로 이 단계들을 브라우저에서 바로 실행합니다.
정적 QR 코드와 동적 QR 코드
정적 QR 코드는 URL, 와이파이 비밀번호, 텍스트 등 최종 내용을 직접 담고 있습니다. 영구적으로 작동하고, 서버가 필요 없으며, 추적되지 않습니다. 동적 QR 코드에는 서비스 제공업체가 소유한 짧은 리디렉션 링크가 들어 있어 나중에 연결 주소를 바꾸거나 스캔 수를 집계할 수 있지만, 구독이 끝나면 더 이상 작동하지 않습니다.
QR.tools에서 만드는 코드는 모두 정적 코드로, 무료이고 개인정보를 보호하며 영구적입니다. 나중에 연결 주소를 바꿔야 할 수도 있다면, 직접 관리하는 페이지로 코드를 연결해 두고 그 페이지의 내용을 수정하세요.
QR 코드에는 무엇을 담을 수 있을까
QR 코드는 단순히 텍스트를 저장하기 때문에, 그 텍스트의 형식에 따라 휴대폰이 어떤 동작을 할지가 정해집니다. 대표적인 표준 형식은 다음과 같습니다.
- URL — 웹사이트 열기(
https://…) - 와이파이 — 네트워크에 연결(
WIFI:T:WPA;S:…;P:…;;) — 와이파이 QR 코드 생성기 참고 - vCard — 연락처 저장 — vCard QR 코드 생성기 참고
- 이메일, SMS, 전화 —
mailto:,SMSTO:,tel:로 메시지 작성 또는 전화 걸기 - 캘린더 일정 — iCalendar
VEVENT로 일정 추가 - 위치 정보 —
geo:좌표로 지도 열기
핵심 정리
- QR 코드는 데이터 주위에 파인더, 타이밍, 정렬 패턴이 고정 배치된 모듈 격자입니다.
- 내용이 많을수록 버전이 높아지고, 패턴이 촘촘해지며, 최소 인쇄 크기도 커집니다.
- 오류 정정(L, M, Q, H) 덕분에 코드가 손상을 견딜 수 있고, 로고도 넣을 수 있습니다.
- 정적 코드는 영구적이고 개인정보를 보호하며, 동적 코드는 수정할 수 있지만 제공업체에 의존합니다.
직접 만들어 보고 싶으신가요? QR 코드 생성기를 열고 원하는 색상과 로고로 몇 초 만에 나만의 코드를 만들어 보세요.