컴퓨터와 디지털 · 데이터와 기록
QR 코드 — 왜 세 모서리에 큰 네모가 있을까
작은 검은 칸들이 카메라에게 길을 알려 주는 방법

카페에서 메뉴를 보려고 작은 무늬를 휴대전화로 비춘다. 검은 칸들이 빼곡한데 화면은 곧 주소를 알아본다. 사람 눈에는 비슷비슷한 무늬가 기계에는 읽을 수 있는 정보인 셈이다. QR 코드를 자주 써도 그 안의 큰 네모들은 그냥 지나치기 쉽다.
다음에 볼 때는 모서리 세 곳을 먼저 살펴보자. 보통의 QR 코드에는 작은 칸보다 훨씬 큰 네모 무늬가 있다. 장식이 아니라 코드를 찾고 읽는 데 필요한 표지다. 모든 검은 칸이 같은 종류의 정보를 담는 것은 아니라는 사실이 이 이야기의 출발점이다.
01. 카메라는 코드가 어디 있는지부터 알아야 한다
휴대전화로 비춘 장면에는 코드만 있는 것이 아니다. 종이의 테두리와 식탁, 그림자도 함께 들어온다. 기계는 먼저 어느 부분을 읽을 대상인지 구분해야 한다. 큰 위치 검출 무늬는 그 시작을 돕는다.
함께 살펴본 공개 구현은 일반적인 QR 코드의 네 모서리 가운데 오른쪽 아래를 제외한 세 곳에 이 무늬를 그린다. 서로 떨어져 있는 표지를 찾으면 코드의 자리와 방향을 파악하는 데 도움이 된다. 이 글은 일반적인 QR 코드를 다루며, 모양이 다른 모든 변형 코드에 같은 설명을 적용하지는 않는다.
02. 아무렇게나 배치한 세 개의 상자는 아니다
큰 네모는 검은색과 흰색이 일정한 구조로 겹쳐 있다. 주변의 작은 데이터 무늬와 구별되는 모양을 갖도록 만든 것이다. 사람에게 제목과 본문을 다른 크기로 보여 주는 것처럼, 읽기 위한 표지를 내용과 구분한다는 점에서 이해할 수 있다.
그 옆에는 칸의 간격을 읽는 데 쓰이는 반복 무늬도 있다. 크기에 따라 추가적인 정렬 무늬도 들어간다. 사진 속 기호를 단순한 검은색 그림으로 인식한 뒤 끝내는 것이 아니라, 어느 위치의 칸을 어떤 순서로 읽을지 파악하는 여러 장치가 있는 셈이다.
03. 작은 칸들이 모여 글을 표현한다
QR 코드의 칸 하나를 모듈이라고 부른다. 여러 칸에 걸쳐 데이터를 배치하면 글과 숫자 등을 나타낼 수 있다. 사람이 한 칸을 보고 글자 하나를 읽는 방식은 아니다. 정해진 규칙에 따라 모인 값들을 해석해야 한다.
주소가 들어 있는 코드라면 읽은 결과는 보통 짧은 웹 주소 같은 문자열이다. 코드 안에 웹사이트의 모든 화면이 압축되어 들어 있는 것은 아니다. 주소를 적은 종이를 받은 뒤 그 장소로 찾아가는 것처럼, 문자열을 읽는 단계와 인터넷으로 실제 내용을 여는 단계가 이어진다.
04. 같은 크기에 무엇이 얼마나 들어갈까
QR 코드에는 크기의 단계가 있다. 담을 데이터가 많아지거나 더 많은 오류 정정 정보를 넣어야 하면 필요한 칸 수가 달라질 수 있다. 작은 도형 하나에 무엇이든 무한히 넣을 수는 없다. 읽기 쉽게 인쇄할 크기와도 관계가 있다.
같은 종이 면적에 칸을 더 촘촘하게 넣으면 카메라가 각 칸을 구별하기 어려워질 수 있다. 휴대전화의 성능과 빛, 인쇄 상태도 영향을 준다. 데이터가 들어갈 이론적인 공간과 사람이 편하게 비추어 읽는 실제 조건을 함께 고려해야 한다.
05. 일부가 가려져도 읽히는 까닭
QR 코드에는 원래 데이터와 함께 오류 정정을 위한 정보가 들어간다. 확인한 구현은 리드-솔로몬이라는 오류 정정 방법을 사용한다. 이름을 외우기보다 일부 정보가 손상되어도 원래 값을 복원할 여지를 두는 장치로 이해하면 된다.
정정의 수준도 여러 단계다. 복원에 필요한 정보를 더 담으면 그만큼 사용할 공간과의 관계가 생긴다. 따라서 코드는 조금 가려져도 반드시 읽힌다는 보증서는 아니다. 어느 부분이 얼마나 손상되었는지, 사진이 어떤 상태인지에 따라 결과가 달라진다. 큰 위치 표지를 모두 지워도 괜찮다고 생각해서는 안 된다.
06. 무늬를 한 번 더 바꾸는 이유
데이터를 그대로 칸에 놓으면 우연히 읽기 까다로운 무늬가 생길 수 있다. 확인한 프로그램은 여러 마스크를 적용해 보고, 큰 덩어리나 반복 등 불리한 패턴에 점수를 매겨 더 적합한 결과를 고른다. 여기서 마스크는 데이터를 정해진 규칙으로 바꾸는 과정이다.
비밀번호로 내용을 감추는 암호화와는 목적이 다르다. 읽는 쪽도 정해진 정보를 보고 규칙을 되돌릴 수 있다. 검은 칸이 뒤섞인 것처럼 보여도 아무렇게나 흩뿌린 그림이 아닌 이유다. 내용을 담는 일과 그 내용을 잘 읽히도록 배열하는 일이 함께 들어 있다.
07. 읽을 수 있다는 것과 믿을 수 있다는 것
기계가 코드를 정확히 읽었다고 연결된 주소까지 좋은 곳이라는 뜻은 아니다. 오류 정정은 무늬가 망가져 생기는 문제를 다루지, 주소를 만든 사람의 의도를 심사하지는 않는다. 글씨가 선명한 안내문도 내용은 따로 살펴야 하는 것과 같다.
주소를 확인하는 기능이 보이면 어디로 연결되는지 보고 열면 된다. 이것은 QR 코드가 특별히 수상하다는 이야기가 아니라 읽기와 신뢰를 구분하는 기본적인 태도다. 화면에서 문자열을 얻는 기술과 그 뒤의 서비스는 서로 다른 역할을 맡는다.
08. 무늬를 알면 카페에서도 조금 다르게 보인다
함께 실은 AI 삽화는 카페에서 휴대전화로 메뉴를 확인하는 분위기를 담았다. 가짜 QR 무늬를 실제 작동하는 코드처럼 제시하지 않도록 카드의 뒷면을 보여 준다. 코드의 생김새를 재현한 기술 도판이 아니라 쓰임을 떠올리는 장면이다.
이제 QR 코드를 만나면 세 모서리의 큰 네모와 나머지 작은 칸들을 나누어 보자. 어디에 있는지 알려 주는 표지와 내용을 담는 부분, 손상을 견디기 위한 정보가 함께 있다. 작은 무늬 하나를 읽는 순간에도 기계가 길을 잃지 않게 하는 여러 약속이 조용히 작동하고 있다.
이야기의 바탕이 된 자료
- Project Nayuki — 공개 QR Code generator 안내 ↗확인일 2026-10-30
QR Code Model 2의 생성·여러 크기와 오류 정정 수준·공개 구현의 범위
- Project Nayuki — QR 코드 생성 Python 공개 구현 ↗확인일 2026-10-30
세 모서리 위치 검출·타이밍 패턴·정렬 무늬 · 데이터·리드-솔로몬 오류 정정·크기 및 정정 수준의 관계 · 마스크 후보와 패널티 점수의 평가; 암호화와 구분