AI 파이썬 Lab · 심화 · 7주차
심화 · 실전 웹앱 ②

실전 웹앱 ② 배포

2주 페어의 둘째 주예요. 지난주가 'AI와 함께 프로토타입'이라면, 오늘은 내 힘으로 완성하고 인터넷에 배포합니다. 끝나면 "내 서비스가 인터넷에 떠 있다"고 말할 수 있어요.

오늘의 목표

오늘 배우는 것

지난주에 받은 피드백을 직접 반영해 앱을 완성하고, 내 코드 구조를 이해한 뒤, 인터넷에 배포해 친구가 실제로 쓰게 합니다.

🛠️
GOAL 1
받은 피드백을 직접 반영해 앱을 완성한다
🧩
GOAL 2
내 코드를 입력·처리·출력 3덩어리로 이해한다
🌍
GOAL 3
인터넷에 배포해 실사용 테스트까지 한다
새 개념 ①

처음 나오는 것 ① — 자가 디버깅

에러가 나면 선생님보다 나 스스로 먼저 고쳐보는 과정이에요. 오늘은 AI 도움을 받으면서도 내가 주도해서 버그를 해결하는 경험을 해봅니다.

🔧
자가 디버깅 (Self-Debugging)
에러 메시지를 읽고 → AI에게 물어보고 → 고쳐서 다시 실행하는 과정을 스스로 반복하는 것이에요.
왜 중요할까? 선생님이 없는 곳에서도 혼자 만들 수 있어야 진짜 개발자예요. 에러는 나쁜 게 아니에요 — 고치는 경험이 실력이 됩니다. 오늘 만난 에러를 스스로 해결하면 다음에 같은 에러가 두렵지 않아요.
🩺 비유: 의사의 진단
의사는 아픈 곳을 보고 원인을 찾아요. 디버깅도 똑같아요. 에러 메시지(증상)를 읽고 → 원인을 찾고 → 수정(치료)해요. 빨간 에러 글자를 무서워하지 말고, 진단서처럼 읽어보세요.
새 개념 ②

처음 나오는 것 ② — 배포(Deploy)

내 컴퓨터에만 있는 앱을 인터넷에 올려서 누구나 접속할 수 있게 만드는 것이에요. 1주차에 한 번 해봤으니 이번엔 더 자신 있게!

🚀
배포 (Deploy)
내 컴퓨터에서만 돌던 앱을 서버(Streamlit Cloud)에 올려, 전 세계 누구나 주소로 접속할 수 있게 만드는 것이에요.
비유: 내 방에만 있던 그림을 갤러리에 걸어두는 것과 같아요. 갤러리(인터넷)에 걸리면 주소만 알면 누구나 볼 수 있어요. 완성된 앱이 https://...streamlit.app 주소를 갖게 됩니다.
💡 1주차 방법 그대로

배포는 1주차에서 이미 해봤어요. GitHub에 코드 올리기 → Streamlit Cloud에 연결 → Secrets에 키 입력. 오늘은 내가 직접 만든 앱을 배포하는 거라서 더 뿌듯해요.

data-divider-icon="🌍" data-divider-title="세상에 내놓기" data-divider-sub="AI가 만든 걸, 내가 이해하고 고쳐서">개념

완성과 배포 3단계

지난주는 AI와 함께 프로토타입을 만들었어요. 오늘은 한 단계 성장할 차례예요 — 스스로 고치고, 코드를 이해하고, 직접 배포합니다.

1
반영 — 피드백 1순위부터
지난주에 정한 1순위 개선점을 직접 고쳐요. 한 번에 하나씩.
2
이해 — 코드 구조 파악
코드를 모두 외울 필요 없어요. 입력 → 처리 → 출력 큰 구조만 잡으면 돼요.
3
배포 — 1주차 방법 재활용
GitHub 연결 → Streamlit Community Cloud 배포 → Secrets에 키 입력. 1주차에 한 그대로예요.
🏭 비유: 코드는 공장 라인
코드는 공장 라인과 같아요. 재료를 넣고(입력) → 가공하고(처리) → 완제품이 나와요(출력). 이 세 덩어리만 잡으면 긴 코드도 큰 그림이 보여요.
💡 오늘의 핵심

