QR 오류 정정 레벨 L·M·Q·H, 무엇이 다를까

QR 코드를 만들다가 "오류 정정 레벨"에서 L·M·Q·H 중 무엇을 골라야 할지 몰라 그냥 기본값으로 넘긴 분을 위한 글입니다. 결론부터 말하면 이 네 글자는 코드가 얼마나 망가져도 원래 내용을 되살릴 수 있는지를 정한 등급이고, 순서대로 약 7%·15%·25%·30%입니다.
그리고 이 등급을 올리면 복원용 데이터가 코드 안에 함께 늘어납니다. 같은 주소를 담아도 칸이 늘어나 패턴이 촘촘해지는 이유가 여기에 있습니다.
요약 ① L·M·Q·H는 각각 약 7%·15%·25%·30%의 코드워드가 손상돼도 내용이 복원되는 등급입니다. ② 복원용 데이터가 코드 안에 같이 들어가므로, 레벨을 올리면 같은 내용이라도 버전이 올라가 한 변의 칸 수가 늘어납니다. ③ 세 모서리의 큰 사각형이 가려지면 레벨과 상관없이 인식 자체가 실패합니다.
레벨을 고르라는데, 무엇을 고르는 건가
QR 생성기마다 "오류 정정 레벨", "오류 복원 수준", "Error correction" 같은 이름으로 같은 선택지가 나옵니다. 대개 L·M·Q·H 네 가지이고 옆에 7%·15%·25%·30%가 붙어 있습니다.
여기서 오해가 생깁니다. 이 퍼센트는 "인식 성공률"이 아닙니다. 코드의 몇 퍼센트가 망가져도 원래 내용이 그대로 나오는가를 뜻하는 값입니다.
또 하나. 이 값은 공짜가 아닙니다. 같은 내용을 담아도 레벨이 높으면 코드가 커지고, 같은 크기로 인쇄하면 칸 하나하나가 작아집니다.
L·M·Q·H가 정확히 뜻하는 것
QR 코드는 내용을 그대로 그리지 않습니다. 먼저 내용을 8비트씩 묶어 코드워드라는 단위로 쪼갠 다음, 리드-솔로몬 방식으로 계산한 오류 정정 코드워드를 뒤에 덧붙여 함께 그립니다.
레벨은 이 두 종류의 비율을 정합니다. 정정용을 많이 넣을수록 더 많이 망가져도 복원되지만, 그만큼 내용을 담을 자리가 줄어듭니다.
가장 작은 버전 1(21×21칸)은 전체 26개 코드워드로 이루어집니다. 레벨별 배분은 이렇습니다.
| 레벨 | 내용용 코드워드 | 정정용 코드워드 | 담을 수 있는 글자 수(바이트 모드) |
|---|---|---|---|
| 낮음 L | 19 | 7 | 17자 |
| 보통 M | 16 | 10 | 14자 |
| 높음 Q | 13 | 13 | 11자 |
| 최고 H | 9 | 17 | 7자 |
같은 21×21 크기인데도 담을 수 있는 글자가 17자에서 7자로 줄어듭니다. 레벨을 올린 대가가 여기서 바로 보입니다.
일부가 가려져도 읽히는 이유
정정용 코드워드는 내용의 사본이 아니라 계산으로 만든 검산 값입니다. 그래서 일부 코드워드가 사라지거나 뒤집혀도, 남은 값들로 원래 내용을 역산해 낼 수 있습니다.
여기서 실무에 바로 쓰이는 사실이 하나 있습니다. 손상은 칸 단위가 아니라 코드워드 단위로 셉니다. 코드워드 하나는 코드 위에 8칸으로 그려지는데, 그 8칸 중 하나만 어긋나도 그 코드워드 전체가 손상으로 계산됩니다.
그래서 같은 넓이가 망가지더라도 한 곳에 뭉쳐 있는 얼룩보다 여기저기 흩어진 점들이 더 불리합니다. 흩어진 점은 그만큼 많은 코드워드를 각각 망가뜨리기 때문입니다.
한 가지 예외가 있습니다. 세 모서리의 큰 사각형(파인더 패턴)과 그 주변의 위치·형식 정보는 스캐너가 코드를 찾아내는 데 쓰입니다. 이 부분이 가려지면 정정 레벨이 아무리 높아도 애초에 인식이 시작되지 않습니다.
도구 없이 직접 확인하는 방법
레벨은 눈으로 구분되지 않습니다. 코드 안 형식 정보 영역에 기록되어 있고, 스캐너가 그 값을 먼저 읽습니다. 다만 레벨이 만든 결과는 손으로 셀 수 있습니다.
1단계 — 한 변의 칸 수를 센다. QR 코드는 버전 1(21×21)부터 버전 40(177×177)까지 있고, 버전이 하나 오를 때마다 한 변이 4칸씩 늘어납니다. 식으로 쓰면 한 변 = 4 × 버전 + 17 입니다.
뒤집으면 버전 = (한 변의 칸 수 − 17) ÷ 4 가 됩니다. 인쇄된 코드를 확대해 한 변의 칸을 세면 21칸은 버전 1, 25칸은 버전 2, 29칸은 버전 3입니다.
2단계 — 용량표와 대조한다. 위 표처럼 같은 버전이라도 레벨에 따라 담기는 글자 수가 달라집니다. 내용은 그대로인데 버전만 올라갔다면, 늘어난 자리는 전부 정정용으로 갔다는 뜻입니다.
3단계 — 같은 내용으로 레벨만 바꿔 비교한다. 레벨의 효과를 확인하는 가장 확실한 방법입니다. 문제는 레벨을 바꿀 때마다 코드를 다시 만들고, 한 변의 칸을 눈으로 세어 비교해야 한다는 점입니다.
저희 도구로 확인하기. 내용을 한 번 입력해 두고 '오류 복원 수준' 선택만 낮음·보통·높음·최고로 바꾸면, 같은 자리에서 패턴이 다시 그려집니다.
설치·회원가입 없이 브라우저 안에서 바로 만들어지며, 입력한 내용은 서버로 전송되지 않습니다.

