QR 코드 생성기

19 / 2331 바이트
오류 정정 수준
15% 복구 가능
버전 2 · 25×25 모듈

입력한 내용은 저장, 기록, 공유되지 않습니다.

URL, 텍스트, Wi-Fi 정보를 담은 QR 코드를 만들어 PNG나 SVG로 저장할 수 있습니다. 모든 처리가 브라우저에서 이루어지므로 업로드되지 않고 코드가 만료되지도 않습니다.

사용 방법

  1. 인코딩할 URL이나 텍스트를 입력합니다.
  2. 필요하면 오류 정정 수준, 색상, 여백을 조정합니다.
  3. 문서용은 PNG, 인쇄용은 SVG로 내려받습니다.

패턴 안에 실제로 들어 있는 것

QR 코드는 정해진 구조를 가진 모듈 격자입니다. 세 모서리의 큰 사각형은 파인더 패턴으로, 스캐너가 어떤 각도에서든 코드를 찾고 방향을 파악하게 해 줍니다. 큰 버전에는 곡면이나 기울어진 면에서 찍힌 코드의 왜곡을 보정하기 위한 작은 정렬 패턴이 들어갑니다. 파인더 패턴 사이의 점선은 타이밍 패턴으로, 스캐너에 모듈 격자를 알려 줍니다. 파인더 주변에는 오류 정정 수준과 마스크를 나타내는 포맷 정보가 있습니다.

나머지는 모두 데이터와 오류 정정 코드가 번갈아 배치된 것입니다. 버전은 21×21 모듈부터 177×177 모듈까지 40가지이며, 내용이 들어가는 가장 작은 버전이 자동으로 선택됩니다. 입력할수록 코드가 눈에 띄게 촘촘해지는 이유입니다.

인코딩 모드는 생각보다 중요합니다. 숫자는 한 자리에 약 3.3비트, 영숫자는 약 5.5비트로 담기지만, 영숫자 집합은 대문자와 몇 가지 기호뿐입니다. 그 밖의 것은 모두 문자당 8비트인 바이트 모드로 넘어가며, 한글 같은 멀티바이트 문자는 더 많은 비트를 씁니다. HTTPS://EXAMPLE.COM/PATH가 같은 URL을 소문자로 쓴 것보다 눈에 띄게 단순한 코드를 만드는 이유가 이것입니다. 스킴과 호스트는 대소문자를 구분하지 않으므로 대문자로 바꿔도 문제없고, 그 차이가 버전 한두 단계가 될 수 있습니다.

안정적으로 스캔되는 코드 만들기

콰이어트 존을 지키세요. 명세는 사방에 모듈 네 개 폭의 여백을 요구하며, 레이아웃에 맞추려고 이를 없애는 것이 인쇄된 코드가 인식되지 않는 가장 흔한 단일 원인입니다. 스캐너는 애초에 코드를 찾는 데 이 여백을 씁니다.

밝기 방향을 지키세요. 밝은 배경에 어두운 모듈이 모든 스캐너가 기대하는 형태이며, 반전된 코드는 읽는 스캐너도 있고 못 읽는 스캐너도 있습니다. 대비를 높게 유지하고, 모듈 뒤에 그라데이션이나 사진 배경을 두지 마세요. 색을 입힌다면 어두운 색을 밝게 만들지 말고 어두운 색의 색조를 바꾸세요.

거리에 맞게 크기를 정하세요. 실용적인 경험칙은 코드 폭을 스캔 거리의 약 10분의 1로 하는 것입니다. 30cm 거리에서 휴대폰으로 찍는다면 약 3cm이고, 방 건너편에서 읽는 포스터라면 생각보다 훨씬 커야 합니다. 인쇄물에서는 모듈이 약 0.4mm보다 작아지지 않게 하고, 화면 교정본이 아니라 실제 인쇄물로 확인하세요.

가운데에 로고를 넣는다면 먼저 오류 정정 수준을 H로 올리세요. 그러면 약 30%의 여유가 확보되어 가려진 영역을 메워 줍니다. 다만 로고는 여전히 파인더 패턴에서 떨어뜨려야 하며, 천 장을 인쇄하기 전에 서너 종류의 휴대폰으로 스캔해 볼 가치가 있습니다.

