QR코드의 구조와 원리 – 파인더 패턴, 버전, 오류 복원 쉽게 이해하기

QR코드는 어떻게 일부가 가려져도 읽힐까? 파인더 패턴, 타이밍 패턴, 버전과 크기, 오류 복원 수준(L·M·Q·H), 담을 수 있는 데이터 양까지 QR코드의 원리를 그림과 함께 설명합니다.

QR코드는 1994년 일본의 덴소웨이브(DENSO WAVE)가 자동차 부품 관리를 위해 개발한 2차원 코드입니다. QR은 ‘Quick Response’의 약자로, 이름 그대로 빠르게 읽히는 것을 목표로 만들어졌습니다. 개발사가 특허권을 행사하지 않겠다고 밝혀 누구나 자유롭게 쓸 수 있게 되었고, 이후 국제 표준(ISO/IEC 18004)으로 정해져 전 세계에서 쓰이고 있습니다. 결제, 출입 인증, 메뉴판, 티켓처럼 일상 곳곳에서 볼 수 있는 이유입니다.

겉보기에는 검은 점이 무작위로 흩어진 것 같지만, QR코드에는 스캐너가 코드를 찾고 읽기 위한 정교한 규칙이 숨어 있습니다.

파인더 패턴위치와 방향을 찾는 큰 사각형 3개타이밍 패턴칸 크기와 간격을 알려 주는 점선얼라인먼트 패턴휘어진 면의 왜곡을 보정포맷 정보오류 복원 수준과 마스크 번호데이터 영역실제 내용과 복원용 데이터여백(콰이어트 존)사방에 칸 4개 너비의 빈 공간
QR코드의 주요 구성 요소

QR코드를 이루는 요소

파인더 패턴 (위치 찾기)

세 모서리에 있는 큰 사각형이 파인더 패턴입니다. 검정-흰색-검정이 1:1:3:1:1의 비율로 겹쳐 있어, 스캐너는 코드를 어느 방향에서 찍어도 이 비율을 찾아 코드의 위치와 기울기를 알아냅니다. QR코드를 거꾸로 들고 찍어도 읽히는 이유가 이것입니다. 파인더 패턴이 세 개뿐이기 때문에 비어 있는 네 번째 모서리를 보고 방향도 판단합니다.

타이밍 패턴

파인더 패턴 사이를 잇는 검정·흰색이 번갈아 나오는 점선입니다. 코드의 칸(모듈) 크기와 간격을 알려 주는 눈금자 역할을 해서, 종이가 휘거나 비스듬히 찍혀도 각 칸의 위치를 계산할 수 있게 합니다.

얼라인먼트 패턴

버전 2 이상의 QR코드에는 오른쪽 아래 부근에 작은 사각형이 있습니다. 코드가 원통형 컵처럼 휘어진 표면에 인쇄되었을 때 생기는 왜곡을 보정합니다. 큰 버전일수록 얼라인먼트 패턴이 여러 개 들어갑니다.

포맷 정보와 버전 정보

파인더 패턴 옆의 좁은 띠에는 오류 복원 수준과 마스크 패턴 번호가 기록된 포맷 정보가 있습니다. 버전 7 이상에는 코드의 크기를 알려 주는 버전 정보도 들어갑니다. 이 정보는 중요하기 때문에 코드 안에 두 번 기록됩니다.

데이터 영역과 마스크

나머지 공간에 실제 내용과 오류 복원용 데이터가 들어갑니다. 데이터를 그대로 배치하면 검은 칸이 한쪽에 몰리거나 파인더 패턴과 비슷한 모양이 우연히 생겨 인식을 방해할 수 있습니다. 그래서 8가지 마스크 패턴 중 가장 고르게 섞이는 것을 골라 적용합니다. 같은 내용이라도 생성기마다 모양이 조금 다를 수 있는 이유입니다.

여백(콰이어트 존)

