paintqr

QR 코드가 실제로 읽히는지 우리는 이렇게 확인합니다, 그리고 직접 확인하는 법

노트북 화면에서는 읽히던 코드가 메뉴판에서는 안 읽힐 수 있습니다. PaintQR의 모든 디자인 뒤에는 같은 방법이 있습니다. 코드마다 두 개의 소프트웨어 판독기를 거치고, 실험실에서 열네 가지 카메라 조건을 흉내 내고, 인쇄한 시험지를 실제 휴대폰으로 찍어 봅니다. 그 방법을 짧게 줄인 것이, 인쇄물을 직접 검사할 때 해야 할 일입니다.

업데이트 2026년 11월 10일

한 단계가 아니라 세 단계

QR 코드가 반드시 읽힌다고 증명해 주는 단 하나의 검사는 없습니다. 컴퓨터의 디코더는 팔 길이만큼 떨어진 휴대폰 카메라보다 훨씬 너그럽고, 같은 휴대폰도 조명이 강한 매장에서는 책상 앞에서보다 까다로워집니다. 그래서 PaintQR은 세 단계로 검사합니다. 단계마다 앞의 것보다 비용이 적고 더 자주 돌아갑니다. 모든 디자인은 내려받기 전에 소프트웨어로 디코딩되고, 그 소프트웨어가 적용하는 디자인 규칙은 인쇄한 시험지를 휴대폰으로 찍어 얻은 결과에서 나왔으며, 스타일과 설정을 비교하는 실험 장치는 카메라가 만들어 내는 조건들 속으로 코드를 밀어 넣습니다.

단계마다 잡아내는 문제가 다릅니다. 소프트웨어 판독기는 아예 잘못된 코드를 걸러 냅니다. 휴대폰에서 얻은 규칙은 컴퓨터에서는 읽히지만 실제 기기에서 실패한 디자인을 걸러 냅니다. 실험 장치는 규칙이 생기기도 전에, 어떤 선택이 코드를 약하게 만드는지 알려 줍니다.

1단계: 디자인마다 판독기 둘

메이커에서 보이는 디자인은 모두 이미 두 번 디코딩된 것입니다. 첫 번째 판독기는 zxing-cpp로, 대부분의 안드로이드 스캔 앱이 이 라이브러리에서 갈라져 나왔습니다. 두 번째는 OpenCV의 검출기인데, 이미지를 구역별로 이진화하기 때문에 실패하는 방식이 다릅니다. 넓은 단색 채움에 약한 쪽이 바로 이것입니다. 두 판독기 모두 컬러 렌더링과 흑백 렌더링, 그리고 작거나 흐린 인쇄물을 대신하도록 한 칸당 3픽셀로 흐리게 만든 사본을 받습니다.

기준 판독기가 깨끗한 렌더링조차 읽지 못하면 그 디자인은 바로 거부되고, 메이커가 이유를 알려 줍니다. 이런 일은 일어나서는 안 되며, 예외 없는 유일한 검사입니다. 나머지 판독기가 흐린 사본에서 낸 결과는 기록되어 보고서에 표시됩니다. 그 결과는 단독으로 막지 않고 아래 규칙의 근거로 쓰입니다. 흐린 이미지에서는 휴대폰과 맞지 않게 들쭉날쭉하기 때문입니다.

2단계: 휴대폰으로 140번 찍어 얻은 규칙

2026년 9월, 디자인들을 시험지로 인쇄해 iPhone 한 대와 모토로라 안드로이드 폰 한 대의 기본 카메라 앱으로, 실내 조명 아래 팔 길이 거리에서, 화면과 종이 양쪽을 모두 찍어 봤습니다. 모두 합쳐 약 140번입니다. 휴대폰이 거부한 디자인도 컴퓨터에서는 전부 디코딩되었습니다. 그래서 규칙은 소프트웨어 판독기가 아니라, 휴대폰의 실패를 예고한 디자인의 특징으로 만들었습니다.

