AI 파이썬 Lab · 심화 · 9주차
심화 · 자율 프로젝트

자율 프로젝트 ① 착수

이제 정해진 미션이 아니라, 내가 정한 프로젝트예요. 오늘 목표는 '완성'이 아니라 핵심 기능 하나가 도는 것입니다.

오늘의 목표

오늘 배우는 것

자율 프로젝트 첫날이에요. 오늘부터는 정답을 알려주기보다 막힌 곳을 함께 푸는 코칭 시간입니다. 속도는 사람마다 달라도 괜찮아요.

🎯
GOAL 1
만들 것을 확정하고 핵심 기능 1개를 정한다
🦴
GOAL 2
핵심 기능 하나가 도는 기본 골격(MVP)을 만든다
📝
GOAL 3
오늘의 진행 상황을 노션에 기록한다
새 개념 ①

MVP (최소 기능 제품)란?

핵심 기능 하나만 들어간 '가장 작은 완성품'이에요. 영어로 Minimum Viable Product의 줄임말이죠. 모든 기능을 한 번에 만들지 않고, 가장 중요한 한 조각부터 돌아가게 만드는 거예요.

🦴
MVP (최소 기능 제품)
핵심 기능 하나만 들어간 가장 작은 완성품 (Minimum Viable Product).
왜 이렇게 할까? 그림을 그릴 때도 밑그림부터 그리죠? 밑그림이 이상하면 바로 알고 고칠 수 있어요. 다 색칠한 다음엔 고치기 힘들어요.
🏠 비유: 집 짓기
집을 지을 때 기둥과 골격(MVP)부터 세워요. 벽지·가구 같은 인테리어는 나중이죠. 골격이 튼튼해야 그 위에 무엇이든 올릴 수 있어요. 프로젝트도 똑같아요.
새 개념 ②

핵심 기능 vs 부가 기능

프로젝트를 만들 때 넣고 싶은 기능은 늘 많아요. 하지만 그중에는 없으면 앱이 아예 안 되는 것있으면 좋지만 없어도 되는 것이 섞여 있어요. 이 둘을 구분하는 게 오늘 가장 중요한 판단이에요.

🍚
핵심 기능
이 기능이 없으면 프로젝트 자체가 성립하지 않는, 가장 중요한 동작 1개.
왜 먼저 만들까? 핵심이 안 되면 나머지를 아무리 꾸며도 소용없어요.
🥗
부가 기능
있으면 더 편하고 좋지만, 없어도 프로젝트가 굴러가는 나머지 기능들.
왜 나중일까? 핵심이 돌아간 다음에 하나씩 추가해도 늦지 않아요.
🍽️ 비유: 밥상 차리기
저녁 밥상에 밥과 국(메인)이 없으면 밥상이 아니에요. 반찬이 아무리 많아도요. 반대로 밥과 국만 있어도 밥상은 밥상이에요. 반찬(부가 기능)은 나중에 하나씩 놓아도 돼요. 내 프로젝트의 '밥과 국'이 무엇인지부터 정하는 거예요.
개념

한꺼번에 다 만들지 않는다

오늘의 전략은 단순해요. 핵심 정하기 → 그것만 먼저 → 점점 키우기. 이 순서를 지키면 막막한 프로젝트도 한 걸음씩 나아갈 수 있어요.

1
핵심 정하기
"이건 ___해주는 앱"의 빈칸이 바로 핵심이에요.
2
그것만 먼저
핵심 기능 1개가 작동하는 것에만 집중해요. 나머지는 메모만.
3
점점 키우기
핵심이 돌아가면, 다음 시간에 기능을 하나씩 더해요.
🧭 막히면 이 순서로

오늘부터는 코칭 시간이에요. 막히면 ① 자가 디버깅 → ② AI에게 질문 → ③ 선생님과 의논 순서로 해보세요.

미션 1

기획 확정 + 핵심 기능 정하기

🎯 목표: 만들 것을 확정하고, 가장 먼저 만들 핵심 기능 1개를 고른다.

이렇게 진행해요