코드 바깥의 빈 공간도 QR코드의 일부입니다. 표준은 사방에 칸 4개 너비의 여백을 두도록 정하고 있습니다. 여백이 없으면 주변의 글자나 무늬가 코드처럼 보여 인식이 실패할 수 있습니다.

버전과 크기

QR코드의 크기는 버전으로 나타냅니다. 버전 1은 가로세로 21칸이고, 버전이 하나 올라갈 때마다 4칸씩 늘어나 버전 40은 177×177칸입니다. 담는 내용이 길수록 생성기가 자동으로 더 큰 버전을 고르므로 코드가 촘촘해집니다. 촘촘한 코드는 작게 인쇄하면 읽기 어려우니, 링크를 담을 때는 가능하면 짧은 주소를 쓰는 것이 좋습니다.

오류 복원 수준

QR코드에는 리드-솔로몬(Reed-Solomon) 오류 정정 부호가 쓰입니다. 원래 데이터에 복원용 데이터를 덧붙여, 일부가 더럽혀지거나 찢어져도 원래 내용을 계산해 되살립니다. 복원 능력은 네 단계에서 고릅니다.

수준복원 가능한 손상(대략)특징
L약 7%코드가 가장 단순해 작게 인쇄하기 좋음
M약 15%일반적인 용도의 기본값
Q약 25%공장·야외 등 오염 가능성이 있는 곳
H약 30%가운데 로고를 넣거나 손상이 잦은 곳

복원 수준을 높이면 같은 내용이라도 코드가 더 촘촘해집니다. 튼튼함과 단순함 사이의 균형이기 때문에, 특별한 이유가 없다면 M이 무난합니다. QR코드 가운데 로고를 얹은 디자인은 로고가 가린 부분을 오류 복원으로 메우는 방식이므로 H 수준을 쓰는 것이 안전합니다.

오류 복원 수준별 복원 가능한 손상 비율(대략)L7%작게 인쇄할 때M15%일반 용도 (권장)Q25%오염되기 쉬운 곳H30%로고 삽입, 야외
수준이 높을수록 더 많이 가려져도 읽힙니다

QR코드에 담을 수 있는 양

가장 큰 버전 40, 오류 복원 L 수준을 기준으로 숫자만은 최대 7,089자, 영문 대문자·숫자는 4,296자, 일반 데이터는 2,953바이트까지 담을 수 있습니다. 한글은 보통 UTF-8로 인코딩되어 한 글자에 3바이트를 쓰므로 이론상 약 900자 정도입니다. 하지만 이렇게 꽉 채운 코드는 휴대폰으로 읽기가 무척 어렵습니다. 실제로는 링크나 짧은 문장을 담고, 긴 내용은 웹페이지에 올린 뒤 그 주소를 QR코드로 만드는 방식이 좋습니다.

정적 QR코드와 동적 QR코드

  • 정적 QR코드: 내용이 코드 안에 직접 들어 있습니다. 만든 뒤에는 바꿀 수 없지만 외부 서비스가 필요 없어 영구적으로 작동합니다. 이 사이트의 QR코드 만들기가 만드는 방식입니다.
  • 동적 QR코드: 코드에는 중간 서비스의 짧은 주소만 들어 있고, 그 서비스가 최종 목적지로 연결해 줍니다. 인쇄 후에도 목적지를 바꾸고 스캔 횟수를 볼 수 있지만, 서비스가 중단되거나 유료 구독이 끝나면 코드가 작동하지 않을 수 있습니다.

인쇄물처럼 오래 쓸 코드라면 이 차이를 알고 선택하는 것이 중요합니다. 관련 내용은 QR코드 만들기와 인쇄 가이드에서 더 자세히 다룹니다.

참고 자료

QR코드를 지금 바로 읽어야 한다면 설치 없이 쓰는 스캐너를 이용해 보세요.

함께 읽으면 좋은 글