세 가지 패턴이 실패했습니다. 어두운 칸이 데이터 영역의 절반을 넘고 그 대부분이 덩어리로 뭉쳐 있는 디자인이 버전 15 이상일 때로, 무궁화와 하트가 그 사례였습니다. 버전 15의 어둡고 색이 있는 라이브러리 아이콘은 8번 중 6번 실패했지만, 버전 10에서는 5번 모두 통과했습니다. 그리고 그림에 오류 정정 용량의 5분의 1 넘게 쓴 버전 15의 강조색 디자인입니다. 그 밖의 모든 것, 즉 기본 설정의 버전 6부터 15까지의 글자, 로고, 사진은 한 번도 빠짐없이 통과했습니다.

이 패턴 중 하나에 해당하는 디자인은 '취약'으로 표시됩니다. 메이커는 그 상태로 팔지 않습니다. 세부 수준이나 그림 예산을 낮춰 다시 만들고 다시 검사한 뒤, 무엇을 바꿨는지 보여 줍니다. 유일한 예외는 최대 세부 수준인 버전 20입니다. 버전 15에 맞는 크기에서는 실패했지만 더 크게 인쇄하면 읽히므로, 거부하는 대신 더 큰 최소 인쇄 크기를 붙여 허용합니다.

3단계: 실험 장치

스타일이나 설정, 엔진의 변경을 비교할 때 깨끗한 이미지가 디코딩되는지는 별 정보가 못 됩니다. 실험 장치는 렌더링된 코드를 카메라가 하는 일을 흉내 낸 열네 가지 조건에 통과시킵니다. 화면 속에서 작게 보이는 코드(한 칸당 3픽셀과 2.4픽셀), 흐림, 25도와 40도 기울임과 30도 옆 기울임, 고르지 않은 조명, 낮은 대비, 센서 노이즈, JPEG 압축, 화면 재촬영, 종이 위 잉크 번짐, 그리고 기울임·조명·흐림을 합친 조합입니다. 각 이미지는 설치할 수 있는 모든 판독기로 갑니다. zxing-cpp, OpenCV, OpenCV의 WeChat 검출기, zbar, 그리고 오래된 이진화 방식 때문에 가장 까다롭고 옛날 스캔 앱에 가장 가까운 고전 Java ZXing입니다.

스캔 점수는 조건과 판독기의 조합 가운데 올바른 텍스트로 디코딩된 비율이고, 보고서는 가장 약한 조건을 짚어 줍니다. 인쇄 크기 규칙과 스캔 안전 설정은 이렇게 조정되었고, 그림에 영향을 주는 것은 무엇이든 바꾸기 전에 이 검사를 돌립니다.

인쇄 크기는 이렇게 측정했습니다

인쇄한 일반 코드는 팔 길이 거리에서 한 칸당 약 0.4mm까지 디코딩되었습니다. 그림이 들어간 코드는 그 1.5배쯤이 필요했습니다. 버전 15는 한 칸당 0.66mm에서 되고 0.5mm에서 실패했습니다. 버전 20도 0.5mm에서 실패했으므로, 버전 20 이상에는 실패 지점보다 여유를 둔 한 칸당 0.8mm를 표시합니다. 6.5cm, 8.5cm, 10cm 인쇄 시험이 이 추정치를 측정값으로 바꿀 때까지입니다. 디자인마다 아래에 보이는 크기는 여백을 포함한 칸 수에 해당 수치를 곱해 올림한 값입니다. 버전별 전체 표는 인쇄 크기 가이드에 있습니다.

5분이면 내 인쇄물을 직접 검사할 수 있습니다

우리 검사는 나쁜 디자인이 나올 가능성을 낮춥니다. 하지만 당신의 프린터, 종이, 매장 조명은 볼 수 없습니다. 메뉴판이나 명함을 대량으로 찍기 전에 한 번만 이렇게 해 보세요.

  • 의도한 크기로 한 장만 인쇄해서 자로 재 보세요. '페이지에 맞춤'으로 인쇄한 페이지는 설계보다 작게 나오는데, 최소 크기의 코드에는 줄어들 여유가 없습니다.
  • 제조사가 다른 휴대폰 두 대를 기본 카메라 앱으로 쓰세요. 고객의 휴대폰보다 너그러울지 모르는 스캔 앱은 쓰지 마세요.
  • 코드가 놓일 자리의 조명 아래에서 팔 길이 거리로 찍고, 그 1.5배 거리에서 다시 찍고, 휴대폰을 30도쯤 기울여 한 번 더 찍으세요.
  • 화면 검사를 인쇄 검사로 여기지 마세요. 화면은 뒤에서 빛나고 종이보다 선명합니다. 모니터에서 읽혔다는 것은 디자인이 유효하다는 뜻일 뿐입니다.
  • 표면이 반짝이거나 코팅되어 있으면 천장 조명 아래에서 찍어 보세요. 세 개의 큰 모서리 사각형 중 하나에 반사광이 걸리면 스캔이 멈춥니다.
  • 한 번이라도 실패하면 먼저 더 크게 인쇄하고, 다음으로 균형 스캔 안전 설정이나 더 낮은 세부 수준을 고르고, 마지막으로 그림을 단순하게 하세요. 거의 언제나 앞의 둘 중 하나로 해결됩니다.

