극초보 바이브코딩 #4 · 파이썬 첫걸음

와이파이 QR코드 만들기

"와이파이 비번 뭐야?"를 끝내는 카드예요. 폰 기본 카메라로 찍으면 비밀번호 입력 없이 바로 연결돼요. 바로 쓰고 싶다면 아래 카드 만들기를, 파이썬으로 직접 만들어 보고 싶다면 실습으로 내려가세요.

냉장고에 붙은 와이파이 QR 카드를 휴대폰 카메라로 찍자 네트워크에 연결 알림이 뜨는 모습

바로 만들기: 와이파이 QR 카드

비밀번호는 이 브라우저 안에서만 쓰여요. 저장하지도, 서버로 보내지도 않아요. 현관처럼 밖에서 보이는 곳에 붙일 거라면 공유기의 손님용(게스트) 와이파이로 만드는 게 안전해요.

0파이썬이 있는지 확인하기

윈도우 키 + R → cmd → 엔터로 검은 창을 열고 python --version을 입력해요.

나온 결과할 일
Python 3.12.x 같은 버전 번호이미 설치됨, 다음 단계로
"내부 또는 외부 명령… 아닙니다" 또는 마이크로소프트 스토어가 열림python.org에서 설치. 첫 화면 맨 아래 Add python.exe to PATH를 꼭 체크하고, 설치 후 검은 창을 새로 열어요

설치가 번거롭다면 아래 연습장에서 먼저 해 보세요. 이 페이지 안에서 파이썬이 돌아가서 설치 없이 실행돼요.

1작업 폴더에서 검은 창 열고 부품 설치

새 폴더 만들기, 주소창에 cmd 입력, 설치 한 줄 세 단계 그림
  1. 바탕화면에 qr연습 폴더를 만들고 열어요.
  2. 창 맨 위 주소창을 클릭하고 cmd 입력 → 엔터. 검은 창이 그 폴더에서 열려요. 만든 파일과 검은 창이 같은 폴더에 있어야 실행돼요.
  3. 부품(라이브러리) 설치 한 줄. 마지막에 Successfully installed가 보이면 성공이에요.
pip install qrcode[pil]

[pil]은 QR을 그림 파일로 저장하는 부품(Pillow)도 같이 설치하라는 뜻이에요. "pip은 명령이 아닙니다"가 뜨면 py -m pip install qrcode[pil]로 해 보세요.

2AI에게 세 줄로 요청하기

파이썬 qrcode 라이브러리로 와이파이 접속용 QR코드 이미지를 만드는 코드를 짜줘.
와이파이 이름은 MyHome_WiFi, 비밀번호는 12345678로 해줘.
실행하면 같은 폴더에 wifi_qr.png 로 저장되게 해줘.

진짜 비밀번호는 AI 대화창에 적지 마세요. 가짜 값으로 코드를 받고, 내 컴퓨터에서만 진짜 값으로 바꾸면 돼요. 비밀번호와 키 같은 비밀은 대화창에 붙여넣지 않는 게 앞으로도 지킬 습관이에요.

3연습장에서 바로 실행하기

받은 코드를 붙여넣고 ▶ 파이썬 실행을 누르면 wifi_qr.png가 아래에 나타나요. 휴대폰 카메라로 화면을 찍어 보세요. 처음 한 번은 파이썬을 내려받느라 시간이 걸려요.

내 컴퓨터에서 실행하려면
  1. 메모장에 코드를 붙여넣고 qr연습 폴더에 저장해요. 파일 형식 모든 파일, 이름 wifi_qr.py, 인코딩 UTF-8.
  2. 파일 이름을 절대 qrcode.py로 하지 마세요. 라이브러리 이름과 같으면 파이썬이 내 파일을 라이브러리로 착각해서 에러가 나요.
  3. 메모장에서 Ctrl+F로 MyHome_WiFi와 12345678을 찾아 진짜 값으로 바꿔요. 따옴표 안쪽 글자만요.
  4. 검은 창에 python wifi_qr.py → 폴더에 wifi_qr.png가 생기면 성공. 고친 뒤에는 검은 창에서 ↑ 키를 누르면 방금 명령이 다시 나와요.

4미션: 냉장고에 붙일 와이파이 카드

요청할 때는 무엇을 · 어떻게 동작 · 어떻게 보이게 · 조건, 그리고 파이썬에서는 하나 더. 새 코드를 받으면 "추가로 설치할 게 있는지"도 물어보세요. 자동 검사는 만들어진 QR을 실제로 읽어서 판정해요.

  1. 기본: 찍히는 와이파이 QR

    실행하면 그림 파일이 생기고, 그 QR을 읽으면 와이파이 정보가 나와야 해요.

  2. 인쇄용 카드로

    QR 위에 제목, 아래에 안내 문구. 예시 한 줄: "QR코드 위에 "우리 집 와이파이"라는 제목을, 아래에 "카메라로 찍으면 바로 연결돼요"라는 문구를 넣어서 카드 모양 이미지로 만들어줘." 한글이 네모(□□□)로 깨지면 아래 표를 보세요.

  3. 색 바꾸고 가운데 로고 넣기

    우리 집 분위기에 맞는 색과 가운데 작은 그림. 힌트: 가운데를 가리면 안 읽힐 수 있어요. 가려도 읽히게 하는 설정은 아래 실험에 있어요.

  4. 비밀번호를 코드에 남기지 않기

    실행할 때마다 와이파이 이름과 비밀번호를 물어보게. 힌트: "코드에 비밀번호를 적지 않고"라는 조건을 꼭 말하세요. 검사할 때 연습장이 이름과 pass;word 같은 특수문자 비밀번호를 대신 입력해 봐요.

  5. 다른 QR도 만들어 보기 (자유)

    내 블로그 주소, 연락처가 저장되는 명함 QR, 단톡방 초대 링크…