"AI가 해주는 것"을 넘어 "내가 이해하고 고치고 배포하는 것"으로 성장하는 시간이에요. 모든 줄을 다 알 필요는 없어요 — 큰 구조만 내 말로 설명할 수 있으면 충분합니다.

미션 1

피드백 반영해 개선하기

🔑 .env 파일 만드는 법 (처음 한 번만)

1단계 — VS Code 터미널에서 수업 폴더 안에 파일 만들기

터미널
# Windows
New-Item .env

# Mac
touch .env

2단계 — .env 파일을 열고 아래 한 줄 입력 (선생님이 알려준 키 사용)

.env
OPENAI_API_KEY=여기에_선생님이_알려준_키_붙여넣기

⚠️ 키 앞뒤에 공백이나 따옴표 없이 딱 붙여서 저장하세요. .env 파일은 코드와 같은 폴더에 있어야 해요.

🎯 목표: 지난주 정한 1순위 개선점을 직접 반영한다.

지난주 친구에게 받은 피드백 중 1순위부터 고쳐요. 비결은 하나예요 — 한 번에 하나씩 고치고 → 실행 → 확인을 반복하는 거예요.

💬 이렇게 입력해 보세요
이 앱에서 [친구가 불편하다고 한 부분]을 이렇게 바꾸고 싶어. 어떻게 고치면 될지 알려줘. 기존 기능은 그대로 두고 그 부분만 바꿔줘.
💾 바꾸기 전, 먼저 백업

고치기 전 코드는 따로 복사해서 저장해 두세요. 고쳤다가 망가져도 되돌릴 수 있게요. 작은 습관이지만 큰 안심이 돼요.

📸 스크린샷 자리
'피드백 반영 전'과 '반영 후' 화면을 나란히 비교
📝 예: 작던 버튼이 '+ 할 일 추가'로 커지고 색이 또렷해진 모습
⚠️ 자주 하는 실수
  • 고치니까 다른 게 망가져요 → 바꾸기 전 코드를 복사해 저장해 두세요.
  • 여러 개를 한꺼번에 바꿔서 원인을 못 찾아요 → 하나씩 고치고 확인하세요.
  • "기존 기능은 그대로 두고"를 빼먹어요 → 프롬프트에 꼭 넣으세요.
미션 2

디버깅하고 코드 이해하기

🎯 목표: 에러를 스스로 해결하고, 내 앱 코드의 구조를 파악한다.

이제 내 코드가 어떻게 돌아가는지 이해할 차례예요. 그런데 AI에게 묻기 전에, 먼저 스스로 짚어봐요.

✏️ 먼저 스스로 해보기
내 코드를 세 부분으로 나눠보기
AI에게 묻기 전, 내 코드를 직접 입력 / 처리 / 출력 세 부분으로 나눠 보세요. 그리고 각 부분이 코드 몇 번째 줄인지 손으로 짚어 보세요.
예: st.text_input → 입력 / ask_ai → 처리 / st.write → 출력.

코드 3덩어리 — 입력 · 처리 · 출력

코드를 다 외울 필요는 없어요. 아래처럼 세 덩어리로만 나누면 큰 구조가 한눈에 보여요.

app.py — 입력·처리·출력 3덩어리
import streamlit as st

# ── ① 입력: 사용자에게 받기 ──
task = st.text_input("할 일을 입력하세요")

# ── ② 처리: AI에게 일 시키기 ──
if st.button("순서 정리"):
    result = ask_ai(f"다음 할 일의 순서를 정리해줘: {task}")
    # ── ③ 출력: 화면에 보여주기 ──
    st.write(result)

