QR 코드가 어떤 폰에서는 안 읽히는 이유
QR 코드는 링크를 찍은 그림이 아니다. 모서리 표식, 타이밍 선, 설정값 사본, 그리고 남은 자리에 흩뿌려진 데이터로 이루어진 고정된 골격을 가진 흑백 격자다. 스캐너는 단 1비트를 읽기 전에 먼저 그 골격을 찾아야 한다. 어떤 곳에서는 되고 어떤 곳에서는 안 되는 코드는 거의 언제나 골격의 일부를, 혹은 골격이 필요로 하는 조건을 잃은 상태다.
스캐너가 가장 먼저 찾는 것
네 모서리 중 세 곳에 큰 사각형이 있다. 어느 각도에서도 찾히도록 만들어진 표식이라, 그 사각형을 가로지르는 선을 어떻게 긋든 어둠과 밝음의 비율이 같게 나온다. 덕분에 카메라는 아무것도 해독하기 전에 코드의 위치와 방향부터 잡는다. 다른 자리의 작은 정렬 사각형들은 병의 곡면이나 비스듬히 찍힌 사진을 보정하는 데 쓰인다.
그래서 손상은 자리마다 무게가 다르다. 데이터 영역을 가로지르는 긁힘은 대개 복구되지만, 모서리 사각형 위에 붙인 로고나 한쪽 모서리가 잘려 나간 코드는 손상된 코드가 아니다. 카메라 입장에서는 애초에 코드가 아니다.
여백도 코드의 일부다
규격은 사방에 모듈 네 칸만큼, 즉 사각형 네 개 너비의 빈 공간을 조용한 영역으로 두라고 요구한다. 장식이 아니다. 스캐너는 그 여백으로 격자가 어디서 끝나는지를 판단하며, 테두리나 사진이나 글줄에 딱 붙은 코드에는 찾을 만한 경계가 없다.
인쇄물에서 압도적으로 흔한 실패가 이것이다. 디자이너는 자연스럽게 검은 픽셀에 맞춰 잘라내기 때문이다. 흰 종이에 붙였을 때는 되던 코드가 레이아웃 안에서 안 된다면 가장 먼저 볼 곳이다.
오류 정정은 예산이고, 로고는 그 예산을 쓴다
오류 정정 수준은 네 단계이고, 코드가 더럽혀지거나 가려졌을 때 대략 7, 15, 25, 30퍼센트를 복구한다. 코드 한가운데에 로고를 얹을 수 있는 것도 이 여유 덕분이다. 가려진 모듈은 손상으로 취급되어 복원된다.
함정은 그 여유가 결국 추가 모듈로 만들어진다는 점이다. 같은 물리적 크기에서 수준을 올리면 사각형 하나하나가 작아진다. 작게 인쇄하고, 정정 수준을 최고로 올리고, 거기에 로고까지 덮으면 같은 예산을 세 번 쓴 셈이다. 로고를 넣고 싶다면 작게 넣고, 코드는 크게 두고, 짐작 대신 완성된 이미지를 해독해 보라.
대비, 반전, 그리고 번들거리는 표면
카메라는 이미지를 밝고 어두움으로 갈라내기 때문에 중요한 것은 색상 차이가 아니라 밝기 차이다. 눈에는 잘 대비되어 보이는 두 색, 이를테면 중간 톤의 파랑과 중간 톤의 초록은 회색으로 바꾸면 거의 같은 값이 되어 읽히지 않는다.
코드는 밝은 바탕에 어두운 모듈이 원칙이다. 어두운 바탕에 흰 모듈인 반전 코드는 어떤 스캐너는 읽고 어떤 스캐너는 거부하는데, 이것이 바로 내 폰에서는 되고 네 폰에서는 안 되는 현상의 전형이다. 유광 인쇄나 포일, 밝은 조명 아래의 화면은 반사로 격자의 일부를 날려버리고, 유리 뒤의 코드는 특정 각도에서만 실패하곤 한다.
크기와 거리, 그리고 인쇄가 감당할 수 있는 한계
기획 단계에서 쓸 만한 규칙은 코드의 한 변을 읽을 거리의 10분의 1쯤으로 잡는 것이다. 2미터 떨어져서 찍을 코드라면 한 변이 20센티미터쯤은 되어야 한다. 명함에 넣을 크기로 만든 포스터 코드는 아무도 못 찍는 포스터가 된다.
인쇄는 아래쪽 한계도 정한다. 잉크는 종이에서 약간 번지므로, 모듈 하나가 0.3밀리미터 언저리로 작아지면 이웃한 검은 사각형들이 서로 붙기 시작하고, 카메라가 아무리 좋아도 격자는 더 이상 격자가 아니다. 자수나 각인처럼 최소 표현 크기가 있는 모든 방식에 같은 이야기가 적용된다.
무엇을 넣느냐가 밀도를 정한다
데이터 양이 버전을 정하고, 버전이 한 변의 모듈 수를 정한다. 가장 작은 것이 21칸, 가장 큰 것이 177칸이다. 추적 파라미터가 붙은 긴 링크는 짧은 링크보다 코드를 몇 버전이나 더 촘촘하게 만들고, 그만큼 더 크게 인쇄해야 읽힌다.
인코딩도 영향을 준다. 숫자가 가장 빽빽하게 담기고, 대문자와 몇몇 기호는 전용 압축 모드를 쓰며, 그 외의 문자는 전부 바이트로 떨어진다. 그래서 같은 링크라도 대문자로 적으면 눈에 띄게 단순한 코드로 들어간다. 인쇄물의 주소가 종종 전부 대문자인 이유가 이것이다.
실제로 내보낼 물건을 시험하라
생성한 파일이 아니라 최종 이미지를 해독해 보라. 문제는 대개 그 뒤에 생긴다. 잘라내기, 색 바꾸기, 가장자리를 뭉개는 크기 조정, 압축 한 번이 원인이다. 코드를 되읽어 보면 아직 해독되는지와 생각한 곳을 가리키는지를 한꺼번에 확인할 수 있다.
그다음에는 쓰일 방식 그대로 시험하라. 최종 크기로 인쇄해서, 내 것이 아닌 폰으로, 실제 장소의 거리와 조명에서. 그리고 코드가 단축 링크를 가리킨다면, 종이가 그 단축 서비스보다 오래 산다는 점을 기억하라. 고칠 수 없는 코드는 그 주소를 계속 살려두겠다는 약속이다.