Streamlit Session_state 사용하기

Streamlit Session_state 사용하기

Streamlit
Streamlit Session_state 사용하기
Author

gabriel yang

Published

September 13, 2024


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:
    st.session_state.count = 0

# 버튼을 눌렀을 때 count 증가
if st.button('카운트 증가'):
    st.session_state.count += 1

st.write(f"카운트 값: {st.session_state.count}")

이 코드는 사용자가 버튼을 클릭할 때마다 st.session_state.count가 증가하고, 애플리케이션이 재실행되어도 값이 유지됩니다.

상태 값 리셋하기

세션 상태를 초기화하고 싶은 경우도 있습니다. 예를 들어, 카운트를 0으로 초기화하는 버튼을 만들 수 있습니다.

if st.button('카운트 초기화'):
    st.session_state.count = 0

st.write(f"카운트 값: {st.session_state.count}")

4. 동적 입력 폼 생성 예제

다음은 사용자 입력을 받아 input입력 갯수를 결정하고 세션을 통해 input을 동적으로 변경하는 예제입니다.

import streamlit as st

# 세션 상태에 입력 필드 수 저장
if 'input_count' not in st.session_state:
    st.session_state.input_count = 1

def add_input():
    st.session_state.input_count += 1

def remove_input():
    if st.session_state.input_count > 1:
        st.session_state.input_count -= 1

# 동적으로 입력 필드 생성
for i in range(st.session_state.input_count):
    st.text_input(f"Input {i + 1}")

# 버튼을 통한 입력 필드 추가/제거
st.button("Add Input", on_click=add_input)
st.button("Remove Input", on_click=remove_input)

이 코드의 동작 방식은 다음과 같습니다: 사용자가 변경한 입력의 갯수가 st.session_state.input_count에 저장됩니다. 입력의 갯수는 사용자의 선택에 따라서 동적으로 변경될 수 있습니다.

다중 페이지 애플리케이션

여러 페이지를 가진 애플리케이션에서 페이지 간 상태를 유지할 수 있습니다.

import streamlit as st

# 페이지 선택에 따라 다른 내용 렌더링
if 'page' not in st.session_state:
    st.session_state.page = 'home'

def set_page(page):
    st.session_state.page = page

if st.session_state.page == 'home':
    st.write("This is the home page.")
    st.button("Go to Settings", on_click=lambda: set_page('settings'))
elif st.session_state.page == 'settings':
    st.write("This is the settings page.")
    st.button("Go to Home", on_click=lambda: set_page('home'))

이러한 예제들은 Streamlit의 session_state를 활용하여 다양한 기능을 구현할 수 있는 방법을 보여줍니다.

<h3>카테고리 다른 글</h3>
Date Title Author
Jan 1, 3000 전체 카테고리 gabriel yang
Sep 21, 2024 Streamlit 멀티 select 사용하기 gabriel yang
Sep 21, 2024 Streamlit selectbox를 사용하기 gabriel yang
Sep 19, 2024 Streamlit fragments 사용하기 gabriel yang
Sep 19, 2024 Streamlit form 사용하기 gabriel yang
Sep 19, 2024 Streamlit 데이터프레임 수정하기 gabriel yang
Sep 19, 2024 Streamlit fragments 사용하기 gabriel yang
Sep 18, 2024 Streamlit docker로 배포하기 gabriel yang
Sep 18, 2024 Streamlit 실시간 업데이트 사용하기 gabriel yang
Sep 18, 2024 Streamlit에서 다이얼로그 사용하기 gabriel yang
Sep 18, 2024 Streamlit의 유지보수와 디버깅 팁 gabriel yang
Sep 17, 2024 Streamlit cache_resource 사용하기 gabriel yang
Sep 16, 2024 Streamlit cache 사용하기 gabriel yang
Sep 15, 2024 Streamlit 데이터프레임 선택하기 gabriel yang
Sep 14, 2024 Streamlit 다중 page 구성하기 gabriel yang
Sep 12, 2024 Streamlit을 활용한 기본 시각화 도구 gabriel yang
Sep 12, 2024 Streamlit에 Plotly 차트 적용하기 gabriel yang
Sep 11, 2024 Streamlit에서 파일 업로드하기 gabriel yang
Sep 11, 2024 Streamlit에 SQLite 데이터베이스 적용 gabriel yang
Sep 10, 2024 Streamlit UI 컴포넌트 소개 gabriel yang
Sep 9, 2024 Streamlit 사용 사례 gabriel yang
Sep 9, 2024 Streamlit 설치 및 환경설정 gabriel yang
Sep 9, 2024 Streamlit 애플리케이션 구조 이해 gabriel yang
Sep 9, 2024 Streamlit layout 설정하는 방법 gabriel yang
Sep 8, 2024 Streamlit이란 무엇인가요? gabriel yang
Sep 6, 2024 Streamlit Cloud로 앱 배포하기 gabriel yang
No matching items
Back to BLOG LIST