Week 3 실습 - Streamlit GUI

📖 개념 먼저 읽고 오셨나요? → Streamlit 가이드


이번 주 목표

Week 2에서 CLI로 했던 작업을 GUI로 바꿔보고,
Streamlit이 CLI보다 진짜로 유리한 상황이 어디인지 체감합니다.

Week 2 복습:  터미널 → 명령어 → 결과 (텍스트)
Week 3 목표:  브라우저 → 클릭/드래그 → 결과 (시각화)

실습 전 준비

패키지 설치 (최초 1회)

# 실습 폴더로 이동
cd C:\Developer\vibe-coding\tutorials\week03-gui

# 가상환경 생성 및 활성화
python -m venv .venv
.venv\Scripts\activate

# 패키지 설치
pip install streamlit pandas plotly pillow python-dotenv

Streamlit 실행 방법

streamlit run app.py
# 브라우저가 자동으로 열립니다 (http://localhost:8501)

코드를 수정하면 브라우저에서 Rerun 버튼을 누르거나 저장하면 자동 반영됩니다.


🛠️ 도구 탐색 — AI에게 먼저 물어보기

각 Phase를 시작하기 전, “어떤 패키지를 써야 하나요?” 를 AI에게 물어보는 것부터 시작하세요.
이게 바이브코딩의 핵심 습관입니다.

Python으로 [내가 하고 싶은 것]을 웹 앱으로 만들고 싶어.
코드를 잘 모르는 초보자도 쉽게 쓸 수 있게 하려면
어떤 라이브러리 조합이 좋을지 추천해줘.
설치 방법도 알려줘.

🎯 Phase 1 — 워터마크 GUI (CLI → GUI 전환)

목표: Week 2 미션 5에서 CLI로 했던 워터마크 처리를 브라우저 앱으로 만들기
핵심 질문: CLI 1줄 vs GUI 앱 — 어느 게 더 편한가? 언제?

Phase 1-A: 기본 앱 구현

AI에게 요청하세요:

Streamlit 앱을 만들어줘.

[기능]
- 이미지 파일을 업로드하면 "Confidential" 워터마크를 추가해서
  미리보기로 보여주고, 다운로드 버튼을 제공해줘

[조건]
- 이미지 처리는 Pillow(PIL) 사용
- 워터마크는 대각선으로 반투명하게 3곳에 찍기
- 파일명: app.py

실행 확인:

streamlit run app.py

체크포인트

  • 이미지 업로드가 되는가?
  • 워터마크가 찍힌 결과가 미리보기로 보이는가?
  • 다운로드 버튼이 동작하는가?

Phase 1-B: 옵션 추가

AI에게 추가 요청하세요:

앱에 아래 옵션을 추가해줘.

[추가 기능]
1. 워터마크 텍스트를 직접 입력할 수 있게 해줘 (기본값: "Confidential")
2. 이미지를 여러 장 한 번에 업로드해서 일괄 처리하고
   ZIP으로 다운로드할 수 있게 해줘

체크포인트

  • 텍스트 입력창이 나타나는가?
  • 여러 파일을 한 번에 올릴 수 있는가?
  • ZIP 다운로드가 동작하는가?

잠깐, CLI vs GUI 비교해보기

  Week 2 CLI Week 3 GUI
10개 일괄 처리 python apply_watermark.py all 업로드 → 버튼 1번
텍스트 변경 코드 수정 필요 입력창에 타이핑
결과 미리보기 탐색기에서 직접 열기 앱에서 바로 확인
동료에게 공유 스크립트 파일 전달 URL 하나 전달

💡 CLI가 더 나은 경우: 자동화 스케줄링, 1000개 이상 대량 처리
GUI가 더 나은 경우: 비개발자 동료와 협업, 결과 즉시 확인이 필요한 경우


🎯 Phase 2 — 실험 데이터 뷰어

목표: 엑셀로 열어서 눈으로 훑던 작업을 Streamlit으로
핵심 질문: 엑셀 대비 Streamlit이 진짜 빠른 게 맞나?

실습 데이터 위치:

tutorials/week03-gui/data/
├── stability_week01.csv  (80행)
├── stability_week02.csv  (80행)
├── stability_week03.csv  (80행, 이상값 포함)
└── stability_week04.csv  (80행, 이상값 포함)

데이터 구조:

컬럼 내용
sample_id 샘플 ID (S-A~D 계열)
pH 산성도 (week3에 이상값 3개)
viscosity 점도 (week4에 급락 2개)
color_delta 색 변화량
temperature 보관 온도
humidity 보관 습도

Phase 2-A: 기본 데이터 뷰어

기존 app.py를 그대로 두고 새 파일로 시작하세요.

AI에게 요청하세요:

Streamlit 앱을 만들어줘.

[기능]
- CSV 파일을 업로드하면 표로 보여줘
- 전체 행 수, 컬럼 목록, 결측값(NaN)이 있는 컬럼과 개수를
  자동으로 표시해줘
- 결측값이 있는 행은 표에서 노란색으로 강조해줘

[조건]
- pandas로 CSV 읽기
- 파일명: qc_app.py

실행:

streamlit run qc_app.py

stability_week03.csv를 올려서 확인해보세요.

체크포인트

  • 표가 나타나는가?
  • 결측값이 있는 컬럼이 자동으로 표시되는가?
  • 결측값 행이 노란색으로 강조되는가?