페이로드 형식

QR 코드는 텍스트를 담으며, 스캐너가 그 텍스트로 무엇을 할지는 관례에 따라 정해집니다. URL은 열리고, 나머지는 알려진 형식과 일치하지 않는 한 보통 일반 텍스트로 표시됩니다.

Wi-Fi는 WIFI:T:WPA;S:네트워크이름;P:비밀번호;; 형식을 쓰며, T에는 WPA, WEP, nopass 중 하나를 넣습니다. 세미콜론은 필수이고, 네트워크 이름이나 비밀번호에 들어간 특수 문자는 백슬래시로 이스케이프해야 합니다. 전화번호는 tel:, 이메일은 제목과 본문에 일반 쿼리 문법을 쓰는 mailto:, 위치는 위도와 경도를 담은 geo:입니다. 연락처에는 vCard를 쓰는데, 장황하지만 매우 폭넓게 지원됩니다.

앱 전용 스킴에 의존하는 것은 그 앱이 설치된 곳에서만 동작합니다. 그래서 영리한 사용자 정의 스킴보다 리디렉션하는 평범한 https URL이 대개 더 튼튼합니다.

정적 코드와 동적 코드

여기서 만드는 코드는 정적 코드입니다. 내용이 모듈에 직접 인코딩됩니다. 영원히 동작하고, 오프라인에서도 되며, 어떤 서비스에도 의존하지 않고, 누구에게도 아무것도 보고하지 않습니다. 대신 바꿀 수도 없습니다. 가리키는 URL이 옮겨 가면 인쇄한 모든 코드가 쓸모없어집니다.

동적 코드는 제공 업체가 소유한 짧은 리디렉션 URL을 인코딩해 이 문제를 해결합니다. 업체는 그 URL을 현재 지정한 목적지로 전달하면서 스캔 수를 셉니다. 목적지가 바뀌는 캠페인에는 정말 유용하지만, 그 대가는 분명히 알아 둘 필요가 있습니다. 업체가 모든 스캔을 보고, 계정이 만료되거나 서비스가 종료되면 코드가 멈추며, 많은 무료 생성기가 말없이 동적 코드를 만듭니다.

유연성이 필요하다면, 정직한 방법은 직접 관리하는 도메인의 짧은 URL을 가리키는 정적 코드를 만들고 서버에서 리디렉션하는 것입니다. 목적지를 바꿀 수 있는 능력은 유지하면서 경로 중간에 다른 누구도 끼어들지 않습니다.

오류 정정이 손상된 코드도 읽히게 만드는 원리

QR 코드는 Reed-Solomon 부호화를 사용합니다. CD의 데이터를 지켜 주었고 심우주 통신에도 쓰이는 바로 그 계열의 오류 정정 부호입니다. 원리는 데이터를 다항식의 계수로 보고 그 곡선 위의 여분의 점들을 함께 전송하는 것으로, 충분한 수의 점이 살아남기만 하면 원본을 정확히 복원할 수 있습니다.

등급은 네 가지가 있습니다. L은 코드워드의 약 7%, M은 약 15%, Q는 약 25%, H는 약 30%를 복구하며, 이 중복 정보는 한곳에 몰려 있지 않고 심벌 전체에 퍼져 있습니다. 한쪽 모서리가 손상돼도 대개 문제가 되지 않는 이유가 여기에 있습니다. 등급을 올린다고 좋은 조건에서 더 잘 읽히는 것은 아니며, 더 나쁜 조건을 견디게 해 주는 대신 같은 내용에 대해 패턴이 더 촘촘해집니다.

화면이나 깔끔한 인쇄물이라면 M이 무난한 기본값입니다. H는 곡면에 인쇄되거나 비바람에 노출되거나 로고에 일부가 가려질 코드를 위한 것입니다. 등급을 올리면 모듈 수가 늘어나므로, 긴 URL을 담은 H 등급 코드는 같은 내용의 M 등급보다 눈에 띄게 촘촘해집니다. 인쇄 크기가 고정돼 있다면 이는 불리하게 작용합니다.