우리가 주장하지 않는 것

휴대폰 두 대와 판독기 다섯 개가 모든 휴대폰과 모든 앱은 아닙니다. 고전 ZXing 이진화 위에 만들어진 오래된 스캔 앱은 요즘 카메라 앱보다 덜 읽어 내며, 그 부분은 기기가 아니라 실험실에서 검사합니다. 프린터와 잉크와 종이는 어떤 모델도 완전히 예측하지 못하는 방식으로 대비를 바꿉니다. 위의 검사는 실패한다고 알려진 디자인을 걸러 내는 필터이고, 증명은 인쇄 시험이며, 그것은 당신 몫입니다.

현재의 한계 하나를 숨기지 않고 말씀드립니다. 로고의 형태를 그대로 두고 코드의 무늬를 그 바깥에 두는 옵션은, '그림 우선' 설정에서 소프트웨어 판독기와 실험 장치를 통과했지만, 인쇄한 시험지를 휴대폰으로 찍는 시험은 아직 진행 중입니다. 끝날 때까지는 그런 마크를 크게 인쇄하고 대량 인쇄 전에 5분 검사를 하시거나, 약간의 공간을 내주는 대신 오류 정정을 더하는 균형 스캔 안전 설정을 고르세요.

자주 묻는 질문

화면에서는 읽히는데 종이에서는 안 읽힙니다. 왜죠?

종이는 화면보다 어둡고 흐리고 작습니다. 흔한 원인은 순서대로, 인쇄물이 최소 크기보다 작게 나온 경우('페이지에 맞춤'이 흔한 원인입니다), 반짝이는 표면이 조명을 카메라로 반사하는 경우, 그리고 디자인이 휴대폰 허용 한계에 가까운 경우입니다. 마지막은 더 크게 인쇄하거나 균형 설정으로 해결됩니다.

어떤 휴대폰과 앱으로 시험했나요?

인쇄한 시험지는 iPhone 한 대와 모토로라 안드로이드 폰 한 대의 기본 카메라 앱으로 찍었습니다. 2026년 9월에 약 140번, 10월에 버전 20을 추가로 시험했습니다. 실험 장치에는 소프트웨어 판독기 다섯 개가 더 있는데, 그중 고전 Java ZXing이 오래된 스캔 앱을 대신합니다.

컬러 코드도 흑백만큼 잘 읽히나요?

휴대폰은 색이 아니라 어둡고 밝음을 읽습니다. PaintQR은 어두운 칸은 모두 밝기 기준 아래에, 밝은 칸은 모두 그 위에 두므로 색은 사람을 위한 것이고 대비는 카메라를 위한 것입니다. 휴대폰에서 실패한 유일한 컬러 패턴, 즉 그림 예산이 큰 버전 15의 강한 강조색은 이제 규칙이 잡아냅니다.

그림이 오류 정정을 얼마나 쓰나요?

표준 코드는 가장 낮은 수준에서 칸의 약 7%를, 중간 수준에서 약 15%를 복구할 수 있습니다. 스캔 안전 설정은 그 복구 예산 중 그림이 쓸 수 있는 몫을 정합니다. '안전'은 약 10분의 1, '균형'은 5분의 1, '그림 우선'은 약 3분의 1입니다. 나머지는 구김과 반사와 흔들리는 손을 위해 남겨 둡니다.

코드를 만들고 스캔 보고서를 확인하기