Streamlit 애플리케이션 구조 이해

Streamlit 애플리케이션 구조 이해

Streamlit
Streamlit 애플리케이션 구조 이해
Author

gabriel yang

Published

September 9, 2024


Streamlit은 데이터를 시각화하고 대화형 웹 애플리케이션을 간편하게 만들 수 있는 파이썬 기반 프레임워크입니다.

복잡한 웹 개발 없이 데이터 분석, 머신러닝 모델 배포, 실시간 대시보드 등을 손쉽게 구현할 수 있죠.

1. Streamlit 애플리케이션의 기본 개념

Streamlit 애플리케이션은 단순히 파이썬 스크립트로 작성되며, 실행 시 해당 스크립트를 웹 애플리케이션으로 변환합니다. 즉, 파이썬 파일 내에 작성된 모든 코드는 위에서 아래로 순차적으로 실행되며, 화면에 그 결과가 바로 반영됩니다.

기본 구조 예시

import streamlit as st

# 제목 추가
st.title("Streamlit 애플리케이션 구조 이해하기")

# 간단한 텍스트 추가
st.write("이 애플리케이션은 Streamlit의 기본 구조를 설명합니다.")

# 슬라이더로 입력받기
user_input = st.slider("값을 선택하세요:", 0, 100, 50)

# 선택된 값 출력
st.write(f"선택된 값: {user_input}")

이 예제는 Streamlit 애플리케이션의 기본적인 흐름을 보여줍니다. st.title()st.write() 함수는 사용자가 보는 페이지에 제목과 텍스트를 추가하며, st.slider() 함수는 사용자 입력을 받는 대화형 위젯을 생성합니다.

2. Streamlit의 주요 컴포넌트

Streamlit 애플리케이션을 구성하는 주요 컴포넌트는 크게 세 가지로 나눌 수 있습니다: 레이아웃 설정, 위젯, 시각화 도구. 이 세 가지를 적절히 사용해 데이터 분석 결과를 직관적으로 표현하고, 사용자와 상호작용할 수 있는 웹 애플리케이션을 만듭니다.

2.1 레이아웃 설정

Streamlit에서는 레이아웃을 간편하게 설정할 수 있습니다. 여러 열을 나누거나 사이드바를 활용해 다양한 UI 구성을 할 수 있습니다.

st.sidebar.title("사이드바 제목")
st.sidebar.write("여기에 사이드바 내용을 추가할 수 있습니다.")

2.2 위젯

Streamlit의 위젯은 대화형 애플리케이션을 만들기 위해 중요한 요소입니다. 사용자는 버튼, 슬라이더, 드롭다운 등 다양한 위젯을 통해 데이터를 입력할 수 있습니다.

  • 버튼: st.button()
  • 슬라이더: st.slider()
  • 드롭다운: st.selectbox()
  • 텍스트 입력: st.text_input()

위젯으로부터 받은 입력값은 파이썬 변수에 저장되어 이후 계산이나 시각화에 사용할 수 있습니다.

# 드롭다운 위젯
option = st.selectbox(
    '어떤 옵션을 선택하시겠습니까?',
    ('옵션 1', '옵션 2', '옵션 3'))

st.write('선택된 옵션:', option)

2.3 시각화 도구

Streamlit은 다양한 시각화 라이브러리와 쉽게 연동됩니다. Matplotlib, Plotly, Altair, 그리고 Streamlit 자체의 기본 차트 기능을 통해 데이터를 시각적으로 표현할 수 있습니다.

import matplotlib.pyplot as plt
import numpy as np

# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.sin(x)

# Matplotlib 그래프 그리기
fig, ax = plt.subplots()
ax.plot(x, y)

# Streamlit에 그래프 표시
st.pyplot(fig)

3. Streamlit의 실행 구조

Streamlit은 서버 클라이언트 구조를 따릅니다. 사용자가 애플리케이션에 접근하면 서버가 해당 애플리케이션을 실행하고 결과를 클라이언트에게 전달합니다. 기본적으로 Streamlit은 모든 코드가 위에서 아래로 한 번 실행된 후 웹 페이지에 렌더링됩니다. 사용자가 입력을 변경하면 코드가 다시 실행되어 그에 맞는 결과가 즉시 업데이트됩니다.

자동 재실행

Streamlit의 자동 재실행 기능 덕분에, 사용자가 위젯 값을 변경하면 애플리케이션이 다시 실행됩니다. 이를 통해 실시간으로 사용자의 입력에 따라 페이지 내용이 업데이트됩니다.

user_input = st.text_input("이름을 입력하세요")
st.write(f"안녕하세요, {user_input}님!")

이 코드에서 사용자가 텍스트 입력값을 변경하면 st.write() 함수가 실행되어 페이지에 새로운 결과가 나타납니다.

4. 캐싱으로 성능 최적화

Streamlit은 데이터나 계산 결과를 캐싱하여 애플리케이션 성능을 향상시킬 수 있습니다. 특히 큰 데이터셋을 처리하거나 복잡한 계산을 반복해야 할 때 유용합니다. @st.cache_data 데코레이터를 사용해 특정 함수의 결과를 캐시할 수 있습니다.

@st.cache_data
def load_data():
    # 데이터 로드 또는 복잡한 계산
    return heavy_computation()

data = load_data()
st.write(data)

이 방식은 데이터를 한 번만 로드하거나 복잡한 계산을 한 번만 수행한 후, 캐시된 결과를 재사용하게 하여 실행 속도를 크게 향상시킵니다.

결론

Streamlit은 간단한 파이썬 코드로 복잡한 데이터 애플리케이션을 쉽게 구축할 수 있는 도구입니다.

기본적인 애플리케이션 구조는 간결하지만, 위젯, 시각화 도구, 레이아웃 설정 등을 적절히 사용하면 매우 강력한 대화형 웹 애플리케이션을 만들 수 있습니다.

Streamlit을 처음 접하는 사람이라면, 이러한 기본 구조를 이해한 후 다양한 기능을 시도해 보며 애플리케이션을 확장해 나가길 권장합니다.