QR코드의 원리와 안전한 사용법 — 큐싱(QR 피싱) 예방까지
QR코드는 어떻게 오류가 있어도 읽힐까? 버전·오류 복원 레벨·패턴 구조를 쉽게 설명하고, 위조 QR을 통한 피싱을 피하는 방법을 안내합니다.
식당 메뉴판, 공유 킥보드, 결제 화면, 행사 입장권, 명함까지 — 스마트폰 카메라를 갖다 대는 것만으로 정보를 여는 QR코드는 이제 일상의 일부가 되었습니다. 그런데 이 흑백 격자 무늬가 어떻게 수백 글자를 담고, 일부가 가려지거나 찢어져도 읽히며, 왜 모양이 매번 다르게 보이는지는 잘 알려져 있지 않습니다. 이 글에서는 QR코드의 구조와 원리를 어려운 수식 없이 풀어 설명하고, 최근 늘어나는 「큐싱(QR 피싱)」을 피하는 실전 요령까지 정리합니다.
QR코드란 무엇인가
QR은 Quick Response의 약자입니다. 1994년 일본의 자동차 부품 회사 덴소(현 덴소웨이브)에서 공장 부품 관리를 위해 개발했으며, 개발자는 하라 마사히로 입니다. 당시 쓰이던 1차원 바코드는 가로 방향으로만 정보를 담아 최대 수십 글자가 한계였고, 여러 개를 붙여 쓰다 보니 읽는 속도가 느렸습니다. QR코드는 가로와 세로 두 방향(2차원)에 정보를 담아 용량을 크게 늘리고, 어느 방향에서 찍어도 빠르게 읽히도록 설계되었습니다. 특허는 개발사가 보유하되 권리를 행사하지 않겠다고 선언해 누구나 무료로 쓸 수 있게 되었고, 이것이 전 세계적으로 퍼진 결정적 이유였습니다.
스마트폰 카메라가 QR코드 인식 기능을 기본으로 갖추면서 결제(카카오페이·네이버페이·제로페이 등), 출입 인증, 메뉴 주문, Wi-Fi 접속, 앱 설치 링크 등 활용 범위가 폭발적으로 넓어졌습니다.
다른 2차원 코드와의 차이
2차원 코드에는 QR 외에도 여러 종류가 있습니다. 작은 전자부품에 인쇄되는 데이터 매트릭스(Data Matrix), 항공 탑승권과 일부 신분증 뒷면에 쓰이는 PDF417, 일부 항공사 모바일 탑승권과 교통 티켓에 쓰이는 아즈텍(Aztec) 코드 등이 대표적입니다. QR코드가 이 가운데 일상에서 가장 널리 퍼진 이유는 특허 개방 정책과 함께, 스마트폰 카메라 앱이 기본으로 QR만큼은 확실하게 지원하기 때문입니다.
QR코드의 구조 — 격자 위의 약속
QR코드를 이루는 작은 정사각형 하나를 모듈이라고 합니다. 검은 모듈은 1, 흰 모듈은 0에 해당하며, 격자 위 특정 위치에는 데이터가 아니라 「읽는 방법」을 알려 주는 고정 패턴이 자리합니다.
1. 위치 찾기 패턴 (Finder Pattern)
QR코드의 세 모서리(왼쪽 위, 오른쪽 위, 왼쪽 아래)에 있는 큰 정사각형입니다. 검은 테두리 7×7, 흰 띠, 안쪽 검은 사각형 3×3의 구조로, 어느 방향으로 선을 그어도 검정:흰색:검정:흰색: 검정 비율이 1:1:3:1:1이 됩니다. 스캐너는 이 비율을 찾아 코드의 위치와 기울기, 방향을 순식간에 파악합니다. 네 번째 모서리에 이 패턴이 없는 이유는, 세 개만 있어도 회전 방향을 확정할 수 있기 때문입니다. 뒤집어 찍어도 읽히는 비밀이 여기에 있습니다.
2. 정렬 패턴 (Alignment Pattern)
크기가 큰 QR코드 내부에 흩어져 있는 작은 정사각형(5×5)입니다. 곡면에 붙어 있거나 비스듬히 찍혀 이미지가 휘어졌을 때 격자를 다시 바로잡는 기준점 역할을 합니다. 가장 작은 버전 1에는 없고, 버전 2부터 등장하며 크기가 커질수록 개수가 늘어납니다.
3. 타이밍 패턴 (Timing Pattern)
위치 찾기 패턴 사이를 잇는 검정과 흰색이 번갈아 나오는 한 줄입니다. 모듈 하나의 크기와 격자의 좌표를 계산하는 눈금자 역할을 합니다.
4. 형식 정보와 버전 정보
위치 찾기 패턴 주변에는 이 코드가 어떤 오류 복원 레벨과 마스크 패턴을 쓰는지 알려 주는 형식 정보가 두 번 중복 기록됩니다. 버전 7 이상의 큰 코드에는 크기를 알려 주는 버전 정보도 추가됩니다. 스캐너는 데이터를 읽기 전에 이 정보를 먼저 해석합니다.
5. 여백 (Quiet Zone)
코드 바깥을 둘러싼 흰 여백입니다. 규격상 모듈 4개 폭 이상을 권장하며, 여백이 부족하면 주변 그림이나 글자가 코드의 일부로 오인되어 인식률이 떨어집니다. 명함이나 포스터에 QR코드를 넣을 때 테두리를 바짝 붙이면 잘 안 읽히는 이유가 바로 이것입니다.
6. 데이터 영역과 오류 정정 영역
나머지 공간이 실제 내용이 들어가는 곳입니다. 데이터는 오른쪽 아래에서 시작해 2열씩 지그재그로 위아래를 오가며 채워지고, 데이터 뒤에는 오류를 복원하기 위한 정정 부호가 이어집니다.
버전과 용량 — 1부터 40까지
QR코드의 크기는 버전으로 정해집니다. 버전 1은 21×21 모듈, 버전이 하나 올라갈 때마다 가로·세로가 4모듈씩 늘어나 버전 40은 177×177 모듈입니다. 공식으로 쓰면 「모듈 수 = 17 + 4 × 버전」입니다.
담을 수 있는 양은 버전과 오류 복원 레벨, 그리고 어떤 종류의 문자를 넣는지에 따라 달라집니다. QR코드는 내용에 따라 네 가지 인코딩 모드를 골라 효율을 높입니다.
- 숫자 모드 — 0~9만 사용. 숫자 3개를 10비트에 담아 가장 효율적입니다.
- 영숫자 모드 — 대문자 영어, 숫자, 일부 기호(공백, $, %, *, +, −, ., /, :). 두 글자를 11비트에 담습니다.
- 바이트 모드 — 그 외 모든 문자. 한 글자(바이트)당 8비트. 한글은 UTF-8에서 한 글자가 3바이트이므로 용량을 많이 차지합니다.
- 한자(칸지) 모드 — 일본어 한자를 13비트에 담는 모드.
가장 큰 버전 40에 가장 낮은 오류 복원 레벨(L)을 적용하면 숫자 7,089자, 영숫자 4,296자, 바이트 2,953자까지 담을 수 있습니다. 반대로 스마트폰 카메라로 편하게 읽히는 실용적인 크기는 버전 10(57×57) 안쪽이므로, 짧은 URL을 쓰는 것이 인식률에 유리합니다. 소문자가 섞인 URL은 영숫자 모드를 쓸 수 없어 바이트 모드로 저장되므로, 같은 글자 수라도 코드가 더 조밀해진다는 점도 참고할 만합니다.
오류 정정과 마스크 — 손상되어도 읽히는 이유
리드-솔로몬 부호
QR코드의 가장 놀라운 특징은 일부가 찢어지거나, 로고로 가려지거나, 얼룩이 묻어도 정상적으로 읽힌다는 점입니다. 이는 리드-솔로몬(Reed-Solomon) 오류 정정 부호 덕분입니다. CD·DVD, 위성 통신에도 쓰이는 이 기술은 원본 데이터에 수학적으로 계산된 여분의 부호를 덧붙여, 일부가 손상되어도 나머지로 원본을 복원할 수 있게 합니다.
| 오류 복원 레벨 | 복원 가능 비율 | 주요 용도 |
|---|---|---|
| L (Low) | 약 7% | 깨끗한 환경, 최대 용량이 필요할 때 |
| M (Medium) | 약 15% | 일반적인 기본값 |
| Q (Quartile) | 약 25% | 오염 가능성이 있는 산업 현장 |
| H (High) | 약 30% | 가운데 로고를 넣는 디자인 QR |
복원 능력에는 대가가 있습니다. 같은 내용을 담더라도 레벨 H는 레벨 L보다 정정 부호가 훨씬 많아 코드가 커지거나 조밀해집니다. 가운데에 회사 로고가 들어간 QR코드가 읽히는 원리도 이것입니다. 로고가 가린 부분은 「손상된 데이터」로 취급되고, 레벨 H의 30% 복원력이 이를 메워 줍니다. 그래서 로고를 넣을 때는 반드시 높은 레벨을 선택하고, 위치 찾기 패턴을 가리지 않아야 합니다.
마스크 패턴 — 왜 같은 내용도 모양이 다를까
데이터를 그대로 격자에 배치하면 검은 모듈이 한쪽에 몰리거나, 우연히 위치 찾기 패턴과 비슷한 무늬가 생겨 스캐너를 혼란시킬 수 있습니다. 이를 막기 위해 QR코드는 데이터 영역에 여덟 가지 마스크 패턴 중 하나를 겹쳐(XOR 연산) 검정과 흰색이 고르게 분포하도록 만듭니다. 생성기는 여덟 패턴을 모두 시험해 벌점이 가장 낮은 것을 고르고, 어떤 마스크를 썼는지는 형식 정보에 기록합니다. 같은 URL을 다른 생성기에서 만들었을 때 모양이 달라 보이는 이유 중 하나가 마스크 선택과 오류 복원 레벨의 차이입니다.
QR코드 안에는 무엇이 들어가나
QR코드 자체는 「문자열」만 저장합니다. 그 문자열을 어떻게 해석할지는 스캐너 앱이 정합니다. 널리 쓰이는 형식은 다음과 같습니다.
- URL —
https://로 시작하는 주소. 가장 흔한 형태입니다. - Wi-Fi —
WIFI:T:WPA;S:네트워크이름;P:비밀번호;;형식. 스캔하면 바로 접속을 제안합니다. - 전화·문자·이메일 —
tel:,sms:,mailto:로 시작합니다. - 연락처(vCard) — 이름·전화·이메일을 묶은 명함 형식.
- 일정·위치 — 캘린더 이벤트나 지도 좌표를 담는 형식도 있습니다.
- 결제 — 결제사별 규격의 문자열. 가맹점 식별자와 금액 정보가 포함됩니다.
중요한 점은 QR코드에 「악성 코드」가 들어 있는 것이 아니라는 사실입니다. QR코드는 그저 글자일 뿐이며, 위험은 그 글자가 가리키는 목적지에 있습니다.
정적 QR과 동적 QR
QR 생성 서비스를 쓰다 보면 「정적」과 「동적」이라는 구분을 만납니다. 정적 QR은 URL이나 텍스트가 코드 안에 그대로 들어간 것입니다. 한 번 만들면 내용을 바꿀 수 없지만, 어떤 서비스에도 의존하지 않아 영구적으로 작동하고 비용이 들지 않습니다. 동적 QR은 코드 안에 생성 서비스의 짧은 주소만 넣고, 그 주소가 실제 목적지로 다시 연결(리다이렉트)해 주는 방식입니다. 인쇄 후에도 목적지를 바꿀 수 있고 스캔 횟수 같은 통계를 볼 수 있다는 장점이 있지만, 서비스가 종료되거나 요금을 내지 않으면 코드가 무효가 되고, 사용자가 미리보기에서 실제 목적지를 알 수 없어 피싱 QR과 구분이 어렵다는 단점이 있습니다.
명함이나 개인 안내문처럼 내용이 바뀌지 않는 용도라면 정적 QR이 단순하고 안전합니다. 캠페인처럼 링크가 바뀔 수 있고 통계가 필요하다면 동적 QR을 쓰되, 신뢰할 수 있는 자기 도메인을 쓰는 것이 좋습니다.
큐싱(QR 피싱)이란
큐싱(Quishing)은 QR과 피싱(Phishing)을 합친 말로, QR코드를 이용해 가짜 사이트로 유도하거나 악성 앱을 설치하게 만드는 사기 수법입니다. QR코드는 사람 눈으로 내용을 확인할 수 없기 때문에 문자 메시지 속 링크보다 경계심이 낮아지고, 이 틈을 노립니다. 널리 알려진 수법은 다음과 같습니다.
- 스티커 덧붙이기 — 공유 킥보드·자전거, 주차 정산기, 식당 테이블의 정상 QR 위에 가짜 QR 스티커를 붙입니다. 사용자는 늘 하던 대로 찍지만 가짜 결제 페이지로 연결됩니다.
- 가짜 고지서·안내문 — 주차 위반 딱지, 택배 부재 안내, 공공기관 안내문을 흉내 낸 종이에 QR을 인쇄해 개인정보 입력이나 앱 설치를 유도합니다.
- 이메일·메신저 이미지 — 링크 대신 QR 이미지를 보내 보안 필터를 피하고, 스마트폰으로 찍게 만들어 PC 보안 환경을 우회합니다.
- 이벤트·설문 미끼 — 경품이나 할인을 내세워 카드 번호, 계정 정보를 입력받습니다.
안전하게 QR코드 사용하는 법
스캔할 때
- 미리보기 URL을 꼭 읽습니다. 대부분의 카메라 앱은 바로 열지 않고 주소를 먼저 보여 줍니다. 도메인이 서비스 이름과 맞는지, 철자가 미묘하게 다르지 않은지 확인하세요.
- 단축 URL은 한 번 더 의심합니다. 실제 목적지가 감춰져 있으므로, 결제나 로그인이 필요한 상황이라면 공식 앱으로 직접 접근하는 것이 안전합니다.
- 붙어 있는 QR은 물리적으로 살핍니다. 원래 인쇄된 QR 위에 스티커가 덧붙어 있거나, 주변과 재질·색이 다르면 사용하지 마세요.
- 앱 설치를 요구하면 멈춥니다. 정상적인 결제나 안내는 앱 마켓 밖에서 설치 파일(APK)을 내려받게 하지 않습니다.
- 개인정보·카드 정보 입력은 공식 경로로만. QR로 열린 페이지에서 비밀번호, 카드 번호, 인증번호를 요구하면 페이지를 닫고 공식 앱이나 고객센터로 확인하세요.
- Wi-Fi QR은 출처를 확인합니다. 공공장소의 낯선 Wi-Fi QR은 중간에서 통신을 가로채는 가짜 네트워크일 수 있습니다.
QR코드를 만들 때
- 가능하면 단축 URL 대신 본래 도메인을 그대로 넣어 사용자가 미리보기에서 신뢰할 수 있게 합니다.
- 인쇄물에는 QR 아래에 연결되는 주소를 글자로도 함께 적어 위조 스티커와 대조할 수 있게 합니다.
- 여백을 충분히 두고, 오류 복원 레벨은 사용 환경에 맞게 고릅니다. 야외 부착물은 M 이상이 안전합니다.
- QR 내용에 비밀번호나 개인정보를 그대로 넣지 않습니다. 이미지가 복사되면 누구나 읽을 수 있습니다.
- 배포 전 다른 기종의 스마트폰 두어 대로 실제 스캔 테스트를 합니다.
스캔이 안 될 때 점검 목록
- 여백 — 코드 주변에 모듈 4개 폭 이상의 흰 여백이 있는지 확인합니다. 테두리나 글자가 바짝 붙어 있으면 인식률이 크게 떨어집니다.
- 대비와 색 반전 — 밝은 배경에 어두운 모듈이 기본입니다. 어두운 배경에 밝은 모듈(반전)은 일부 스캐너가 읽지 못하며, 빨강·노랑 같은 밝은 색 모듈도 대비가 부족할 수 있습니다.
- 크기 — 스캔 거리의 약 1/10을 최소 크기로 잡는 것이 흔한 경험칙입니다. 손에 들고 20cm에서 찍는 명함이라면 2cm, 3m 떨어진 포스터라면 30cm 정도가 필요합니다.
- 해상도와 인쇄 품질 — 모듈 경계가 뭉개지거나 잉크가 번지면 데이터가 손상됩니다. 작은 코드는 벡터(SVG)나 충분히 큰 PNG로 인쇄하세요.
- 반사와 곡면 — 코팅지의 빛 반사, 병이나 컵 같은 곡면은 위치 찾기 패턴을 왜곡합니다. 무광 재질과 평면 부착이 안전합니다.
- 내용이 너무 길다 — 긴 URL은 버전이 높아져 모듈이 촘촘해집니다. 스마트폰 카메라로 편하게 읽히려면 내용을 줄이거나 코드를 키워야 합니다.
마치며
QR코드는 위치 찾기 패턴·타이밍 패턴 같은 고정 구조 위에 데이터와 오류 정정 부호를 얹고, 마스크로 고르게 섞은 뒤 형식 정보로 「읽는 법」을 알려 주는 정교한 약속입니다. 그 덕분에 일부가 손상되어도 안정적으로 읽히지만, 담긴 내용이 무엇인지는 사람 눈으로 알 수 없다는 약점도 함께 지닙니다. 스캔 전에 미리보기 주소를 읽는 습관 하나가 큐싱 피해를 막는 가장 확실한 방법입니다. 텍스트나 URL, Wi-Fi 정보를 QR코드로 만들어 보고 싶다면 FunAppBox의 QR코드 생성기를 이용해 보세요. 만든 코드를 이미지로 내려받아 명함이나 안내문에 바로 쓸 수 있습니다.