20250101

웹앱 Streamlit + Python

데이터 분석과 AI 프로젝트를 진행하며, 종종 빠르게 결과물을 시각화하거나 프로토타입을 만들어야 할 때가 많습니다. 이때 제가 자주 사용하는 도구가 바로 Streamlit입니다. Streamlit은 파이썬 코드 몇 줄로 손쉽게 웹 애플리케이션을 만들 수 있는 프레임워크로, 특히 데이터 시각화와 AI 모델 배포에 최적화되어 있습니다.

이번 글에서는 Streamlit의 기본 사용법부터 실전 예제까지 다뤄보겠습니다.

1. Streamlit이란?

Streamlit은 파이썬 기반의 오픈소스 웹 프레임워크로, 다음과 같은 특징을 가지고 있습니다:
  • 간단한 코드: HTML, CSS, JavaScript 없이도 파이썬 코드만으로 웹앱 제작 가능.
  • 빠른 개발: 데이터 분석 결과나 모델을 바로 시각화하여 공유 가능.
  • 다양한 위젯 지원: 슬라이더, 버튼, 체크박스 등 인터랙티브 UI 구성 가능.
  • 손쉬운 배포: Streamlit Cloud를 통해 클릭 몇 번으로 앱을 배포할 수 있음.

2. 설치 및 기본 실행

Streamlit 설치:
bash
pip install streamlit
설치 후, Streamlit의 기본 실행:
bash
streamlit hello
브라우저가 열리며 Streamlit의 기능을 체험할 수 있는 페이지가 표시됩니다.

3. 첫 번째 앱 만들기

코드 작성

아래와 같은 간단한 코드를 작성해 app.py라는 파일로 저장합니다:
python
import streamlit as st # 제목 출력 st.title("Hello, Streamlit!") st.write("이것은 Streamlit으로 만든 첫 번째 웹앱입니다.")

앱 실행

터미널에서 다음 명령어를 입력합니다:
bash
streamlit run app.py
브라우저에서 http://localhost:8501로 접속하면 앱이 실행된 것을 확인할 수 있습니다.

4. 실전 예제: 데이터 시각화 대시보드

이제 실제 데이터를 활용한 대시보드를 만들어 보겠습니다.

코드 작성

아래 코드를 dashboard.py라는 파일로 저장하세요:
python
import streamlit as st import pandas as pd import numpy as np # 제목과 설명 추가 st.title("데이터 시각화 대시보드") st.write("랜덤 데이터를 생성하여 다양한 차트를 그려봅니다.") # 랜덤 데이터 생성 data = pd.DataFrame( np.random.randn(50, 3), columns=["A", "B", "C"] ) # 데이터프레임 출력 st.subheader("데이터프레임") st.dataframe(data) # 라인 차트 출력 st.subheader("라인 차트") st.line_chart(data) # 바 차트 출력 st.subheader("바 차트") st.bar_chart(data) # 슬라이더로 데이터 필터링 st.subheader("슬라이더로 데이터 필터링") value = st.slider("표시할 데이터 개수", min_value=1, max_value=50, value=10) filtered_data = data.head(value) st.write(f"선택된 {value}개의 데이터:") st.dataframe(filtered_data)

결과 확인

위 코드를 실행하면 다음과 같은 기능을 가진 대시보드가 생성됩니다:
  1. 랜덤 데이터를 테이블 형태로 표시.
  2. 데이터를 라인 차트와 바 차트로 시각화.
  3. 슬라이더를 이용해 표시할 데이터 개수를 동적으로 조정.

5. 주요 기능 소개

Streamlit은 다양한 기능을 제공하며, 이를 활용하면 더욱 풍부한 웹앱을 제작할 수 있습니다.

(1) 텍스트 출력

  • st.title()st.header()st.subheader(): 제목 및 부제목 출력.
  • st.write(): 텍스트, 데이터프레임 등 다양한 형태의 데이터를 출력.
python
st.title("Streamlit 기능 소개") st.write("이곳에 텍스트나 데이터를 출력할 수 있습니다.")

(2) 위젯 (사용자 입력)

  • 버튼: if st.button('클릭')
  • 슬라이더: value = st.slider('슬라이더', 0, 100)
  • 체크박스: if st.checkbox('체크')
  • 선택 박스: option = st.selectbox('옵션 선택', ['A', 'B', 'C'])
python
if st.checkbox("데이터 보기"): st.write(data)

(3) 차트

  • 라인 차트: st.line_chart(data)
  • 바 차트: st.bar_chart(data)
  • 맵: st.map(data)
python
import numpy as np map_data = pd.DataFrame( np.random.randn(1000, 2) / [50, 50] + [37.76, -122.4], columns=["lat", "lon"] ) st.map(map_data)

6. 배포하기

Streamlit 앱은 로컬에서 실행하는 것뿐 아니라 클라우드에 배포하여 다른 사람들과 공유할 수도 있습니다.

GitHub와 연동하여 배포

  1. 코드를 GitHub 저장소에 업로드합니다.
  2. Streamlit Cloud에 접속해 GitHub 저장소를 연결합니다.
  3. 배포하고자 하는 브랜치와 파일 경로를 지정한 후 "Deploy" 버튼을 클릭합니다.
배포가 완료되면 고유 URL이 생성되어 누구나 접근할 수 있습니다.

7. 활용 사례

Streamlit은 다음과 같은 프로젝트에 적합합니다:
  1. 데이터 분석 대시보드: 분석 결과를 팀원들과 공유.
  2. AI 모델 데모: 머신러닝 모델의 입력값과 결과를 인터랙티브하게 보여줌.
  3. 프로토타입 제작: 복잡한 백엔드 없이 빠르게 웹앱 제작.

결론

Streamlit은 파이썬 개발자에게 웹 애플리케이션 제작의 문턱을 낮춰주는 강력한 도구입니다. 특히 데이터 분석이나 AI 모델링 결과를 빠르게 공유해야 하는 경우 유용하며, 간단한 인터페이스 덕분에 누구나 쉽게 사용할 수 있습니다.