용량, 그리고 내용을 줄이면 좋아지는 이유

용량은 버전과 오류 정정 등급, 인코딩 모드가 함께 결정합니다. 버전 10, 즉 57 곱하기 57 격자에서 M 등급 정정을 쓰면 대략 영숫자 271자 또는 213바이트가 들어갑니다. 최대인 버전 40에서는 수천 단위가 되지만, 그만큼 큰 심벌은 인쇄하기에 비현실적이고 스캔도 느립니다.

대부분이 놓치는 지렛대가 인코딩 모드입니다. 숫자만 있는 내용은 한 자리당 약 3.3비트, 영숫자 모드는 5.5비트로 담기고, 나머지는 모두 문자당 8비트로 되돌아갑니다. 영숫자 집합은 대문자와 숫자, 그리고 아홉 개의 기호로 이루어져 있어서 HTTPS://EXAMPLE.COM/PATH가 소문자 형태보다 훨씬 효율적으로 인코딩됩니다. 스킴과 호스트는 대소문자를 구분하지 않으므로 대문자로 바꾸어도 잃는 것이 없습니다.

다른 하나의 지렛대는 URL을 짧게 만드는 것이고, 이는 앞의 모든 것보다 먼저 적용됩니다. 문자가 줄면 버전이 낮아지고, 같은 인쇄 크기에서 모듈이 커지며, 더 멀리서 더 나쁜 조명에서도 읽히는 코드가 됩니다.

퀴싱, 그리고 스캐너가 보여 주어야 할 것

QR 코드는 그것을 스캔하는 사람에게 속이 보이지 않습니다. 오늘날 퀴싱이라 불리는 수법은 전적으로 이 점에 기대고 있습니다. 주차 요금기나 식당 테이블의 정상 코드 위에 붙인 스티커, 이미지라서 링크 검사기를 우회하는 이메일 속 코드, 그럴듯한 결제 페이지로 이어지는 포스터의 코드가 그것입니다.

방어책은 평범합니다. 열기 전에 URL을 미리 보여 주는 스캐너를 고르는 편이 좋고, 요즘 휴대폰 카메라는 모두 그렇게 합니다. 페이지가 아니라 도메인을 보십시오. 결제 페이지는 손쉽게 복제되기 때문입니다. 무언가 위에 덧붙여진 것처럼 보이는 실물 코드는 의심하십시오. 인쇄된 코드 위에 붙인 스티커는 가까이서 보면 꼭 그렇게 보입니다.

코드를 게시하는 쪽이라면, 그에 상응하는 유용한 조치는 단축 주소가 아니라 사람들이 당신의 것이라고 알아볼 수 있는 도메인을 가리키게 하는 일입니다. 그래야 미리 보기가 의미를 가집니다. 낯선 단축 도메인으로 연결되는 코드는 공격자의 코드와 구별되지 않습니다.

코드를 넘기지 않고 스캔 수를 추적하기

스캔 수를 세고 연결 대상을 바꾸는 흔한 방법은 업체가 제공하는 동적 코드이지만 대가가 분명합니다. 업체는 모든 스캔을 들여다보고, 계정이 만료되면 코드가 작동하지 않으며, 일부 무료 생성기는 동적 코드라는 사실을 알리지 않은 채 만들어 냅니다. 인쇄해 놓은 코드가 선택한 적도 없는 서비스에 의존하게 된다는 뜻입니다.

직접 통제할 수 있는 방식은 자기 도메인의 짧은 경로를 가리키는 정적 코드를 쓰고, 리디렉션을 자기 서버에서 처리하는 것입니다. 연결 대상 변경은 설정 변경으로 끝나고, 분석 데이터는 자기 로그에 쌓이며, 경로에 제삼자가 끼어들지 않습니다. 캠페인마다 경로를 나누면 동적 코드를 사는 주된 이유인 게시 위치별 집계도 그대로 얻을 수 있습니다.