코드 로직 파악 활동지

이번 주는 2주 페어의 둘째 주예요. 아래 활동지에 내 코드 구조를 직접 정리해 봅니다.

🧩
코드 로직 파악 활동지
내 앱 코드를 입력·처리·출력으로 나누고, 핵심 줄 5개를 골라 "이 줄은 ___하는 코드"라고 한글로 설명하기

코드가 길어 어디가 뭔지 모르겠다면, AI에게 3부분으로 나눠 달라고 한 뒤 내 말로 다시 정리해 보세요.

💬 이렇게 입력해 보세요
이 코드를 입력·처리·출력 세 부분으로 나눠서 설명해줘.
▸ 활동지 작성 예시
① 입력  : task = st.text_input(...)  → 할 일을 받는 줄
② 처리  : result = ask_ai(...)        → AI가 순서를 정리하는 줄
③ 출력  : st.write(result)            → 결과를 화면에 보여주는 줄
📸 스크린샷 자리
코드 로직 파악 활동지에 핵심 줄 5개를 한글로 설명한 모습
📝 입력·처리·출력 세 칸으로 나뉜 형태가 보이면 좋음
⚠️ 자주 하는 실수
  • 코드가 너무 길어 어디가 뭔지 몰라요 → AI에게 3부분 분류를 요청한 뒤 내 말로 재정리.
  • AI 설명을 그대로 베껴요 → 내 말로 다시 써야 진짜 내 것이 돼요.
  • 모든 줄을 다 이해하려 해요 → 큰 구조(입력·처리·출력)만 잡으면 충분해요.
미션 3

배포하고 실사용 테스트

🎯 목표: 완성한 앱을 인터넷에 배포하고, 친구가 실제로 쓰게 한다.

이제 마지막이에요. 1주차에 배운 방법 그대로, Streamlit Community Cloud에 올리면 폰으로 접속되는 주소가 생겨요.

배포 3단계

1
GitHub에 코드 올리기
완성한 앱 코드를 GitHub 저장소에 올려요.
2
Streamlit Cloud에 연결
Streamlit Community Cloud에서 그 저장소를 선택하면 앱이 자동으로 만들어져요.
3
키는 Secrets 칸에
배포 화면의 'Secrets' 칸에 선생님이 알려준 형식대로 키를 넣어요. 코드에는 키를 적지 않아요.

배포 전 체크 — requirements.txt

배포하려면 "이 앱은 어떤 라이브러리가 필요해요"를 알려주는 목록 파일이 있어야 해요. 없으면 AI에게 "이 앱의 requirements.txt를 만들어줘"라고 요청하세요.

requirements.txt
streamlit
openai
📸 스크린샷 자리
Streamlit Community Cloud에서 저장소를 고르고 Deploy를 누르는 화면
📝 Repository / Branch / Main file path 입력란이 보이도록 캡처
📸 스크린샷 자리
배포 설정의 Secrets 칸에 키를 넣는 화면
📝 실제 키 값은 가린 채로(●●●●) 위치와 형식만 보이게 — 키 노출 주의

🃏 선택지 카드 — 배포 전 마지막 다듬기

배포하기 전, 앱을 하나만 더 다듬어 봅시다. 하나를 골라 AI에게 요청해 보세요.

A
사용 안내
앱 위에 사용법을 한 줄로
난이도 ★☆☆
→ "앱 위에 사용법을 한 줄로 안내해줘"
B
제목·아이콘
어울리는 제목과 이모지 넣기
난이도 ★★☆
→ "앱에 어울리는 제목과 이모지를 넣어줘"
C
빈 화면 처리
입력이 비면 안내 메시지
난이도 ★★☆
→ "입력이 비어 있으면 안내 메시지를 보여줘"
D
모바일 보기
폰 화면에서도 깔끔하게
난이도 ★★★
→ "폰 화면에서도 깔끔하게 보이게 정리해줘"
E
나만의 아이디어!
위에 없는 다듬기를 직접 떠올려 AI에게 요청하기
📱 완성!

