다행이도 Streamlit은 지난 플젝에서도 사용했고 FastAPI와 함께 미리 조금씩 공부해둔 덕분에 수업을 무난히 따라갈 수 있었다. 근데 생각보다 기능이 많아서 놀랐다. 확실히 머신러닝 관련 프로토타입 간단히 만들기엔 이것만큼 좋은 게 없는 것 같다.
학습시간 09:00~01:00(당일16H/1910H)
A. 클라이언트(Client)
B. 서버(Server)
C. 요청과 응답(Request & Response)
# 간단한 클라이언트-서버 상호작용 개념
import torch
# Client-side (사용자 요청)
def send_request(data):
print(f"서버에 데이터 요청: {data}")
# 서버로 데이터 전송하는 로직 (가정)
return get_response_from_server(data)
# Server-side (서버 응답)
def get_response_from_server(request_data):
# 요청 데이터를 파이토치 텐서로 변환
tensor = torch.tensor(request_data)
# 간단한 연산 후 결과 반환
result = tensor * 2
print(f"클라이언트에 결과 응답: {result}")
return result
# 실행
user_data = [1, 2, 3]
server_response = send_request(user_data)
| 구분 | 역할 | 주요 기술 예시 |
|---|---|---|
| 클라이언트 | 사용자 인터페이스(UI), 사용자 경험(UX) 제공 | React, Angular, Vue.js |
| 서버 | 데이터 처리, 저장, 비즈니스 로직 수행 | Node.js, Django, Flask |
A. 웹 프레임워크란?
B. 종류
C. 2024년 인기 웹 프레임워크
D. 웹사이트 기술 스택 확인법
| 프레임워크 | 종류 | 2024년 사용률 |
|---|---|---|
| Node.js | Backend/Full-stack | 40.8% |
| React | Frontend | 39.5% |
| Django | Backend | 12% |
| Flask | Backend | 12.9% |
A. Streamlit이란?
B. 장점
C. 단점
D. 추천 용도
# Streamlit 기본 코드
import streamlit as st
import torch
st.title("파이토치 텐서 출력 예제 📝")
# 파이토치 텐서 생성
tensor = torch.rand(3, 4)
st.write("아래는 랜덤하게 생성된 파이토치 텐서:")
st.write(tensor) # st.write는 다양한 형태의 데이터를 출력 가능
| 구분 | 내용 |
|---|---|
| 장점 | 쉬운 구현, 빠른 프로토타이핑 |
| 단점 | 성능 한계, 커스텀 제약, 리소스 제한 |
| 적합 용도 | 간단한 대시보드, 모델 서빙 테스트 |
A. 설치 및 가상 환경 설정
pip install streamlitpython -m venv myenvmyenv\Scripts\activatesource myenv/bin/activatedeactivateB. 실행 방법
streamlit run 파일명.pystreamlit run 파일명.py --server.port 8501C. VSCode 팁
simple browser: show 확장 기능으로 실시간 디버깅 가능copilot completions 기능 비활성화# 터미널 명령어 예시 (실행 X)
# 1. 가상환경 생성 및 활성화
python -m venv .venv
source .venv/bin/activate
# 2. 라이브러리 설치
pip install streamlit torch
# 3. Streamlit 앱 실행 (8502번 포트 사용)
streamlit run my_app.py --server.port 8502
print("터미널에서 위 명령어들을 순서대로 입력하여 환경 설정 및 실행")
| 명령어 | 설명 |
|---|---|
pip install streamlit | Streamlit 라이브러리 설치 |
python -m venv myenv | myenv라는 이름의 가상 환경 생성 |
streamlit run app.py | app.py 파일을 Streamlit 앱으로 실행 |
--server.port 8501 | 앱 실행 포트를 8501로 지정 |
A. 텍스트 입력
st.title, st.header: 제목, 부제목 표시st.write, st.markdown: 일반 텍스트 및 마크다운 표시st.code: 코드 블록 표시st.magic: 변수나 문서를 자동으로 마크다운처럼 표시B. 그래프
st.line_chart, st.bar_chart, st.area_chart, st.scatter_chart 등 다양한 차트 지원C. 위젯 (Widgets)
st.button, st.checkbox: 버튼, 체크박스st.text_input, st.slider: 텍스트 입력, 슬라이더st.file_uploader, st.camera_input: 파일 업로드, 카메라 입력st.selectbox: 드롭다운 선택 메뉴D. 레이아웃
st.sidebar: 사이드바 영역 생성st.columns: 화면을 여러 열로 분할st.form: 여러 위젯을 하나의 폼으로 묶어 제출 버튼 생성E. 캐싱 및 세션 관리
@st.cache_data: 반환값이 변하지 않는 함수 결과를 캐싱하여 속도 향상st.session_state: 사용자 세션 간 데이터 유지import streamlit as st
import torch
import torch.nn as nn
st.title("간단한 파이토치 모델 테스트 ⚙️")
# 세션 상태 초기화
if 'model' not in st.session_state:
# 간단한 선형 모델을 세션에 저장
st.session_state.model = nn.Linear(10, 1)
# 사이드바에서 입력값 받기
with st.sidebar:
st.header("입력 옵션")
input_value = st.slider("입력 텐서의 표준편차", 0.1, 1.0, 0.5)
# 메인 화면
st.write("모델 구조:")
st.code(str(st.session_state.model))
if st.button("랜덤 텐서로 예측 실행"):
# 랜덤 텐서 생성
input_tensor = torch.randn(1, 10) * input_value
# 예측
with torch.no_grad():
output = st.session_state.model(input_tensor)
st.write("예측 결과:")
st.success(output.item())
| 기능 종류 | 주요 함수 |
|---|---|
| 텍스트 | st.title, st.header, st.write, st.code |
| 그래프 | st.line_chart, st.bar_chart, st.plotly_chart |
| 위젯 | st.button, st.slider, st.text_input, st.file_uploader |
| 레이아웃 | st.sidebar, st.columns, st.form |
| 상태 관리 | @st.cache_data, st.session_state |
A. 배포 절차
B. 특징
requirements.txt 파일이 필수는 아님# GitHub Actions를 사용한 자동 배포 workflow 예시 (.github/workflows/deploy.yml)
# name: Streamlit App CI/CD
# on:
# push:
# branches: [ main ]
# jobs:
# build:
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v2
# - name: Set up Python
# uses: actions/setup-python@v2
# with:
# python-version: '3.9'
# - name: Install dependencies
# run: |
# python -m pip install --upgrade pip
# pip install -r requirements.txt
# # 여기에 배포 관련 스크립트 추가 (e.g., to Streamlit Cloud, AWS, GCP...)
# - name: Deploy to Cloud
# run: echo "Deploying to production server..."
print("GitHub에 코드 push 시 자동으로 배포하는 CI/CD 파이프라인 개념도")
| 단계 | 작업 내용 |
|---|---|
| 1 | Streamlit Cloud 가입 |
| 2 | GitHub 공개 저장소에 코드 업로드 |
| 3 | Streamlit Cloud와 GitHub 저장소 연동 및 앱 생성 |
A. 고려사항
B. 주요 관리 항목
# 기본적인 웹 앱용 Dockerfile 예시
# 베이스 이미지 선택 (Python 3.9)
FROM python:3.9-slim
# 작업 디렉토리 설정
WORKDIR /app
# 의존성 파일 복사 및 설치
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 소스 코드 복사
COPY . .
# 앱 실행 포트 노출
EXPOSE 8501
# 앱 실행 명령어
CMD ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"]
print("Streamlit 앱을 Docker 이미지로 만들기 위한 Dockerfile 예시")
| 관리 항목 | 설명 | 주요 도구/서비스 |
|---|---|---|
| CI/CD | 코드 빌드, 테스트, 배포 자동화 | Docker, GitHub Actions, Jenkins |
| 버전 관리 | 코드 변경 이력 추적 및 협업 | Git, GitHub, GitLab |
| 인프라 | 도메인, 네트워크, 서버 등 설정 | AWS, GCP, Azure |
| 모니터링 | 리소스 사용량 및 장애 발생 추적 | Prometheus, Grafana, Sentry |