Technology issues/Tech_Trend

Python Streamlit을 이용하여 Flask 보다 쉽고 편하게 웹 애플리케이션 다루기 #3

pauls 2025. 1. 17. 09:01
반응형

오늘은 앞선 글에서 살펴본 Flask 프레임워크에 이어, 비교적 가벼운 코드로도 세련된 웹 애플리케이션을 만들 수 있게 해주는 Streamlit 라이브러리를 살펴보겠습니다. Streamlit을 이용해 간단한 데이터 시각화부터 사용자와 실시간으로 소통하는 애플리케이션까지 단계적으로 구현해 보겠습니다.

Python Streamlit
Python Streamlit

 

 

Python Streamlit

  Flask와 무엇이 다른가?

Flask나 Django처럼 “웹 프레임워크”라는 용어를 쓰기는 어렵지만, Streamlit은 주로 데이터 애플리케이션에 특화된 파이썬 라이브러리입니다. 기본 목표는 웹 프로그래밍에 익숙하지 않은 데이터 분석가나 파이썬 개발자가 손쉽게 웹 페이지 상에서 분석 결과를 시각적으로 공유하고, 사용자 입력을 받아볼 수 있도록 하는 데에 있습니다.

 

반응형

 

 

Flask와 비교했을 때 장점

  • 빠른 개발: Flask는 라우팅, 템플릿 구성 등 웹 프레임워크 특유의 구조가 있지만, Streamlit은 대부분의 기능이 단순한 함수 호출로 구현됩니다.
  • 쉬운 데이터 시각화: 복잡한 HTML 템플릿을 직접 만들 필요 없이, Streamlit에서 제공하는 컴포넌트 함수를 통해 몇 줄의 코드로 그래프를 그릴 수 있습니다.
  • 실시간 업데이트: 사용자 입력에 따라 그래프나 텍스트가 자동으로 재렌더링되므로, 실시간 상호작용 구현이 간편합니다.

 

  개발 환경 준비

Streamlit 설치 방법

pip install streamlit

이 명령어만 입력하면 바로 설치가 진행됩니다.

 

폴더 구조 예시

개발을 시작하기 전에, 프로젝트를 간단히 정리해 두는 것이 좋습니다. 예를 들어, 다음과 같은 구조를 사용할 수 있습니다.

my_streamlit_app/
 ├─ app.py
 └─ data/
     └─ sample.csv
  • app.py: Streamlit으로 구현한 메인 애플리케이션 파일
  • data 폴더: 필요한 데이터 파일을 모아두는 공간

이런 식으로 폴더를 구성해 두면, 나중에 프로젝트가 커져도 어디에 무엇을 넣어야 할지 쉽게 파악할 수 있습니다.

 

 

  Hello, Streamlit

Streamlit을 이해하기 위해서는 간단한 예시 애플리케이션부터 직접 만들어 보는 것이 좋습니다. 아래 예시 코드를 보겠습니다.

import streamlit as st

def main():
    st.title("Hello, Streamlit!")
    st.write("처음 만든 Streamlit 웹 앱에 오신 것을 환영합니다.")

if __name__ == "__main__":
    main()
  • 위 코드를 `app.py` 파일로 작성해 주세요. 내용은 단순하지만, Streamlit의 기본 사용 방식을 알 수 있습니다.

 

애플리케이션 실행

터미널이나 명령 프롬프트를 열어서 프로젝트 폴더로 이동한 뒤, 다음 명령어를 입력해 보세요.

streamlit run app.py

명령어를 실행하면 브라우저가 열리면서, “Hello, Streamlit!”이라고 표시된 페이지가 나올 겁니다. Flask 때처럼 `localhost:8501` 주소 등을 통해 앱에 접근할 수 있습니다.

 

 

 

  상호작용 기능 익히기

Streamlit의 강점은 사용자와의 상호작용을 매우 쉽게 구현한다는 점입니다.

예를 들어, 아래처럼 텍스트 입력, 버튼, 슬라이더 등을 넣을 수 있습니다.

import streamlit as st

def main():
    st.title("간단한 상호작용 예시")

    name = st.text_input("이름을 입력하세요:")
    if st.button("인사하기"):
        st.write(f"{name}님, 반갑습니다!")

    st.write("---")
    age = st.slider("나이를 선택하세요:", min_value=1, max_value=100, value=20)
    st.write(f"선택된 나이: {age}")

if __name__ == "__main__":
    main()
  • `text_input`으로 텍스트를 입력받을 수 있고,
  • `slider`를 사용하면 직관적으로 값을 조정할 수 있습니다.

 

즉각적인 반응

`st.button`을 클릭하거나 슬라이더를 움직이면, 코드가 다시 실행되어 화면이 즉시 갱신됩니다. 별도의 라우팅이나 템플릿 세팅 없이도 이런 동작을 할 수 있다는 점이 Streamlit의 큰 장점입니다.

 

 

 

  데이터 시각화와 활용

Streamlit이 각광받는 가장 큰 이유 중 하나는 데이터 시각화입니다. 예를 들어 `matplotlib`나 `plotly` 라이브러리로 만든 그래프를 간단히 화면에 표시할 수 있습니다.

import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt

def main():
    st.title("데이터 시각화 예시")
    
    # 예시용 데이터프레임 생성
    data = {
        '날짜': ['2025-01-01', '2025-01-02', '2025-01-03', '2025-01-04'],
        '판매량': [10, 15, 7, 20]
    }
    df = pd.DataFrame(data)

    st.write("#### 판매 데이터")
    st.dataframe(df)  # 표 형태로 출력

    # Matplotlib 그래프 그리기
    fig, ax = plt.subplots()
    ax.plot(df['날짜'], df['판매량'], marker='o')
    ax.set_title("일별 판매량 추이")
    ax.set_xlabel("날짜")
    ax.set_ylabel("판매량")

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

if __name__ == "__main__":
    main()
  • `st.dataframe(df)`를 사용하면 `pandas` DataFrame을 직관적인 표 형태로 바로 볼 수 있습니다.

 

그래프 표시

`st.pyplot(fig)`는 `matplotlib` 그래프 객체를 받아서 애플리케이션 화면에 띄워줍니다. 이처럼 대화형 그래프 라이브러리를 함께 이용하면 더 풍부한 표현이 가능해집니다.

 

 

 

 

 

끝으로, Flask가 웹 개발의 기초를 차근차근 배울 수 있는 좋은 프레임워크라면, Streamlit은 데이터 기반 애플리케이션을 빠르게 완성하고 싶은 분들에게 추천할 만한 도구입니다.

이상으로 Streamlit을 이용한 웹 애플리케이션 개발 가이드를 마치겠습니다. 궁금하신 점이 있다면, 공식 문서와 예제를 참고하면서, 직접 코드를 수정해 보는 과정을 꼭 거쳐 보시길 권해 드립니다. 

반응형