배포가 끝나면 https://...streamlit.app 주소가 생겨요. 폰으로 직접 열어 보고, 친구에게도 보내 실제로 써보게 하세요. 내가 만든 서비스가 인터넷에 올라가 있는 거예요.

📸 스크린샷 자리
완성된 앱을 폰 브라우저로 접속한 화면
📝 PC와 폰을 나란히 두면 '어디서나 열린다'가 잘 전달됨
⚠️ 자주 하는 실수
  • 흰 화면/에러가 떠요 → 대부분 requirements.txt 누락 또는 Secrets에 키를 안 넣어서예요.
  • GitHub에 .env(키) 파일을 올리면 절대 안 돼요 → 키는 배포 화면의 Secrets에만.
  • 코드를 다시 올렸는데 앱이 그대로면 → 잠시 기다리거나 'Reboot'을 눌러요.
🔒 힌트 — 배포한 앱에서 에러가 떠요

가장 흔한 원인 두 가지예요.

requirements.txt 누락 — AI에게 "이 앱의 requirements.txt를 만들어줘"라고 요청해 저장소에 추가.

Secrets 미설정 — 배포 설정의 Secrets 칸에 키를 넣었는지 확인. 형식은 선생님 안내를 따르세요.

보너스 미션

더 해보고 싶다면

미션 3까지 끝내고 시간이 남는다면 도전해 보세요. 끝내지 못해도 괜찮습니다.

보너스 ① 방문자 추적

앱에 몇 명이 다녀갔는지 세는 사용 카운터를 붙여 봅니다.

💬 이렇게 입력해 보세요
내 앱에 사용 횟수를 세는 카운터를 추가해줘.
app.py (사용 카운터 예시)
# 세션 안에서 사용 횟수 기억하기
if "count" not in st.session_state:
    st.session_state.count = 0

if st.button("사용하기"):
    st.session_state.count += 1

st.caption(f"지금까지 {st.session_state.count}번 사용했어요!")

보너스 ② 가이드 페이지

앱 사용법을 접었다 펼 수 있는 안내 영역을 만들어 봅니다.

💬 이렇게 입력해 보세요
앱에 '사용법' 안내 영역을 접었다 펼 수 있게 추가해줘. (st.expander 사용)
🎯 성공 기준
사용 카운터 숫자가 올라가거나, 접었다 펼 수 있는 사용법 안내가 화면에 보이면 성공이에요.
정리

오늘의 핵심 정리

1️⃣
완성
피드백을 내 힘으로 반영해 앱을 완성했다
2️⃣
이해
디버깅하고 코드 구조(입력·처리·출력)를 파악했다
3️⃣
배포
인터넷에 배포해 실사용 테스트까지 마쳤다
📌 다음 주 예고

다음 주(8주차)는 Notion으로 포트폴리오를 세팅합니다. 지금까지 만든 베스트 작품을 정리하고, 자율 프로젝트 기획서를 준비해요. 완성한 앱 주소를 가족·친구에게 공유하고 사용 후기를 한 줄 받아오세요.

🔧 막혔을 때 — 자가 디버깅 4단계

에러가 떠도 당황하지 마세요. 선생님께 묻기 전에 이 순서대로 스스로 해결해 봅니다.

1
에러 메시지 읽기
빨간 글자에서 '몇 번째 줄'과 '무슨 에러'인지 찾아본다.
2
AI에게 보여주기
에러 메시지를 복사해서 "이 에러를 수정해줘"라고 AI에게 요청한다.
3
고쳐서 다시 실행
AI가 준 수정 코드를 적용하고 다시 실행해 본다.
4
선생님께 질문
그래도 안 되면 '에러 메시지 + 내가 시도한 것'을 함께 설명한다.