1
지난주 기획서 다시 보기
8주차에 쓴 기획서 초안을 꺼내 읽어요.
2
선생님과 1:1 범위 점검
"이걸 2주에 만들 수 있나?"를 함께 확인해요. 너무 크면 줄여요.
3
핵심 기능 + 재료 확인
핵심 기능 1개와, 필요한 재료(API·데이터)를 정해요.
🎯 핵심 기능 고르는 법
"이건 ___해주는 앱"의 빈칸을 채워 보세요. 그 빈칸이 바로 핵심 기능이에요. 예: "이건 오늘 할 일을 정리해주는 앱" → 핵심은 '할 일 추가·보기'.
⚠️ 자주 하는 실수
  • 기능을 다 만들려 욕심냄 → 핵심 하나만. 나머지는 노션에 메모만 해둬요.
  • 핵심을 못 고름 → "이건 ___해주는 앱"의 빈칸을 먼저 채워 보세요.
📸 결과 미리보기
AI로 구현한 프로젝트 골격(첫 동작) 화면
미션 2

핵심 기능 하나 작동시키기

🎯 목표: AI와 함께 핵심 기능 1개가 실제로 도는 기본 골격을 만든다.
✏️ 먼저 스스로 해보기
내 핵심 기능은 무엇을 하나?
코드를 짜기 전에 정리해 보세요.
① 내 핵심 기능이 '입력 → 처리 → 출력' 중 무엇을 하는지 적어 보세요.
② AI에게 보낼 첫 요청을 한 문장으로 먼저 적어 보세요.

AI에게 골격 요청하기

🔑 .env 파일, 그대로 이어서 써요

AI를 부르는 핵심 기능이라면 이전 주차에 만든 .env 파일을 그대로 사용하면 돼요. 새 프로젝트 폴더에서 처음 만든다면 아래처럼 준비해요.

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

터미널
# Windows
New-Item .env

# Mac
touch .env

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

.env
OPENAI_API_KEY=여기에_선생님이_알려준_키_붙여넣기
⚠️ .env 작성 주의
  • 키 앞뒤에 공백·따옴표 없이 딱 붙여서 저장해요.
  • = 양옆에도 띄어쓰기를 넣지 않아요.
  • .env 파일은 app.py같은 폴더에 있어야 해요.
  • .envGitHub에 올리지 않아요 (배포할 땐 Secrets 칸에만 넣어요).

준비됐다면, 디자인은 나중으로 미루고 핵심 기능부터 직접 작동시켜 보세요.

골격은 보통 이런 모양이에요

대부분의 앱은 입력 → 처리 → 출력 세 부분으로 되어 있어요. AI가 준 코드에서도 이 세 부분을 찾을 수 있으면 충분해요. (키는 코드에 직접 쓰지 않고 .env / st.secrets에서 자동으로 불러와요.)

app.py — 핵심 기능 골격(MVP)
import streamlit as st
from openai import OpenAI

client = OpenAI()   # 키는 .env / st.secrets에서 자동으로

def ask_ai(prompt):
    res = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": prompt}]
    )
    return res.choices[0].message.content

st.title("내 프로젝트")

# ① 입력 ─ 사용자에게서 받는다
user_input = st.text_input("무엇을 도와줄까요?")

# ② 처리 ─ 핵심 기능 (여기선 AI 호출)
if st.button("실행"):
    result = ask_ai(user_input)
    # ③ 출력 ─ 결과를 화면에
    st.write(result)
▸ 브라우저 화면
내 프로젝트
무엇을 도와줄까요? [ 내일 할 일: 수학 숙제, 영어 단어 20개 외우기, 방 청소 ]
[ 실행 ]

네, 내일 할 일 3가지를 확인했어요! 목록에 추가했습니다.
1. 수학 숙제
2. 영어 단어 20개 외우기
3. 방 청소

이 중에서 먼저 하고 싶은 일이 있으면 알려주세요.
⚠️ 자주 하는 실수
  • 한 번에 다 만들려다 막힘 → 동작 하나만 먼저 작동시켜요.
  • 코드 이해 없이 넘어감 → AI에게 "한 줄씩 설명해줘"라고 요청해요.
  • 오늘 못 끝냄 → 정상이에요. 어디까지 됐는지 기록만 해두면 돼요.
🔒 힌트 — 어디서부터 손대야 할지 모르겠어요

핵심 기능을 입력 → 처리 → 출력 세 칸으로 먼저 나눠 적어 보세요.

입력: 사용자에게 무엇을 받나? (글자·선택·숫자)
처리: 받은 걸로 무엇을 하나? (AI 호출·계산·검색)
출력: 결과를 어떻게 보여주나? (글·표·이미지)

이 세 칸을 그대로 AI에게 알려주면, 골격 코드를 훨씬 정확하게 받을 수 있어요.

미션 3

오늘 한 일 노션에 남기기

🎯 목표: 오늘의 진행 상황과 다음 할 일을 노션에 기록하고, 이어서 갈 방향을 정한다.

