MostlyQR

QR 코드는 얼마나 작게 인쇄할 수 있을까? 계산했어요

QR 코드의 최소 크기는 하나로 정해져 있지 않아요. 실제 페이로드 다섯 개를 자체 인코더에 넣어 모듈 수를 구한 뒤 밀리미터로 환산했어요.

Max Čelar··인쇄 & 스캔

이 글의 새로운 점: 다섯 가지 실제 페이로드 유형에 대해 네 가지 오류 정정 수준 모두의 기호 버전과 모듈 수를 MostlyQR이 제공하는 인코더로 계산한 뒤, 인쇄 밀리미터로 환산했어요. 최소 크기를 하나의 일괄 수치로 제시하지 않고 여러분의 페이로드에서 도출해요.

QR 코드 인쇄 가이드는 대부분 숫자 하나만 알려 줘요. 2cm, 1인치, 포장용 3cm 같은 식이죠. 그런 숫자는 표준처럼 보이지만 실은 추측이고, 양방향으로 틀려요. 명함에 넣는 짧은 링크에는 너무 크고, 병 라벨에 넣는 vCard에는 위험할 만큼 너무 작아요.

실제 답은 나눗셈이고, 인쇄하기 전에 직접 계산할 수 있어요.

# 최소 크기가 하나로 정해지지 않는 이유

QR 코드는 점점 작아지는 그림이 아니에요. 한 변에 모듈(작은 정사각형)이 늘어선 격자이고, 모듈 개수는 여러분이 정하는 것이 아니라 담는 데이터(페이로드)에 따라 정해져요. 21자짜리 짧은 링크는 25×25 격자가 필요하고, 이름, 전화번호, 이메일이 들어간 vCard는 49×49가 필요해요. 두 가지를 모두 25mm로 인쇄하면 전혀 다른 결과물이 나와요. 첫 번째는 모듈 하나의 너비가 0.76mm이고, 두 번째는 0.44mm예요.

모듈은 프린터가 유지해야 하고 카메라가 구분해야 하는 단위예요. 그래서 "QR 코드를 얼마나 작게 만들 수 있나요?"라는 질문은 사실 "모듈 하나를 얼마나 작게 만들 수 있고, 모듈이 몇 개 있나요?"라는 질문이에요. 뒤쪽 질문은 계산할 수 있어요.

# 페이로드가 모듈로 얼마나 드는지

저희는 MostlyQR이 실제로 쓰는 인코더, 즉 MIT 라이선스 node-qrcode 라이브러리를 감싼 packages/qr의 buildMatrix로 페이로드 다섯 가지를 네 가지 오류 정정 수준 모두에서 돌려 봤어요. 슬래시 뒤의 숫자가 격자 크기예요. 한 변의 모듈 개수이고, 여백 영역(quiet zone)은 포함하지 않아요.

페이로드 문자 수 오류 정정 L 오류 정정 M 오류 정정 Q 오류 정정 H
짧은 링크 21 v2 / 25 v2 / 25 v2 / 25 v3 / 29
Wi-Fi 연결(WPA) 47 v3 / 29 v4 / 33 v4 / 33 v6 / 41
UTM 태그가 붙은 캠페인 URL 87 v5 / 37 v6 / 41 v7 / 45 v9 / 53
긴 제품 URL 116 v6 / 41 v7 / 45 v9 / 53 v10 / 57
vCard(이름, 조직, 전화번호, 이메일, URL) 135 v6 / 41 v8 / 49 v9 / 53 v11 / 61

아래는 정확히 이 문자열들이에요. 그래서 모든 행을 직접 재현할 수 있어요:

text
https://mqr.sh/AB12CD
WIFI:T:WPA;S:CafeGuest;P:coffee-and-cake-2026;;
https://example.com/spring-menu?utm_source=poster&utm_medium=qr&utm_campaign=spring2026
https://example.com/collections/spring-2026/products/heirloom-tomato-seed-pack-organic?variant=4471029&ref=packaging
BEGIN:VCARD ⏎ VERSION:3.0 ⏎ N:Novak;Ana ⏎ FN:Ana Novak ⏎ ORG:MostlyQR ⏎
TEL:+4420790000 ⏎ EMAIL:anna@example.org ⏎ URL:https://mostlyqr.com ⏎ END:VCARD

핵심은 편차에 있어요. 일상적인 페이로드 전반에서 격자는 한 변당 25에서 61모듈까지 펼쳐져요. 종이 크기를 고르기도 전에 선형 밀도가 2.4배 차이 나는 셈이에요.

