
파이썬 QR 코드 생성기는 결과가 바로 보여서 재밌습니다. 문자열 하나만 넣어도 곧바로 이미지 파일이 나오기 때문입니다. 특히 qrcode 패키지는 설치가 간단하고, qrcode.make() 한 줄로도 바로 시작할 수 있습니다.
이 글에서는 아주 짧은 버전부터 시작해서, 문자열이 어떻게 QR 이미지가 되는지, PNG로 저장하고 공유하는 흐름까지 단계별로 정리하겠습니다.
먼저 가장 짧은 코드
먼저 눈으로 결과를 보는 게 좋습니다. 아래 코드는 문자열 하나를 QR 코드 이미지로 저장합니다.
import qrcode
text = "https://bscodelab.com"
img = qrcode.make(text)
img.save("my_qr.png")
print("저장 완료: my_qr.png")정말 이게 끝입니다. 문자열을 qrcode.make()에 넣으면 이미지가 만들어지고, save()로 파일이 저장됩니다. 처음 보면 마법처럼 보이지만, 흐름은 생각보다 단순합니다.
문자열이 이미지가 되는 흐름
이 프로젝트를 아주 짧게 요약하면 아래 순서입니다.
- 문자열을 준비합니다.
- qrcode가 그 문자열을 QR 패턴으로 바꿉니다.
- 그 패턴을 이미지 객체로 만듭니다.
- 마지막에 PNG 파일로 저장합니다.
즉, 핵심은 문자열 → QR 패턴 → 이미지 → 파일 순서입니다. 이 흐름이 잡히면 나중에 URL뿐 아니라 연락처, 짧은 메모, 와이파이 안내 문자열도 같은 방식으로 바꿀 수 있습니다.
설치는 이렇게 하면 됩니다
가장 기본 설치는 아래처럼 시작할 수 있습니다.
pip install qrcode이미지 기능을 조금 더 안정적으로 쓰고 싶다면 아래처럼 Pillow 의존성을 함께 설치하는 방식도 많이 씁니다.
pip install "qrcode[pil]"입문자 기준으로는 두 번째가 더 덜 헷갈립니다. PNG 저장 예제를 따라갈 때도 자연스럽습니다.
입력 문자열만 바꿔도 바로 응용된다
QR 코드는 결국 문자열을 담는 그릇에 가깝습니다. 그래서 무엇을 넣느냐에 따라 결과물의 느낌이 달라집니다.
- 블로그 주소
- 깃허브 저장소 링크
- 행사 체크인 링크
- 짧은 안내 문구
- 와이파이 안내용 텍스트
import qrcode
text = "안녕하세요. 이 QR 코드는 파이썬으로 만들었습니다."
img = qrcode.make(text)
img.save("hello_qr.png")URL만 되는 줄 알았다면 여기서 감이 조금 바뀝니다. QR 코드는 생각보다 그냥 문자열에 가깝습니다.
파일 이름까지 받는 미니 프로젝트
이제 조금 프로젝트답게 바꿔보겠습니다. 사용자에게 문자열과 저장 파일명을 입력받는 버전입니다.
import qrcode
text = input("QR로 만들 문자열을 입력하세요: ").strip()
file_name = input("저장할 파일 이름을 입력하세요(확장자 제외): ").strip()
if not text:
print("문자열이 비어 있으면 QR 코드를 만들 수 없습니다.")
else:
if not file_name:
file_name = "my_qr"
img = qrcode.make(text)
output_path = f"{file_name}.png"
img.save(output_path)
print(f"저장 완료: {output_path}")이 버전에서 중요한 건 기능보다 감각입니다. 이제 코드는 단순 예제가 아니라, 입력을 받고 결과 파일을 남기는 작은 도구가 됩니다.
qrcode.make가 편한 이유
qrcode.make()는 빠르게 시작할 때 정말 편합니다. 옵션을 많이 몰라도 되고, 일단 결과물을 만드는 데 집중할 수 있습니다.
- 오늘 바로 하나 만들어보고 싶을 때
- 수업이나 블로그 예제로 짧게 보여주고 싶을 때
- 디자인보다 생성 흐름 이해가 먼저일 때
입문 단계에서는 qrcode.make로 먼저 성공 경험을 만들고, 옵션이 필요해질 때 QRCode 클래스로 내려가면 됩니다.
크기와 여백을 조절하고 싶다면
조금 더 다듬고 싶다면 QRCode 클래스를 쓰면 됩니다. 여기서는 크기, 여백, 오류 복원 수준 같은 값을 직접 줄 수 있습니다.
import qrcode
from qrcode.constants import ERROR_CORRECT_M
qr = qrcode.QRCode(
version=1,
error_correction=ERROR_CORRECT_M,
box_size=10,
border=4,
)
qr.add_data("https://bscodelab.com/python")
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save("custom_qr.png")처음 보면 옵션이 많아 보여도, 실제로 자주 보는 값은 몇 개 안 됩니다. version은 QR 코드 크기 단계, error_correction은 오류 복원 수준, box_size는 칸 하나의 픽셀 크기, border는 바깥 여백 두께입니다.
README 기준으로 border=4는 기본값이자 최소 권장 여백입니다. 초보자라면 괜히 줄이지 않는 편이 안전합니다.
version은 직접 고정하지 않아도 된다
데이터 길이가 달라질 수 있다면 fit=True를 같이 써서 자동으로 맞추게 두는 편이 편합니다. 처음에는 이렇게 기억하면 충분합니다.
- 데이터가 짧고 실험용이면 기본값으로 시작
- 길이가 달라질 수 있으면 fit=True
- 정말 크기를 통제해야 할 때만 version을 신경쓰기
저장한 PNG는 어디에 쓰면 좋을까
- 발표 자료 마지막 장에 링크 넣기
- 명함이나 소개 카드에 포트폴리오 주소 붙이기
- 가게 안내문에 메뉴 링크 넣기
- 오픈채팅, 폼, 설문 링크를 빠르게 공유하기
공유용으로 저장할 때는 파일 이름도 조금 신경 쓰면 좋습니다. 예를 들면 event-checkin-qr.png, portfolio-link-qr.png처럼 목적이 드러나게 두는 편이 덜 헷갈립니다.
색을 바꾸고 싶을 때 주의할 점
import qrcode
qr = qrcode.QRCode(box_size=10, border=4)
qr.add_data("https://bscodelab.com")
qr.make(fit=True)
img = qr.make_image(fill_color="darkblue", back_color="white")
img.save("blue_qr.png")색상도 바꿀 수 있습니다. 다만 색 대비가 약하거나, 배경을 너무 화려하게 바꾸거나, 가운데에 이미지를 무리해서 넣으면 스캔 품질이 떨어질 수 있습니다. 그래서 첫 버전은 검은색과 흰색 조합으로 두는 편이 가장 무난합니다.
자주 하는 실수
- 빈 문자열을 넣고 왜 안 예쁘지 고민하는 경우
- 파일 이름을 안 받아서 매번 같은 이름으로 덮어쓰는 경우
- 여백을 줄이면 더 깔끔할 거라고 생각하는 경우
- 색을 너무 과하게 바꿔서 스캔이 잘 안 되는 경우
특히 여백은 보기보다 중요합니다. QR 코드는 바깥의 조용한 여백까지 포함해서 읽히는 경우가 많아서, 처음에는 기본값을 존중하는 편이 좋습니다.
이 프로젝트로 같이 익히는 파이썬 감각
- 패키지 설치와 import
- 문자열 입력 받기
- 함수 호출 결과를 변수에 담기
- 파일 저장하기
- 조건문으로 예외 상황 처리하기
그래서 입문 프로젝트로 손맛이 좋습니다. 결과물이 눈에 보이니까 중간에 덜 지칩니다. 파이썬 문자열 감각을 같이 다지고 싶다면 파이썬 리스트와 튜플 차이 글이나 파이썬 map과 filter, list comprehension 차이 글도 이어서 보기 좋습니다.
다음 장난은 이렇게 키우면 된다
- 여러 링크를 한꺼번에 QR 이미지로 저장하기
- CSV 파일을 읽어서 QR 코드 일괄 생성하기
- 파일명 규칙을 자동으로 붙이기
- 웹 페이지용 안내 QR 세트를 만들기
즉, 이 글의 핵심은 QR 코드 자체보다도 작게 시작해서 바로 쓸 수 있는 도구를 만드는 경험입니다.
마무리
파이썬 QR 코드 생성기는 입문 프로젝트로 아주 좋습니다. 코드는 짧지만 결과가 확실하고, 저장까지 끝나면 진짜 뭔가 하나 만든 느낌이 남습니다.
기억할 건 단순합니다. 먼저는 qrcode.make()로 빠르게 만들고, 그다음에 필요해지면 QRCode 클래스로 크기와 옵션을 조절하면 됩니다. 공식 문서를 함께 보고 싶다면 qrcode 패키지 페이지와 python-qrcode GitHub README를 참고하면 됩니다.