Phase 2-B: 시각화 추가

AI에게 추가 요청하세요:

앱에 그래프 기능을 추가해줘.

[추가 기능]
1. X축과 Y축 컬럼을 드롭다운으로 선택할 수 있게 해줘
2. 선택하면 plotly로 선 그래프를 그려줘
3. 이상값(평균에서 표준편차 3배 이상 벗어난 값)이 있으면
   그래프에 빨간 점으로 표시해줘

stability_week03.csv에서 Y축에 pH를 선택해보면 이상값(5.x대)이 빨간 점으로 나타납니다.

체크포인트

  • 드롭다운에서 컬럼을 선택할 수 있는가?
  • 그래프가 그려지는가?
  • 이상값이 빨간 점으로 표시되는가?

Phase 2-C: 여러 파일 비교

AI에게 추가 요청하세요:

앱에 파일 비교 기능을 추가해줘.

[추가 기능]
- CSV 파일을 여러 개 동시에 업로드할 수 있게 해줘
- 각 파일에서 같은 컬럼을 선택하면 한 그래프에 겹쳐서 보여줘
  (파일마다 다른 색으로)
- 파일별로 이상값 개수를 요약 표로 보여줘

stability_week01.csv ~ week04.csv 4개를 올리고 pH 컬럼을 선택해보세요.
week3~4에서 이상값이 집중되는 게 한눈에 보입니다.

체크포인트

  • 파일 여러 개 업로드가 되는가?
  • 같은 그래프에 여러 선이 겹쳐서 그려지는가?
  • 파일별 이상값 개수 요약이 표로 나타나는가?

🎯 Phase 3 — LLM 연동 (AI 분석 맛보기)

목표: 데이터를 눈으로 보는 것에서 AI가 해석해주는 것으로
핵심 질문: LLM이 데이터를 얼마나 잘 읽어내는가?

API 키 설정

먼저 .env 파일을 만드세요:

GOOGLE_API_KEY=여기에_Gemini_API_키_입력

API 키 발급: Google AI Studio


Phase 3-A: AI 분석 버튼 추가

AI에게 추가 요청하세요:

앱에 AI 분석 기능을 추가해줘.

[추가 기능]
- "AI 분석" 버튼을 만들어줘
- 버튼을 누르면 현재 데이터의 요약 정보(행 수, 컬럼별 평균,
  이상값 위치, 결측값 현황)를 Gemini API에 보내서
  한국어로 특이사항과 주의할 점을 해석해달라고 요청해줘
- 결과는 버튼 아래에 텍스트로 표시해줘
- API 키는 .env 파일에서 불러와줘

[조건]
- 어떤 Gemini 모델을 써야 할지 모르겠어. 최신 경량 모델로 추천해줘.

💡 마지막 줄이 포인트입니다. “어떤 모델을 써야 할지 모르겠어”라고 AI에게 물어보면
모델명을 직접 찾아서 코드에 넣어줍니다. 패키지 탐색과 같은 패턴이에요.

체크포인트

  • “AI 분석” 버튼이 나타나는가?
  • 버튼을 누르면 로딩 후 텍스트가 나타나는가?
  • 이상값이나 결측값에 대한 언급이 있는가?

Phase 3-B: 보고서 초안 생성

AI에게 추가 요청하세요:

앱에 보고서 초안 생성 기능을 추가해줘.

[추가 기능]
- "주간 보고 초안 생성" 버튼을 만들어줘
- 버튼을 누르면 분석 결과를 바탕으로
  팀장에게 보고하는 슬랙 메시지 형태로 작성해줘
  (파일명, 이상값 건수, 주요 특이사항, 후속 조치 제안 포함)
- "복사하기" 버튼도 같이 만들어줘

체크포인트

  • 보고 초안 텍스트가 생성되는가?
  • 데이터 내용(이상값 위치 등)이 실제로 반영되어 있는가?
  • 복사 버튼이 동작하는가?

📋 실습 흐름 요약

[Phase 1] 워터마크 GUI
    CLI에서 이미 해봄 → GUI로 바꾸면 뭐가 달라지나?
    → 비개발자 동료에게 URL 하나로 공유 가능

[Phase 2] 데이터 뷰어
    엑셀로 하나씩 열어보던 것 → 업로드 즉시 이상값 자동 감지
    → 4개 파일 비교를 그래프 한 장으로

[Phase 3] LLM 연동
    눈으로 읽던 것 → AI가 요약해서 보고 초안까지
    → "버튼 클릭 = 슬랙 메시지 완성"

💡 AI 요청 시 자주 쓰는 패턴

기능 추가할 때:

기존 앱에 [기능]을 추가해줘.
현재 코드는 이거야: [코드 붙여넣기]

에러가 났을 때:

아래 에러가 났어. 고쳐줘.
[에러 메시지 그대로 붙여넣기]

모르는 패키지를 써야 할 때:

[하고 싶은 것]을 Python으로 하려면 어떤 라이브러리를 써야 해?
초보자가 쓰기 쉬운 걸로 추천해줘.

🔗 다음 단계

Phase 2에서 파일 4개를 업로드해서 비교했는데,
이걸 자동으로 합쳐서 분석하려면 pandas가 필요합니다.
Week 4 실습