딱 3줄만 기록해요

1
한 일
오늘 어디까지 만들었나?
2
막힌 점
무엇이 안 됐나? (다음에 이어서 풀 부분)
3
다음 할 일
다음 시간에 무엇부터 할까?

작동 화면 캡처도 함께 붙이면, 다음 시간에 한눈에 떠올릴 수 있어요.

🃏 선택지 카드 — 다음에 이어서 갈 방향

핵심이 돌아간다면, 다음엔 어디로 갈까요? 하나를 골라 AI에게 요청해 보세요.

A
두 번째 기능 추가
핵심은 두고 새 기능 하나를 더하기
난이도 ★☆☆
→ "기존 기능은 그대로 두고 [두 번째 기능]을 추가해줘"
B
화면 꾸미기
기능은 그대로, 화면을 보기 좋게
난이도 ★★☆
→ "기능은 그대로 두고 화면 디자인을 더 보기 좋게 다듬어줘"
C
데이터 저장
입력한 내용이 사라지지 않게
난이도 ★★☆
→ "입력한 내용이 사라지지 않게 저장·불러오기 기능을 더해줘"
D
외부 연결
공개 API·데이터를 연결해 확장
난이도 ★★★
→ "공개 API나 데이터를 연결해 기능을 확장해줘"
E
나만의 방향!
위에 없는 나만의 다음 단계를 직접 정하기
⚠️ 자주 하는 실수
  • 기록이 귀찮아 건너뜀 → 딱 3줄이면 다음 시간의 나를 구해줘요.
  • 새 기능 추가 시 "기존 기능은 그대로 두고"를 빠뜨림 → 그러면 만들던 게 사라질 수 있어요.
보너스 미션

상황별 가이드

자율 프로젝트는 속도가 사람마다 달라도 괜찮아요. 내 상황에 맞는 쪽을 골라 보세요.

보너스 ① 두 번째 기능 도전 (빠른 학생)

핵심이 다 됐다면 두 번째 기능에 도전해 보세요. 기존 코드 아래에 이어서 새 기능만 추가하면 돼요.

app.py — 기존 기능 + 두 번째 기능 추가
# 기존 핵심 기능은 그대로 둔다
st.title("내 프로젝트")
user_input = st.text_input("무엇을 도와줄까요?")
if st.button("실행"):
    result = ask_ai(user_input)
    st.write(result)

# ↓ 두 번째 기능은 그 아래에 새로 추가
st.divider()
st.subheader("두 번째 기능")
# 예: 지금까지 입력한 걸 목록으로 모아 보여주기
if "history" not in st.session_state:
    st.session_state.history = []
if user_input:
    st.session_state.history.append(user_input)
st.write(st.session_state.history)
웹앱 화면 — 두 번째 기능 목록
웹앱 화면 — 기존 핵심 기능(입력창·실행 결과) 아래에 구분선과 "두 번째 기능" 제목, 지금까지 입력한 내용이 목록으로 쌓여 보이는 화면을 캡처

보너스 ② 화면 다듬기 (빠른 학생)

기능은 그대로 두고 화면·디자인을 보기 좋게 정리해요.

🐢 진도가 막혔다면

1
더 작게 쪼개기
핵심 기능을 더 작은 단계로 나눠 하나씩.
2
에러를 그대로 보여주기
에러 메시지를 복사해 AI에게 그대로 보여줘요.
3
선생님께 코칭 요청
"여기까지 했고 이게 안 돼요"라고 설명해요.
🎯 성공 기준
핵심 기능 1개가 돌아가고 진행이 노션에 기록되면 오늘은 대성공이에요. 완성은 다음 주에 하면 됩니다.
정리

오늘의 핵심 정리

1️⃣
확정
프로젝트를 확정하고 핵심 기능 1개를 정했다
2️⃣
골격
핵심 기능 하나가 도는 기본 골격(MVP)을 만들었다
3️⃣
기록
진행 상황을 노션에 남겨 다음을 준비했다
📌 다음 주 예고

다음 주는 자율 프로젝트 ② 완성이에요. 오늘 만든 골격에 기능을 더해 MVP를 완성하고, 테스트 후 발표를 예행연습합니다. 오늘 막힌 부분을 한 번 더 시도하고, 이어갈 부분을 노션에 정리해 오세요.

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

자율 프로젝트에선 스스로 푸는 힘이 가장 중요해요. 막히면 이 순서대로 해봅니다.

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