# 이 표를 확인하신다면 문자열로 확인하세요

글자 수만으로는 이 숫자들이 재현되지 않아요. 저희가 틀렸다고 결론 내리기 전에 그 이유를 알아 두면 좋아요.

QR 인코더는 모든 글자를 같은 바이트로 취급하지 않아요. 연속된 글자 묶음마다 인코딩 모드를 고르는데, 숫자(글자당 3⅓비트), 영숫자(글자당 5½비트, 다만 숫자, 대문자 영문자, 몇 가지 기호에만 해당), 바이트(글자당 8비트) 중에서 골라요. 좋은 인코더는 한 페이로드를 여러 세그먼트로 나눠 전체 비용을 가장 낮게 만들어요. 저희 인코더도 그렇게 해요. 실제로 선택한 결과는 다음과 같아요:

페이로드 세그먼트
짧은 링크 Byte:14 + Alphanumeric:7
Wi-Fi 연결 Alphanumeric:10 + Byte:37
캠페인 URL Byte:83 + Numeric:4
긴 제품 URL Byte:95 + Numeric:7 + Byte:14
vCard Alphanumeric:11 + Byte:1 + Alphanumeric:11 + Byte:44 + Numeric:10 + Byte:49 + Alphanumeric:9

같은 글자 수를 바이트 세그먼트 하나로 인코딩하면 결과가 달라지고 더 큰 표가 나와요. 짧은 링크는 레벨 Q에서 v2/25 대신 v3/29가 되고, vCard는 레벨 L에서 v6/41 대신 v7/45가 돼요. 두 표 모두 맞아요. 서로 다른 페이로드를 설명하고 있을 뿐이에요.

짧은 링크에 대문자 슬러그를 쓴다면 이것이 무료로 쓸 수 있는 조절 장치가 돼요. https://mqr.sh/AB12CD는 스킴과 호스트가 소문자라서 바이트 세그먼트와 영숫자 세그먼트로 나뉘어요. URL 전체를 대문자로 쓰면 — HTTPS://MQR.SH/AB12CD — 영숫자 세그먼트 하나, 21자가 돼요. 레벨 L에서는 v1, 21모듈이 되어 소문자가 섞인 형태보다 버전 하나만큼 작아요. (레벨 M과 Q에서는 이 문자열이 여전히 v2/25인데, 이미 영숫자 꼬리 덕을 보고 있어서 그래요. 이득은 L에서 나타나고, 대문자 구간이 길수록 커져요.) 스킴과 호스트는 대소문자를 구분하지 않아서 URL은 똑같이 연결돼요. 하지만 경로는 구분해요. 그래서 슬러그가 실제로 대문자일 때만 이 방법이 통해요. 저희 슬러그는 모두 대문자예요.

# 같은 25mm, 서로 다른 QR 코드 다섯 개

이번에는 인쇄 폭을 고정하고 각 페이로드가 무엇을 남기는지 살펴볼게요. 계산식은 (폭 ÷ (모듈 수 + 8))이고, 8은 각 면에 필수인 4모듈 여백이에요.

페이로드 25mm일 때 오류 정정 M 모듈 크기 25mm일 때 오류 정정 H 모듈 크기
짧은 링크 0.76mm 0.68mm
Wi-Fi 연결 0.61mm 0.51mm
UTM 태그가 붙은 캠페인 URL 0.51mm 0.41mm
긴 제품 URL 0.47mm 0.38mm
vCard 0.44mm 0.36mm

페이지 위의 정사각형은 같아요. 하지만 표의 한쪽 끝과 다른 쪽 끝은 특징 크기가 두 배나 차이 나요. 0.5mm를 깔끔하게 찍을 수 있는 인쇄소라면, 같은 레이아웃으로 짧은 링크 코드는 완벽하게, vCard 코드는 겨우 읽히는 수준으로 찍어 낼 거예요.

# 반대 방향에서 본 최소 폭

대부분은 반대 질문으로 와요. "25mm면 어떻게 되나요"가 아니라 "얼마나 작게 만들 수 있나요"라는 질문이죠. 인쇄 공정이 실제로 유지할 수 있는 모듈 크기를 고르세요. 코팅지에 하는 오프셋 인쇄나 괜찮은 디지털 인쇄에서 흔히 쓰는 하한선은 0.5mm예요. 그러면 폭은 자동으로 정해져요:

