Streamlit Session_state 사용하기
Streamlit Session_state 사용하기
Streamlit에서 애플리케이션은 매번 사용자의 입력에 따라 전체 코드가 다시 실행되는 방식으로 동작합니다. 이로 인해 값이 매번 초기화되는 문제를 피하고, 상태를 유지하기 위해서는 상태 관리 및 세션을 활용해야 합니다. 이번 글에서는 Streamlit에서 상태 관리 및 세션을 사용하는 방법을 예시와 함께 설명합니다.
1. 상태 관리란?
일반적으로 웹 애플리케이션에서는 사용자가 어떤 동작을 했을 때 그 상태를 기억해야 하는 경우가 많습니다. 상태 관리란 사용자가 입력한 데이터나 애플리케이션에서 변화된 상태를 유지하는 것을 의미합니다. Streamlit은 사용자가 상호작용할 때마다 전체 코드가 다시 실행되기 때문에, 이전에 저장된 값이나 상태를 유지하기 위해 세션 상태를 사용해야 합니다.
이는 애플리케이션에서 다양한 상태를 관리하는 데 도움이 됩니다. 예를 들어, 동적 입력 폼, 여러 페이지 간 상태 공유, 또는 사용자 인증 상태 등을 관리할 수 있습니다. 이를 통해 애플리케이션의 복잡성을 줄이고, 코드의 가독성을 높일 수 있습니다.
2. Streamlit에서 세션 상태 사용하기
Streamlit에서는 st.session_state
를 통해 상태를 관리할 수 있습니다. 세션 상태는 애플리케이션이 실행되는 동안 사용자별로 상태를 저장하고 관리할 수 있도록 도와줍니다. 딕셔너리 형태로 데이터를 저장하며, 이를 통해 값이나 상태를 유지할 수 있습니다.
세션 상태의 주요 특징:
st.session_state
는 Streamlit 애플리케이션이 재실행되더라도 사용자가 변경한 값을 유지할 수 있습니다.- 딕셔너리와 유사한 방식으로 사용되며, 다양한 데이터 타입을 저장할 수 있습니다.
3. st.session_state
로 상태 관리하기
Streamlit에서 상태를 유지하려면 st.session_state
에 변수를 저장하고 이를 활용합니다. 다음은 st.session_state
의 사용 예시입니다.
상태 저장하기
import streamlit as st
# 세션 상태에서 'count' 변수 초기화
if 'count' not in st.session_state:
= 0
st.session_state.count
# 버튼을 눌렀을 때 count 증가
if st.button('카운트 증가'):
+= 1
st.session_state.count
f"카운트 값: {st.session_state.count}") st.write(
이 코드는 사용자가 버튼을 클릭할 때마다 st.session_state.count
가 증가하고, 애플리케이션이 재실행되어도 값이 유지됩니다.
상태 값 리셋하기
세션 상태를 초기화하고 싶은 경우도 있습니다. 예를 들어, 카운트를 0으로 초기화하는 버튼을 만들 수 있습니다.
if st.button('카운트 초기화'):
= 0
st.session_state.count
f"카운트 값: {st.session_state.count}") st.write(
4. 동적 입력 폼 생성 예제
다음은 사용자 입력을 받아 input입력 갯수를 결정하고 세션을 통해 input을 동적으로 변경하는 예제입니다.
import streamlit as st
# 세션 상태에 입력 필드 수 저장
if 'input_count' not in st.session_state:
= 1
st.session_state.input_count
def add_input():
+= 1
st.session_state.input_count
def remove_input():
if st.session_state.input_count > 1:
-= 1
st.session_state.input_count
# 동적으로 입력 필드 생성
for i in range(st.session_state.input_count):
f"Input {i + 1}")
st.text_input(
# 버튼을 통한 입력 필드 추가/제거
"Add Input", on_click=add_input)
st.button("Remove Input", on_click=remove_input) st.button(
이 코드의 동작 방식은 다음과 같습니다: 사용자가 변경한 입력의 갯수가 st.session_state.input_count
에 저장됩니다. 입력의 갯수는 사용자의 선택에 따라서 동적으로 변경될 수 있습니다.
다중 페이지 애플리케이션
여러 페이지를 가진 애플리케이션에서 페이지 간 상태를 유지할 수 있습니다.
import streamlit as st
# 페이지 선택에 따라 다른 내용 렌더링
if 'page' not in st.session_state:
= 'home'
st.session_state.page
def set_page(page):
= page
st.session_state.page
if st.session_state.page == 'home':
"This is the home page.")
st.write("Go to Settings", on_click=lambda: set_page('settings'))
st.button(elif st.session_state.page == 'settings':
"This is the settings page.")
st.write("Go to Home", on_click=lambda: set_page('home')) st.button(
이러한 예제들은 Streamlit의 session_state
를 활용하여 다양한 기능을 구현할 수 있는 방법을 보여줍니다.
<h3>카테고리 다른 글</h3>
Date | Title | Author |
---|---|---|
Jan 1, 3000 | 전체 카테고리 | |
Sep 21, 2024 | Streamlit 멀티 select 사용하기 | |
Sep 21, 2024 | Streamlit selectbox를 사용하기 | |
Sep 19, 2024 | Streamlit fragments 사용하기 | |
Sep 19, 2024 | Streamlit form 사용하기 | |
Sep 19, 2024 | Streamlit 데이터프레임 수정하기 | |
Sep 19, 2024 | Streamlit fragments 사용하기 | |
Sep 18, 2024 | Streamlit docker로 배포하기 | |
Sep 18, 2024 | Streamlit 실시간 업데이트 사용하기 | |
Sep 18, 2024 | Streamlit에서 다이얼로그 사용하기 | |
Sep 18, 2024 | Streamlit의 유지보수와 디버깅 팁 | |
Sep 17, 2024 | Streamlit cache_resource 사용하기 | |
Sep 16, 2024 | Streamlit cache 사용하기 | |
Sep 15, 2024 | Streamlit 데이터프레임 선택하기 | |
Sep 14, 2024 | Streamlit 다중 page 구성하기 | |
Sep 12, 2024 | Streamlit을 활용한 기본 시각화 도구 | |
Sep 12, 2024 | Streamlit에 Plotly 차트 적용하기 | |
Sep 11, 2024 | Streamlit에서 파일 업로드하기 | |
Sep 11, 2024 | Streamlit에 SQLite 데이터베이스 적용 | |
Sep 10, 2024 | Streamlit UI 컴포넌트 소개 | |
Sep 9, 2024 | Streamlit 사용 사례 | |
Sep 9, 2024 | Streamlit 설치 및 환경설정 | |
Sep 9, 2024 | Streamlit 애플리케이션 구조 이해 | |
Sep 9, 2024 | Streamlit layout 설정하는 방법 | |
Sep 8, 2024 | Streamlit이란 무엇인가요? | |
Sep 6, 2024 | Streamlit Cloud로 앱 배포하기 |