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
를 활용하여 다양한 기능을 구현할 수 있는 방법을 보여줍니다.