페이로드 오류 정정 M 오류 정정 H
짧은 링크 16.5mm 18.5mm
Wi-Fi 연결 20.5mm 24.5mm
UTM 태그가 붙은 캠페인 URL 24.5mm 30.5mm
긴 제품 URL 26.5mm 32.5mm
vCard 28.5mm 34.5mm

인터넷은 이 범위를 "약 2cm"로 압축해 버린 셈이에요. 범위의 양 끝에서 2cm는 필요한 것보다 20% 크거나, 실제로 가능한 것보다 40% 작아요.

프린터가 0.33mm를 유지할 수 있다면(정교한 스크린 인쇄, 좋은 디지털 인쇄, 흡수성이 없는 용지) 위 값을 1.5로 나누세요. 골판지, 원단처럼 잉크가 번지는 소재에 인쇄한다면 반대로 1mm로 가정하세요.

# 가장 큰 조절 장치는 프린터가 아니라 URL이에요

첫 번째 표를 다시 보세요. 짧은 링크와 긴 제품 URL은 같은 정보예요. 둘 다 같은 페이지로 데려가는데, 하나는 25모듈이고 다른 하나는 45모듈이에요.

이게 핵심이에요. 인쇄소와 씨름해서 모듈 크기를 1mm 얻을 때마다, 인코딩하는 내용을 줄이면 같은 효과를 공짜로 얻을 수 있어요. 동적 짧은 링크는 목적지가 얼마나 길든 21자예요. 그리고 인쇄 작업에서 더 중요한 두 번째 장점이 있어요. 잉크가 마른 뒤에도 가리키는 곳을 바꿀 수 있어서, 인쇄물보다 오래 남는 코드가 막다른 길이 되지 않아요.

명함, 라벨, 메뉴 귀퉁이처럼 작게 인쇄될 것에는 짧은 링크를 인코딩하고 리디렉션하세요. UTM 태그가 붙은 전체 캠페인 URL을 코드에 직접 넣으면 한 변당 16모듈이 늘어나는데, 그 대가로 얻는 것은 리디렉션이 더 잘할 수 있는 일뿐이에요.

# 오류 정정이 크기에서 얼마나 드는지

오류 정정은 손상되거나 일부가 가려진 코드도 읽히도록 중복성을 더해요. 공짜가 아니고, 위 표가 그 비용을 보여줘요:

  • 짧은 링크, M → H: 25 → 29모듈 (선형 기준 +16%)
  • Wi-Fi 연결, M → H: 33 → 41 (+24%)
  • vCard, M → H: 49 → 61 (+24%)

폭은 4분의 1 가까이 늘어나지만, 그 대신 긁히거나, 포장재에 인쇄되거나, 로고에 일부 가려져도 살아남는 코드를 얻어요. 공간이 넉넉한 포스터에서는 레벨 H를 쓰고 더 고민하지 마세요. 30mm만 가능한 라벨이라면, 긴 URL과 레벨 H보다 짧은 링크와 레벨 M이 더 나아요. 더 짧은 페이로드가 추가 오류 정정보다 더 많은 견고성을 담당하고 있기 때문이에요.

가운데를 로고로 가린다면 절충점이 H 쪽으로 강하게 기울고, 로고 크기의 측정된 한도도 있어요.

# 이것으로 측정할 수 없는 것

위 내용은 전부 기호 자체에 관한 것이에요. 인코더에 대한 산술이라 정확하고, 직접 다시 돌려 볼 수 있어요. 하지만 인쇄된 코드가 스캔되는지를 결정하는 요소 중 절반에 불과해요:

  • 실제 카메라로 스캔 거리를 테스트하지 않았어요. 업계의 경험칙은 코드 폭이 스캔하려는 거리의 약 10분의 1이어야 한다는 것인데, 널리 인용되지만 저희가 검증하지는 않았어요. 포스터와 사이니지의 출발점으로만 여기고, 측정값으로 보지는 마세요.
  • 잉크 번짐, 소재, 대비는 수치에 들어 있지 않아요. 코팅지 위의 0.4mm 모듈과 골판지 위의 0.4mm 모듈은 같은 모듈이 아니에요.
  • 카메라 품질은 천차만별이에요. 어두운 식당에서 쓰는 5년 된 휴대폰이 진짜 테스트예요. 의도한 크기로, 의도한 용지에 인쇄하고, 사무실에서 가장 성능이 떨어지는 휴대폰으로 스캔해 보세요.

