[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에 저장
'언어 > Python' 카테고리의 다른 글
| [Python] pdfplumber로 PDF 텍스트 추출하기 (0) | 2026.04.29 |
|---|---|
| [Python] IMAP으로 Gmail 메일 가져오기 - 메일 검색, 데이터 추출, 첨부파일 다운로드 (0) | 2026.04.29 |
| [Python] 데코레이터(Decorator) - @문법, functools.wraps (0) | 2026.04.21 |
| [Python] pandas로 Oracle 데이터 읽기 - read_sql, DataFrame (0) | 2026.04.19 |
| [Python] 오라클 DB 연결 - pip install oracledb / Connect, Cursor, Row 객체 (0) | 2026.04.19 |
블로그의 정보
우와한개발자 님의 블로그
우와한개발자