꾸몄는데 안 찍히면 소용없어요. 미션은 하나씩, 매번 실행해서 폰으로 찍어 확인하세요. 망가지면 "방금 고친 거 되돌려줘" 한 마디면 돼요.

안 될 때 확인할 것

에러가 나면 빨간 글씨 전체를 복사해서 AI에게 붙여넣는 게 가장 빨라요. 연습장의 에러 전체 복사 버튼을 쓰세요.

증상원인과 해결
'python'은(는) 내부 또는 외부 명령… 아닙니다설치 때 PATH 체크를 빼먹었어요. 다시 설치하며 Add python.exe to PATH 체크, 검은 창은 새로 열기
No such file or directory검은 창과 파일이 다른 폴더에 있어요. 폴더 주소창에서 cmd를 새로 열기
ModuleNotFoundError: No module named 'qrcode'부품 설치가 안 됐어요. pip install qrcode[pil] 다시
partially initialized module 'qrcode'… circular import파일 이름을 qrcode.py로 저장했어요. wifi_qr.py로 바꾸고 __pycache__ 폴더가 있으면 지우기
그림 속 한글이 네모(□□□)기본 글꼴에 한글이 없어요. AI에게 "한글은 윈도우의 맑은 고딕 글꼴로 써줘"
QR은 읽히는데 연결이 안 됨비밀번호 오타, 또는 ; : , " 같은 특수문자. "비밀번호에 특수문자가 있어도 제대로 되게 처리해줘"

실험: QR코드는 왜 가려져도 읽힐까?

QR코드는 1994년 일본의 자동차 부품 회사가 기름 묻고 긁히는 공장에서 쓰려고 만들었어요. 그래서 원래 정보 말고 망가졌을 때 되살리는 여분이 함께 들어 있어요. 여분을 얼마나 넣을지(오류 정정 단계)에 따라 가운데를 얼마나 가려도 읽히는지가 달라져요. 직접 가려 보세요.

QR코드 구조: 모서리의 위치 찾기 네모 3개와 데이터·복구용 여분, 가운데를 가렸을 때 L은 못 읽고 H는 읽히는 비교

이 판독기로 재 보면 가운데를 가려도 읽히는 한계가 대략 L 4%, M 8%, Q 12%, H 18%예요. 복구 여분(7·15·25·30%)보다 작은 이유는 가린 부분이 정보 칸만이 아니라 위치를 맞추는 무늬까지 덮고, 가장자리에 걸친 칸도 망가뜨리기 때문이에요. 그래서 로고는 H로 만들고 QR 면적의 10~15% 이하가 안전해요.

판정은 이 브라우저에서 QR 판독 프로그램(jsQR)으로 실제로 읽어 본 결과예요. 폰 카메라는 이보다 조금 더 잘 읽거나 못 읽을 수 있어요.

그리고 와이파이 QR은 사실 WIFI:T:WPA;S:와이파이이름;P:비밀번호;; 같은 짧은 글자예요. 폰 카메라가 WIFI:로 시작하는 글자를 보면 연결 버튼을 띄워 주는 약속이 있어요. ;가 칸을 나누는 기호라서, 비밀번호에 ; , : " \가 있으면 앞에 \를 붙여야 해요. 위 카드 만들기는 이걸 자동으로 처리해요.

블로그에서 자세히 보기: 극초보 바이브코딩 #4 원문 · 파이썬 설치는 알쓸신잡 3편, 경로와 검은 창은 알쓸신잡 2편

이전 실습: #3 윷 던지기와 보름달 소원 · 전체 실습 목록

자주 묻는 질문

이미 그 와이파이에 연결된 폰으로 찍으면 아무 반응이 없어요

이미 연결된 폰은 알림이 안 뜰 수 있어요. 와이파이를 잠깐 끄거나 가족 폰으로 확인해 보세요.

아이폰도 되나요?

네. 아이폰과 안드로이드 모두 기본 카메라로 와이파이 QR을 읽어서 연결 버튼을 띄워 줘요. 아주 오래된 기기는 QR 앱이 필요할 수 있어요.

비밀번호가 어딘가에 저장되나요?

아니요. 카드 만들기와 연습장 모두 이 브라우저 안에서만 동작해요. 서버로 보내지 않고, 페이지를 닫으면 사라져요.