Python/일반

[Python] Streamlit이란? Streamlit 기초 및 사용 상 장단점

공부하는 sum 2024. 1. 21. 23:52
728x90

이번에 프로젝트를 하면서, 결과를 Streamlit을 통해 웹사이트 형태로 제공을 하게 되었다.

그래서 Steamlit에 대한 기본 내용과, 사용해 본 소감등을 정리해보려고 한다.

 

이런 분들께 도움이 될 것 같아요.

  • 웹으로 서비스를 제공해야 하는데 인력 부족으로 어떻게 해야 할 지 고민이신 분
  • Streamlit을 통한 서비스를 고민하고 계신 분

 

Streamlit이란?
  • Python 기반의 오픈 소스 라이브러리
  • Python 스크립트를 통해 데이터 시각화, 대화형 웹 애플리케이션, 대시보드 등을 손쉽게 만들 수 있음
  • 공식 사이트에서는 "A faster way to build and share data apps"라고 말하며, 데이터 애플리케이션을 구축하고 공유하는 가장 빠른 방법을 제공한다고 함
  • 웹사이트 구축에 프론트엔드적 경험이 불필요함

 

Streamlit의 장점
  • 간편한 사용법
  • 빠른 개발 속도
  • 반응형 인터페이스 구축 가능
  • 다양한 데이터 시각화 기능
  • 로컬, 클라우드 플랫폼에 배포하여 공유 가능

 

Streamlit의 단점
  • 제한된 웹 개발 기능
  • 보안 기능 미제공

 

Streamlit을 선택한 이유

 

  • Flask, django, dash등 다른 웹프레임 워크들이 존재

 

종류 장점 단점
Streamlit 간편한 사용법
실시간 업데이트
대화형 위젯 및 시각화 통합
데이터 과학과 통합
고급기능 부족
UI 컨트롤 부족
Flask 유연성
커뮤니티와 확장성
초기 설정 시 직접 설정해야 하는 부분이 많음
Django 커뮤니티가 큼
기본적으로 필요한 기능들이 포함되어 있음
복잡한 구조로, 단순한 웹 애플리케이션에서는 불필요할 수 있음
Dash Plotly와 통합되어 있음
React를 통한 고급 사용자 정의 가능
React를 위한 학습이 필요
비교적 커뮤니티 크기가 작음

 

  • 하지만 현재 회사의 규모 상 웹사이트 구현을 전담해 줄 인력이 따로 없고
    과제 기간 내 모두 구현이 필요한 상황이라 학습에 소요할 시간이 많지 않았음
  • Streamlit에서는 ploty를 포함한 다양한 시각화가 가능했고,
    Python 기반이기에 개발한 모델을 바로 적용할 수 있어서 더 효과적이라고 판단해서 선택함

 

Streamlit의 기능들

다양한 데이터 입력 가능

1. 텍스트 입력

st.text_input(
    label='▶️ fstring을 이용해서 입력값을 출력할수도 있습니다.',
    key='text_input'
)

  • text_input을 이용해서 사용자가 텍스트를 입력할 수 있음

 

st.text_input(
    label='▶️ 비밀번호를 입력해주세요.',
    max_chars=16,
   type='password',
   key='pw_input')

  • text_input 중 type을 "password"로 설정하면, 비밀번호를 입력하는 것처럼 입력 값이 보이지 않게도 가능

 

2.숫자 입력

st.number_input(
    label='▶️ 숫자를 입력해주세요.',
    min_value=0, max_value=100, value=50, step=10,
   key='num_input')

  • 숫자를 입력받을 수 있고
  • min / max / step 설정이 가능해서 유효성 검사도 바로 가능

 

3.날짜 입력

st.date_input(
    label='▶️ 날짜를 입력해주세요.',
    value = date.today(),
   key='date_input')

  • 날짜 입력의 경우에도, 텍스트로 날짜를 입력할 수도 있고
  • 캘린더에서 클릭으로 입력이 가능
  • 시작기간 / 종료 기간 설정도 가능함

 

4. 파일 업로드

st.file_uploader(
    label='▶️ 사진 업로드를 해주세요.',
    type=['jpg', 'png'],
   key='image_input')

  • type을 jpg, png로 설정 시
    개당 최대 200mb까지 jpg, jpeg,png파일의 업로드가 가능
  • 다중 업로드도 가능함

 

st.file_uploader(
    label='▶️ csv 파일 업로드를 해주세요.',
    type=['csv'],
   key='csv_input')

  • type을 csv로 지정 시 csv파일을 업로드 가능

 

위젯 사용

1.버튼

st.button('버튼기능',key='버튼')

  • 버튼의 안에 원하는 문구를 넣을 수 있고
  • 해당 버튼이 활성화 될 때 이후 동작을 설정 가능

 

2. 슬라이드

st.slider(
    label='▶️ 범위를 조절해주세요.',
    min_value=0.0, max_value=100.0,
    value=(25.0, 75.0), step=0.5,
   key='slider_value')

  • 범위에 대한 설정을 할 때 필요한 슬라이드 기능
  • step에 대한 설정이 가능해 각 칸의 간격을 조절 가능

 

3.라디오박스

st.radio(label='▶️ 라디오박스 선택(수평).',
	options=['1','2','3'], key='radiobox',horizontal=True)

  • 라디오박스의 경우 horizontal옵션을 사용하여 수직/수평 방향으로 설정할 수 있음

 

동적시각화

1. 색상 입력

st.color_picker('▶️ 색상을 선택해주세요.', '#FFFFFF')

  • 컬러피커를 사용해서 원하는 색상의 선택가능
  • 컬러코드는 HEX, RGB, HSV 세 종류가 지원되며, 해당 코드 입력으로도 색상 입력 가능

 

2. 데이터 수정

st.data_editor(csv_input,num_rows='dynamic',key='data_editor')

  • csv등으로 업로드한 파일을 data_editor로 화면에 띄울 경우, 해당 데이터의 수정이 가능
  • 이후 download_button기능을 이용해서 파일로 재 다운로드 가능

 

실제 사용해 본 후의 장단점

장점

  • 친절한 공식문서
  • 개발 속도가 빠름
    • Python기반으로 쉽고 빠르게 개발 가능
    • ChatGPT를 활용한다면 기본적인 내용은 더욱 빠르게 구현 가능
  • 개발한 모델을 직접 적용 가능
    • Python기반 이기 때문에 바로 모델 적용이 가능함
  • 적당히 귀여움
    • 아이콘 적용이 가능하고, 둥글둥글한 느낌이라 깔끔한 느낌

 

단점

  • 획일화된 느낌
    • Streamlit으로 구현한 페이지는 다 비슷한 특유의 느낌이 있음
    • 폰트 등을 바꾸려면 css,html등을 알아야 하고, 구조상 안되는 것도 꽤 존재함
  • 프로토타입 이상은 힘듦
    • 모델을 바로 사용가능한 점은 좋긴 하지만, 모델이 조금만 무거워지면 티가 확 난다

 

결론
  • python으로 구현이 가능하기 때문에 프론트 인력이 부족한 경우 유용함
  • ml모델 코드와의 호환성이 좋지만 그와 비례해서 로딩 또한 느려짐
  • 중장기적으로 안정적인 서비스를 위해서는 streamlit이 아닌 다른 웹프레임워크를 활용해야 할 필요성이 있음
728x90