레벨을 올리면 왜 조밀해지나
내용 길이가 같아도 정정용 코드워드가 늘어나면 자리가 모자랍니다. 그러면 QR 코드는 한 단계 큰 버전으로 넘어가고, 한 변이 4칸씩 늘어납니다.
52자짜리 주소 하나를 넣고 레벨만 바꿔 보면 이렇게 갈립니다.
| 오류 복원 수준 | 버전 | 한 변 | 전체 칸 수 |
|---|---|---|---|
| 낮음 L | 3 | 29칸 | 841칸 |
| 보통 M | 4 | 33칸 | 1,089칸 |
| 높음 Q | 5 | 37칸 | 1,369칸 |
| 최고 H | 6 | 41칸 | 1,681칸 |
L과 H의 차이가 한 변 12칸, 전체로는 두 배입니다. 여기서 중요한 건 인쇄 크기를 고정하면 칸 하나의 크기가 그만큼 작아진다는 점입니다.
코드 자체를 3cm 정사각형에 맞춘다면(여백 제외) L은 칸 하나가 약 1.03mm, H는 약 0.73mm가 됩니다. 카메라 해상도나 인쇄 품질이 따라오지 못하면, 손상에 강하라고 올린 레벨이 오히려 인식 실패로 이어집니다.
자주 막히는 지점
| 상황 | 어떻게 되나 |
|---|---|
| 세 모서리 큰 사각형을 가림 | 레벨과 무관하게 실패 — 스캐너가 코드 위치를 못 찾습니다 |
| 가운데에 로고를 얹음 | 데이터 영역이라 복원 대상이지만, 가린 비율이 레벨 한도를 넘으면 실패합니다 |
| 얼룩이 여러 곳에 흩어짐 | 뭉쳐 있을 때보다 손상 코드워드 수가 빨리 늘어납니다 |
| 여백을 0칸으로 둠 | 표준이 요구하는 4칸 여백이 없어 주변 그림을 코드로 오인할 수 있습니다 |
| 전경·배경을 반전 | 표준은 밝은 배경에 어두운 칸을 전제로 해, 못 읽는 스캐너가 있습니다 |
| 전경·배경 명암 차이가 작음 | 칸 구분이 안 돼 레벨과 무관하게 실패합니다 |
여백은 특히 자주 빠뜨립니다. 표준이 요구하는 값은 사방 4칸이며, 이 도구의 '여백' 항목은 기본값이 2칸이고 0~8칸 사이로 조절할 수 있습니다. 인쇄물에 넣을 때는 4칸 이상으로 올려 두는 편이 안전합니다.
로고를 얹을 때도 순서를 뒤집지 않는 게 좋습니다. 레벨을 H로 올려 두고 로고 크기를 키우는 게 아니라, 로고를 얹은 실제 결과물을 여러 기기로 스캔해 확인하는 것이 유일하게 확실한 검증입니다.
정리
- L·M·Q·H는 각각 약 7%·15%·25%·30%의 코드워드가 손상돼도 내용이 복원되는 등급입니다.
- 이 퍼센트는 인식 성공률이 아니라 복원 가능한 손상 비율입니다.
- 정정용 코드워드가 코드 안에 함께 들어가므로, 레벨을 올리면 내용을 담을 자리가 줄고 버전이 올라갑니다.
- 52자 주소 기준으로 L은 29칸, H는 41칸이 됩니다. 인쇄 크기가 같으면 칸 하나가 그만큼 작아집니다.
- 손상은 칸이 아니라 8칸 묶음인 코드워드 단위로 세므로, 흩어진 점이 뭉친 얼룩보다 불리합니다.
- 세 모서리의 큰 사각형과 사방 4칸 여백은 레벨로 보완되지 않습니다.
설치·회원가입 없이 브라우저 안에서 바로 만들어지며, 입력한 내용은 서버로 전송되지 않습니다.
자주 묻는 질문
로고를 QR 가운데에 넣어도 되나요?
가운데는 데이터 영역이라 오류 정정으로 복원되는 자리입니다. 다만 레벨 H의 30%는 코드워드 기준 상한이고, 로고가 덮은 칸들은 그 한도를 그대로 깎아 먹습니다. 세 모서리의 큰 사각형만 피하면 되는 것이 아니라, 만든 뒤 실제로 인쇄해 여러 기기로 스캔해 보는 확인이 필요합니다.
그냥 항상 최고 레벨로 만들면 되지 않나요?
같은 내용이라도 버전이 올라가 칸이 늘어납니다. 인쇄 크기를 고정하면 칸 하나가 작아져, 오히려 저해상도 카메라나 작은 라벨에서 인식이 어려워질 수 있습니다. QR 코드를 만든 DENSO WAVE의 안내에서도 일반적으로는 보통 수준인 M이 가장 많이 선택된다고 설명하며, 이 도구의 기본값도 M입니다. 공장·현장처럼 오염이 예상되는 환경에서 Q나 H를 권합니다.
QR 코드만 보고 오류 정정 레벨을 알 수 있나요?
눈으로는 구분되지 않습니다. 레벨은 코드 안 형식 정보 영역에 기록되어 있고 스캐너가 그 값을 읽습니다. 대신 한 변의 칸 수를 세면 버전은 알 수 있습니다. (한 변의 칸 수 − 17) ÷ 4 가 버전이고, 같은 내용으로 레벨만 바꿔 두 장을 비교하면 차이를 직접 볼 수 있습니다.
입력한 내용이 서버로 전송되나요?
아니요. 이 도구의 QR 생성은 전부 브라우저 안에서 처리되며, 입력한 주소나 텍스트는 서버로 전송되거나 저장되지 않습니다. 'PNG 다운로드' 버튼도 브라우저가 이미 만들어 둔 이미지를 그대로 저장합니다.
