우와한 개발자

[Python] Streamlit이란? — 설치, UI 컴포넌트, 세션 상태

by 우와한개발자

1. Streamlit이란?

1) 개요

  • 파이썬 코드만으로 웹 UI를 만들 수 있는 오픈소스 프레임워크
  • HTML, CSS, JavaScript 없이 순수 파이썬만으로 데이터 앱, 대시보드, AI 웹 애플리케이션 개발 가능
  • 2022년 Snowflake가 인수하여 현재 운영 중
  • 공식 홈페이지: https://streamlit.io/
  • API 문서: https://docs.streamlit.io/develop/api-reference

 

2) 동작 방식

  • streamlit run app.py 명령어로 로컬 서버 실행 → 브라우저에서 http://localhost:8501 접속
  • 파이썬 스크립트를 위에서 아래로 순차 실행하여 UI 렌더링
  • 사용자가 버튼 클릭, 입력 등 UI와 상호작용할 때마다 스크립트 전체가 다시 실행됨
  • 따라서 대화 이력처럼 유지가 필요한 값은 st.session_state에 저장해야 함

 

2. 설치 및 실행

  • 설치
pip install streamlit
  • app.py 예시
import streamlit as st

st.title("나의 첫 Streamlit 앱")
st.write("안녕하세요.")
  • streamlit 실행
streamlit run app.py

 

3. Streamlit이 제공하는 기능

1) 텍스트 출력

(1) 제목 / 헤더

  • st.title("텍스트") : 가장 큰 제목
  • st.header("텍스트") : 중간 제목
  • st.subheader("텍스트") : 소제목

(2) 일반 텍스트

  • st.write("텍스트") : 문자열, 숫자, DataFrame 등 대부분 출력 가능한 범용 함수
  • st.markdown("**굵게**") : 마크다운 문법 지원

(3) 상태 메시지 박스

  • st.success("성공") : 초록 박스
  • st.info("안내") : 파란 박스
  • st.warning("경고") : 노란 박스
  • st.error("오류") : 빨간 박스

 

2) 입력 컴포넌트

(1) 텍스트 입력

  • st.text_input("라벨") : 한 줄 입력창
  • st.text_area("라벨") : 여러 줄 입력창
  • st.chat_input("placeholder") : 채팅 전용 입력창. Enter 누르면 값 반환

(2) 숫자 / 선택 입력

  • st.number_input("라벨", min_value=0, max_value=100) : 숫자 입력
  • st.slider("라벨", 0, 100, 50) : 슬라이더
  • st.selectbox("라벨", ["옵션1", "옵션2"]) : 드롭다운 단일 선택
  • st.multiselect("라벨", ["옵션1", "옵션2"]) : 드롭다운 다중 선택
  • st.checkbox("동의합니다") : 체크박스. 반환값: True/False

(3) 파일 업로드

  • st.file_uploader("라벨", type=["pdf", "csv"]) : 파일 업로드 위젯
  • type 파라미터로 허용 확장자 제한 가능
  • 반환값: 업로드된 파일 객체 (없으면 None)

 

3) 버튼 및 레이아웃

(1) 버튼

  • st.button("버튼명") : 클릭 시 True 반환
  • st.download_button("다운로드", data, file_name) : 파일 다운로드 버튼

(2) 레이아웃

  • st.columns(3) : 화면을 N개 열로 분할
  • st.tabs(["탭1", "탭2"]) : 탭 UI 생성
  • st.expander("더 보기") : 클릭 시 펼쳐지는 접이식 영역
  • st.sidebar : 좌측 사이드바. st.sidebar.selectbox(...) 형태로 사용

(3) 채팅 메시지

  • st.chat_message("user") : 사용자 말풍선
  • st.chat_message("assistant") : AI 응답 말풍선

 

4) 데이터 시각화

(1) 데이터프레임 출력

  • st.dataframe(df) : 정렬/검색 가능한 인터랙티브 테이블
  • st.table(df) : 정적 테이블

(2) 차트

  • st.line_chart(data) : 선 그래프 (시계열 데이터)
  • st.bar_chart(data) : 막대 그래프 (범주형 데이터 비교)
  • st.area_chart(data) : 영역 그래프 (누적량)
  • st.scatter_chart(df, x="col1", y="col2") : 산점도 (두 변수 간 관계)
  • st.pyplot(fig) : Matplotlib 차트 출력
  • st.plotly_chart(fig) : Plotly 인터랙티브 차트 출력

 

5) 세션 상태 (Session State)

  • st.session_state : 스크립트가 재실행되어도 값을 유지하는 딕셔너리
  • 일반 변수는 상호작용마다 초기화되므로, 대화 이력 / 업로드 파일 / 로그인 상태 등은 반드시 session_state에 저장

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기