마지막 항목은 단서가 아니라 조언이에요. 계산은 어떤 크기를 테스트할 가치가 있는지 알려 주고, 테스트는 실제로 작동하는지 알려 줘요.

# 직접 다시 실행해 보기

위의 모든 표는 글에 손으로 적은 것이 아니라 스크립트가 출력한 결과예요. 스크립트는 저장소의 draft/mostlyqr/seo/benchmarks/print-size.js에 있어요. 위 다섯 문자열에 대해 buildMatrix를 실행하고, 인코딩 모드 세그먼트를 출력하고, 실제 표 옆에 바이트 모드 대조표를 출력하고, 밀리미터 수치를 계산해요. 여기 있는 숫자가 틀렸다면, 틀린 곳은 그 파일이에요.

# 요약

  1. 짧은 링크를 인코딩하세요. 용지가 아니라 격자를 바꾸는 유일한 조절 장치예요.
  2. 위 표에서 페이로드의 모듈 수를 찾거나 직접 계산하세요.
  3. (모듈 수 + 8)에 인쇄 공정이 깨끗하게 유지하는 가장 작은 모듈 크기를 곱하세요. 그 값이 최소 폭이에요. (저희 템플릿에 넣는다면 A3 포스터와 A4 전단지 모두 여기 나온 어떤 페이로드가 필요로 하는 것보다 훨씬 넉넉한 공간을 남겨요.)
  4. 실제 용지에 그 크기로 인쇄하고, 성능이 나쁜 휴대폰으로 스캔하세요.

QR 코드에 데이터뿐 아니라 그림도 담고 싶다면 크기 문제는 훨씬 더 까다로워져요. 사진이 보이려면 훨씬 더 촘촘한 격자가 필요하고, 이는 사진 QR 코드에 대해 따로 측정한 내용이에요.

자주 묻는 질문

QR 코드의 최소 크기는 얼마인가요?

하나의 숫자로 정해져 있지 않아요. QR 코드는 모듈로 이루어진 격자이고, 필요한 모듈 수는 데이터를 얼마나 넣느냐에 따라 전적으로 달라져요. 오류 정정 수준 M의 짧은 링크는 한 변이 25모듈이지만, 같은 코드에 vCard를 담으면 49모듈이에요. 같은 너비로 인쇄하면 두 번째 코드의 모듈은 거의 절반 크기가 돼요. 그래서 하나는 17mm에서 스캔되고 다른 하나는 스캔되지 않아요. 먼저 모듈 수를 계산한 다음 너비를 정하세요.

URL이 길면 QR 코드도 커지나요?

더 촘촘해져요. 결국 같은 효과예요. 우리 측정에서 21자 짧은 링크는 수준 M에서 25모듈로 인코딩되고, 116자 제품 URL은 45모듈이에요. 둘 다 25mm 너비로 인쇄하면 모듈은 각각 0.76mm와 0.47mm가 돼요. URL을 줄이는 것은 코드를 작게 인쇄하도록 만드는 가장 저렴한 방법이에요. 비용이 들지 않고, 종이가 아니라 격자를 바꾸는 유일한 방법이에요.

오류 정정을 높이면 코드도 커지나요?

네, 그리고 대부분의 사람이 예상하는 것보다 많이 커져요. 수준 M에서 H로 올리면 다섯 가지 페이로드 모두에서 한 변당 모듈이 4~12개씩 늘었어요. vCard의 경우 49모듈이 61모듈이 되었는데, 이는 인쇄해야 하는 선형 크기가 25% 늘어나는 것이에요. 수준 H는 코드를 만지거나, 포장재에 인쇄하거나, 일부가 로고로 가려지는 경우에 보통 가치가 있어요. 하지만 이것은 공짜 업그레이드가 아니라 크기 결정이에요.

QR 코드 주변에는 얼마나 많은 여백이 필요한가요?

모든 변에 모듈 4개씩이요. 이 조용한 영역은 장식이 아니라 기호의 일부이고, 리더가 가장자리를 찾는 데 쓰기 때문에 계산에 포함해야 해요. 그래서 이 글의 모든 인쇄 너비는 정확히 그 이유로 (모듈 + 8) × 모듈 크기로 계산했어요.

출처
  1. QR Code standardization (ISO/IEC 18004) — Denso Wave
  2. node-qrcode (the MIT encoder our matrix builder wraps)
이 주제의 다른 글
MostlyQR 글 · 글