식당 테이블에 붙은 QR코드를 찍다가 이런 생각이 들 때가 있어요. 스티커 한쪽이 뜯겼는데도 왜 메뉴가 잘 열리지? 작은 검은 칸마다 정보가 들어 있다면, 몇 칸만 사라져도 못 읽어야 할 것 같은데 말이에요.
중앙에 로고를 넣은 QR코드도 있죠. 원래는 네모로 꽉 차 있어야 할 것 같은 자리를 그림이 차지했는데, 휴대폰은 곧바로 주소를 찾아내요.
그렇다고 휴대폰이 없어진 칸을 눈치로 찍어 맞히는 건 아니에요. QR코드는 처음부터 일부 정보가 손상됐을 때 복원할 수 있도록, 여분의 정보를 함께 담아둬요. 이 준비가 있어서 작은 얼룩이나 긁힘을 견딜 수 있는 거죠.
주소만 담는 게 아니라 힌트도 챙겨둬요
QR코드 안에는 실제로 전달할 내용과 오류복원용 정보가 함께 들어 있어요. 휴대폰이 스캔했을 때 일부 내용이 틀리거나 빠졌다면, 남아 있는 정보와 복원용 정보를 이용해 원래 내용을 계산할 수 있어요.
친구에게 중요한 번호를 보낼 때 확인할 수 있는 단서를 같이 적어두는 상황을 떠올려보세요. 종이가 조금 찢어져도 남은 단서로 빠진 부분을 알아낼 수 있다면 도움이 되겠죠.
물론 QR코드가 문장을 반복해서 적어둔다는 뜻은 아니에요. 실제로는 ‘리드-솔로몬 부호’라는 수학적 오류정정 방식을 사용해요. 이름은 낯설어도, 원본을 되살릴 단서를 미리 넣어둔다는 생각은 어렵지 않죠.
QR코드를 개발한 DENSO WAVE의 공식 설명에서도 이 오류복원 기능을 소개해요. 출력물에 먼지나 얼룩이 생길 수 있는 환경에서도 사용할 수 있도록 한 기능이에요.
복원 능력도 네 가지로 나뉘어요
QR코드의 오류복원 레벨은 L, M, Q, H로 나뉘어요. 공식 안내에서는 전체 코드워드 기준으로 각각 약 7%, 15%, 25%, 30%의 복원 수준을 설명해요.
‘코드워드’는 데이터를 묶는 단위예요. QR코드에서는 하나가 8비트로 구성돼요. 이 숫자를 전부 외울 필요는 없지만, 무엇을 기준으로 한 비율인지는 알아두면 덜 헷갈려요.
가장 높은 H를 쓰면 복원용 정보를 더 많이 넣어요. 그래서 일부 데이터가 손상돼도 복원할 여유가 커지죠. 다만 어떤 부분이 어떤 방식으로 손상됐는지에 따라서 실제로 읽을 수 있는지는 달라져요.
30%를 가려도 무조건 된다는 뜻은 아니에요
여기서 가장 많이 생기는 오해가 있어요. ‘30% 복원’이라는 말을 보고 QR코드 그림의 30%를 아무 데나 가려도 괜찮다고 생각하는 거예요.
하지만 복원 비율은 그림의 면적에 대고 자로 잰 값이 아니에요. 복원이 적용되는 데이터 단위와 손상 위치를 함께 봐야 해요. 작은 얼룩이 생긴 것과 중요한 인식 패턴을 크게 덮은 것은 다르죠.
카메라가 초점을 못 맞추거나 조명이 반사돼 전체가 흐릿하게 보이면, 복원할 데이터를 얻는 단계부터 어려워질 수도 있어요. QR코드가 일부 손상을 견딘다는 것과 어떤 사진에서도 반드시 읽힌다는 건 별개예요.
그래서 테이블의 스티커가 잘 읽힌다고 다른 QR코드도 마음대로 가려보면 안 돼요. 겉으로 비슷한 손상이어도 결과는 달라질 수 있거든요.
큰 네모 세 개는 길을 찾아주는 표지예요
일반적인 QR코드를 보면 모서리에 큰 네모가 세 개 있어요. 작은 데이터 칸과는 조금 다른 역할을 해요. 카메라가 QR코드의 위치와 방향을 알아내도록 돕는 표시죠.
지도에서 위치 표시가 사라지면 어디부터 봐야 할지 헷갈리듯, 이 패턴이 심하게 가려지면 휴대폰이 코드 자체를 찾기 어려워질 수 있어요. 손상된 양뿐 아니라 ‘어디가 손상됐는지’도 중요한 이유예요.
QR코드 주변의 흰 여백도 그냥 남은 공간이 아니에요. 코드와 배경의 경계를 구분하도록 돕죠. 여백을 꽉 잘라내거나 바로 옆에 글자와 무늬를 붙이면 읽기가 어려워질 수 있어요.
작은 네모들만 중요한 게 아니라, 그 네모들을 제대로 찾게 해주는 구조까지 함께 필요한 거예요. QR코드의 규격에 관한 내용은 DENSO WAVE의 표준화 안내에서도 확인할 수 있어요.
그럼 무조건 복원 레벨을 높이면 좋을까요?
복원용 정보를 더 넣으면 그만큼 공간도 필요해요. 같은 내용을 담더라도 코드가 더 촘촘해지거나, 충분한 인식 품질을 위해 더 크게 출력해야 할 수 있어요.
깨끗한 화면에 띄우는 코드와 먼지나 긁힘이 많은 곳에 붙이는 코드는 필요한 조건이 다르겠죠. 복원 레벨만 높이기보다 내용의 양과 출력 크기, 사용할 환경을 함께 생각하는 게 좋아요.
중앙에 로고를 넣는 디자인도 비슷해요. 높은 복원 레벨이 어느 정도 여유를 줄 수는 있지만, 로고 크기와 위치를 마음대로 정해도 된다는 뜻은 아니에요. 실제 출력물에서 제대로 읽히는지 확인해야 하죠.
내가 만든 QR코드가 잘 안 읽힌다면 먼저 전체 코드와 주변 여백이 화면에 들어오는지, 초점과 조명이 괜찮은지 살펴보세요. 단순한 조건 때문에 인식이 막히는 경우도 있으니까요.
다음에 살짝 찢어진 QR코드를 휴대폰이 읽어내면, 그냥 운이 좋았다고만 생각하지 않아도 돼요. 작은 네모들 속에 담아둔 복원 정보가 제 몫을 한 것일 수 있어요.
QR코드의 작은 네모들에는 내용뿐 아니라, 내용이 조금 사라졌을 때 되살릴 힌트도 들어 있어요.