어느 쪽이든 코드 자체는 아무것도 보고하지 않습니다. 스캔은 연결 대상이 요청될 때 집계되므로, 포스터에 인쇄된 코드를 사진으로 찍기만 하고 열지 않았다면 기록에 남지 않고, URL을 손으로 옮겨 적은 사람도 스캐너를 쓴 사람과 똑같이 집계됩니다.

인쇄에 넘기기 전 점검 목록

시안이 아니라 실제 결과물을 시험하십시오. 최종 크기로, 실제로 쓸 재질에 코드를 인쇄한 뒤 구형 안드로이드를 포함해 최소 세 대의 휴대폰으로 스캔해 보십시오. 코드가 놓일 조명 환경에서도 시험해야 합니다. 어두운 바의 짙은 벽에 붙은 코드는 같은 코드가 책상 위에 있을 때와 전혀 다른 문제입니다.

여백 구역이 레이아웃 속에서 살아남는지 확인하십시오. 사방으로 네 모듈만큼의 빈 공간은 규격상의 요구 사항이며, 인쇄된 코드가 읽히지 않는 가장 흔한 이유는 디자이너가 구도를 맞추려고 그 여백 안으로 글자나 테두리를 밀어 넣는 것입니다.

인쇄를 돌리기 전에 연결 대상을 확인하고, 그 뒤에도 계속 살아 있게 유지하십시오. 코드는 그것을 만든 캠페인보다 오래 남습니다. 랜딩 페이지를 내릴 때 코드가 가리키는 URL은 404가 아니라 리디렉션이 되어야 합니다. 인쇄된 코드는 수정할 수 없고, 그 사본은 몇 년씩 돌아다니기 때문입니다.

자주 묻는 질문

이 코드가 나중에 작동하지 않게 되나요?
아닙니다. 데이터가 패턴 자체에 인코딩되므로 코드는 영구히 동작하며 유지에 어떤 서비스도 필요하지 않습니다. 많은 무료 생성기는 자사 리디렉션 주소를 가리키는 코드를 만들어 스캔을 추적하며, 계정이 만료되거나 유료 요금제가 필요해지면 작동이 멈출 수 있습니다. 이 도구는 어디로도 리디렉션하지 않습니다.
오류 정정 수준은 무엇을 바꾸나요?
코드가 얼마나 손상되거나 가려져도 읽히는지를 정합니다. 대략 L은 7%, M은 15%, Q는 25%, H는 30%입니다. 수준이 높을수록 같은 데이터라도 코드가 더 촘촘해집니다. 가운데에 로고를 얹을 계획이면 H를, 깨끗하게 사용하고 단순한 형태를 원하면 L을 쓰세요.
텍스트를 늘리면 코드가 촘촘해지는 이유는?
QR 코드는 21×21부터 177×177 모듈까지 40개 버전이 있고, 데이터가 들어가는 가장 작은 버전이 자동으로 선택됩니다. 그래서 내용이 길수록 격자가 촘촘해집니다. URL을 줄이는 것이 스캔하기 쉬운 코드를 유지하는 가장 좋은 방법입니다.
PNG와 SVG 중 무엇을 받아야 하나요?
슬라이드나 문서처럼 일반 이미지가 필요한 곳에는 PNG를, 인쇄나 대형 출력에는 벡터라 어떤 크기에서도 선명한 SVG를 사용하세요.
코드 주변 여백을 왜 남겨야 하나요?
규격은 사방에 4모듈의 여백을 요구합니다. 스캐너가 이 여백으로 코드를 찾기 때문에, 여백을 없애는 것은 인쇄된 코드가 읽히지 않는 가장 흔한 원인 중 하나입니다.
한글 같은 비라틴 문자도 처리되나요?
네. 내용은 UTF-8로 인코딩되므로 한국어, 일본어, 중국어, 이모지 모두 정확히 왕복됩니다. 일부 생성기는 바이트를 Latin-1로 처리해 이런 문자를 조용히 깨뜨립니다.

마지막 업데이트:

문제 신고

진행 단계, 예상 결과, 실제 결과를 적어 주세요. 비밀 정보와 개인 정보는 삭제해 주세요.

관련 도구