Skip to content
튜토리얼
Streamlit
Streamlit 세션 상태: 시작하기에 필수적인 가이드

Streamlit 세션 상태: 시작하기에 필수적인 가이드

Streamlit은 웹 개발에 접근하는 방식을 혁신적으로 변경시켰으며, 특히 데이터 과학과 머신 러닝 분야에서 인기가 많습니다. 그 중에서도 가장 강력한 기능 중 하나는 **세션 상태(Session State)**입니다. 이 글은 Streamlit 세션 상태에 대한 포괄적인 가이드를 제공하여 사용법, 이점 및 다른 상태 관리 도구와의 비교를 다룰 것입니다.

스트림릿 앱을 Tableau로 바꿔주는 멋진 데이터 분석 및 데이터 시각화 도구를 들어보셨나요?

PyGWalker (opens in a new tab)는 스트림릿 앱에 Tableau와 유사한 사용자 인터페이스를 쉽게 임베드하는 데 도움이 되는 파이썬 라이브러리입니다.

PyGWalker를 사용한 데이터 시각화 (opens in a new tab)

Streamlit과 세션 상태 소개

Streamlit이란?

Streamlit은 개발자들이 쉽게 상호작용하는 웹 애플리케이션을 만들 수 있게 해주는 오픈소스 파이썬 라이브러리입니다. 특히 데이터 과학자와 머신 러닝 엔지니어들 사이에서는 간편성과 데이터 주도형 웹 애플리케이션을 빠르게 작성할 수 있는 능력 때문에 인기가 많습니다.

Streamlit에서 세션 상태 이해하기

웹 개발의 맥락에서 세션은 사용자가 웹 애플리케이션과 상호작용하는 기간을 의미합니다. 애플리케이션이 이 사용자 상호작용에 대해 저장하는 데이터를 **세션 상태(Session State)**라고 합니다. Streamlit에서 세션 상태는 애플리케이션을 다시 실행해도 데이터를 유지하며, 더욱 상호작용적이고 동적인 애플리케이션을 만들 수 있도록 도와줍니다.

Streamlit 세션 상태 활용

Streamlit 세션 상태 빠르게 시작하기

Streamlit 세션 상태 사용법은 간단합니다. 애플리케이션을 다시 실행해도 유지되는 데이터를 저장할 수 있습니다. 예를 들어, 텍스트 입력 위젯에서 사용자의 입력을 저장하려면 세션 상태에 저장할 수 있습니다. 다음은 세션 상태를 사용하는 방법입니다:

  1. 아직 설치하지 않았다면 Streamlit을 설치하세요: pip install streamlit
  2. 새로운 파이썬 파일을 생성하고 Streamlit을 가져옵니다: import streamlit as st
  3. 세션 상태를 초기화합니다: if 'my_var' not in st.session_state: st.session_state['my_var'] = 0
  4. 앱에서 세션 상태를 사용합니다: st.session_state['my_var'] += 1

다음은 예제 코드입니다:

import streamlit as st
 
if 'user_input' not in st.session_state:
    st.session_state['user_input'] = ''
 
user_input = st.text_input("텍스트를 입력하세요")
if user_input:
    st.session_state['user_input'] = user_input
 
st.write(f"입력한 내용: {st.session_state['user_input']}")

이 예제에서는 사용자의 입력이 세션 상태에 저장되어 애플리케이션이 다시 실행되더라도 유지됩니다.

기본 이상의 활용: 고급 사용 사례와 모범 사례

기본 사용법을 익힌 후 진정한 재미가 시작됩니다. Streamlit 세션 상태는 고급 사용 사례의 세계를 엽니다. 예를 들어 사용자 인증 정보를 저장하는 데 사용할 수 있습니다. 다음은 간단한 예제입니다:

if 'username' not in st.session_state:
    st.session_state['username'] = ''
 
username = st.text_input("사용자 이름을 입력하세요")
if username:
    st.session_state['username'] = username
 
st.write(f"안녕하세요, {st.session_state['username']}님!")

이 예제에서는 사용자의 사용자 이름이 세션 상태에 저장되어 애플리케이션이 다시 실행되더라도 유지됩니다.

기억하세요, 큰 능력은 큰 책임을 수반합니다. 세션 상태를 효과적으로 관리하여 애플리케이션이 원활하게 실행되도록 해야 합니다.

Streamlit 세션 상태의 능력을 발휘하기

Streamlit 세션 상태: 웹 개발에서의 게임 체인저

Streamlit 세션 상태는 웹 개발에서 게임 체인저입니다. 데이터가 다시 실행되더라도 유지되므로 동적이고 상호작용적인 애플리케이션을 만들 수 있습니다. 이는 사용자 입력이 필요한 애플리케이션이나 여러 단계나 단계별로 진행되는 애플리케이션에게 강력한 도구입니다.

Streamlit 세션 상태: 머신 러닝과 데이터 과학에서의 비밀 무기

머신 러닝과 데이터 과학의 세계에서는 Streamlit 세션 상태가 필요한 비밀 무기입니다. 이를 사용하여 다음과 같은 모든 것을 저장할 수 있습니다:

  • 모델 매개변수
  • 데이터 필터용 사용자 입력
  • 중간 데이터 처리 결과

이를 통해 불필요한 계산을 피하고 애플리케이션의 성능을 최적화할 수 있습니다.

성능 및 Streamlit 세션 상태의 제한 사항

Streamlit 세션 상태는 강력한 도구이지만, 제한 사항을 알고 있어야 합니다. 세션 상태는 메모리에 저장되기 때문에 애플리케이션의 메모리 사용량이 증가할 수 있습니다. 따라서 세션 상태를 적절하게 관리하고 성능 문제를 일으킬 수 있는 대량의 데이터를 저장하는 것을 피해야 합니다.

Streamlit 세션 상태 대 다른 상태 관리 도구

비교: Streamlit 세션 상태 vs st.cache

Streamlit은 상태 관리를 위한 또 다른 기능인 st.cache를 제공합니다. st.cache와 세션 상태 모두 애플리케이션을 다시 실행해도 데이터를 저장할 수 있지만, 각각 다른 목적으로 사용됩니다. st.cache는 계산에 시간이 오래 걸리는 결과를 캐시하여 성능을 개선하는 것을 목적으로 하는 반면, 세션 상태는 사용자 상호작용 데이터를 저장하는 것을 목적으로 합니다.

다음은 st.cache를 사용하는 간단한 예제입니다:

@st.cache
def expensive_computation():
    # 매우 시간이 오래 걸리는 계산이 여기에 포함됩니다
    return result
 
result = expensive_computation()

이 예제에서는 계산 결과를 캐시하고 후속 실행에서 재사용하여 애플리케이션의 성능을 개선합니다.

이 멋진 데이터 분석 및 데이터 시각화 도구를 들어 보셨나요? 이 도구는 Streamlit 앱을 Tableau로 변환해줍니다.

PyGWalker (opens in a new tab)는 여러분의 Streamlit 앱에 Tableau와 유사한 UI를 쉽게 임베드할 수 있는 Python 라이브러리입니다. 이 강력한 데이터 시각화 Python 라이브러리를 사용하여 Streamlit 앱을 강화하는 자세한 단계를 보여주는 Coding is Fun의 Sven이 제작한 놀라운 비디오 (opens in a new tab)를 확인해보세요!


Sven과 그의 훌륭한 기여 (opens in a new tab)에 감사드립니다. PyGWalker 커뮤니티에게!

추가로, PyGWalker GitHub 페이지 (opens in a new tab)에서 더 많은 PyGWalker 예제를 확인할 수 있습니다.

Streamlit 세션 상태 vs Redux: 자세한 분석

Redux는 특히 React로 구축된 JavaScript 애플리케이션에서 널리 사용되는 인기있는 상태 관리 라이브러리입니다. Redux는 전역 상태를 중앙 집중식 저장소로 제공하며, 상태가 예측 가능한 방식으로만 업데이트될 수 있도록 규칙을 제공합니다.

반면, Streamlit 세션 상태는 Streamlit 라이브러리의 기능으로, 데이터가 애플리케이션 재실행 간에 지속될 수 있도록 합니다. 주로 서버 측 Python 애플리케이션에서 사용되며, 상호작용적이고 동적인 웹 애플리케이션을 만들 때 사용됩니다.

Redux와 Streamlit 세션 상태는 모두 상태 관리의 같은 목적을 제공하지만, 다른 상황에서 사용되며 다른 기능을 갖고 있습니다:

  • 프로그래밍 언어: Redux는 JavaScript와 함께 사용되며, Streamlit 세션 상태는 Python과 함께 사용됩니다.
  • 애플리케이션 유형: Redux는 일반적으로 클라이언트 측 애플리케이션에서 사용되지만, Streamlit 세션 상태는 서버 측 애플리케이션에서 사용됩니다.
  • 상태 지속성: Redux에서 상태는 사용자가 웹사이트에 머무르는 동안 또는 상태가 명시적으로 지워질 때까지 지속됩니다. Streamlit에서 세션 상태는 애플리케이션 재실행 간에 지속되지만, 사용자가 애플리케이션을 닫으면 지워집니다.
  • 학습 곡선: Redux는 reducer, action, middleware와 같은 개념들로 인해 학습 곡선이 더 높습니다. Streamlit 세션 상태는 더 간단하고 사용하기 쉽습니다. 특히 Python에 이미 익숙한 사람들에게 더욱 적합합니다.

Streamlit 세션 상태 vs Local Storage 및 Context API

Local Storage와 Context API는 JavaScript 애플리케이션에서 사용되는 다른 상태 관리 솔루션입니다.

Local Storage는 사용자의 브라우저에 데이터를 지속적으로 저장할 수 있는 웹 스토리지 객체입니다. Local Storage에 저장된 데이터는 만료 시간이 없으며, 브라우저를 닫았다가 다시 열어도 유지되는 특징이 있습니다. 사용자 선호도나 세션 데이터와 같은 작은 양의 데이터를 저장하는 데 유용합니다.

Context API는 React 16.3에서 도입된 기능으로, 현재 인증된 사용자, 테마 또는 언어와 같이 "전역"으로 간주될 수 있는 데이터를 React 컴포넌트 트리에서 공유할 수 있도록 합니다. React 컴포넌트 트리에 대해 전역으로 간주될 수 있는 데이터를 공유하기 위해 설계되었습니다.

이러한 도구들은 각각 자체적으로 강력하지만, Streamlit 세션 상태와는 프로그래밍 언어와 애플리케이션 컨텍스트가 다르기 때문에 직접적으로 비교할 수 없습니다:

  • 프로그래밍 언어: Local Storage와 Context API 모두 JavaScript와 함께 사용되며, Streamlit 세션 상태는 Python과 함께 사용됩니다.
  • 데이터 지속성: Local Storage는 브라우저를 닫았다가 다시 열어도 데이터가 유지될 수 있으며, Context API와 Streamlit 세션 상태에는 이러한 기능이 없습니다.
  • 사용 사례: Local Storage는 사용자 선호도나 세션 데이터와 같은 작은 양의 데이터를 저장하는 데 유용합니다. Context API는 React 컴포넌트 트리 전체에서 전역 데이터를 공유하는 데 유용합니다. Streamlit 세션 상태는 애플리케이션 재실행 간에 지속되어야 하는 데이터 저장에 유용합니다.

Streamlit 세션 상태에서 복잡한 데이터 유형 다루기

Streamlit 세션 상태는 정수나 문자열과 같은 간단한 데이터 유형뿐만 아니라 리스트, 사전, 세트 및 사용자 정의 객체와 같은 복잡한 데이터 유형도 처리할 수 있습니다. 이를 통해 Streamlit 애플리케이션에서 상태를 관리하는 다재다능한 도구가 됩니다.

예를 들어, 사용자 입력 목록을 세션 상태에 저장할 수 있습니다:

if 'user_inputs' not in st.session_state:
    st.session_state['user_inputs'] = []
 
user_input = st.text_input("Enter some text")
if user_input:
    st.session_state['user_inputs'].append(user_input)
 
st.write(f"You entered: {st.session_state['user_inputs']}")

이 예제에서는 사용자가 텍스트를 입력할 때마다 세션 상태에 저장된 리스트에 추가됩니다.

결론

Streamlit 세션 상태는 Streamlit 애플리케이션에서 상태를 관리하기 위한 강력한 도구입니다. 데이터를 재실행 간에 저장함으로써 보다 인터랙티브하고 동적인 애플리케이션을 만들 수 있습니다. Streamlit을 처음 시작하는 초보자이거나 애플리케이션을 최적화하려는 경험있는 개발자든 상관없이, 세션 상태를 이해하고 효과적으로 사용하면 웹 개발 프로세스를 크게 개선할 수 있습니다.

자주 묻는 질문

Streamlit의 세션 상태(Session State)란 무엇인가요?

Streamlit의 세션 상태(Session State)는 애플리케이션 재실행 간에 데이터가 지속될 수 있도록 해주는 기능입니다. 사용자 상호작용에 대한 데이터를 저장하는 데 사용되며, 보다 인터랙티브하고 동적인 애플리케이션을 만들 수 있습니다.

Streamlit의 단점은 무엇인가요? Streamlit은 대화형 웹 애플리케이션을 생성하기 위한 강력한 도구이지만, 몇 가지 제한 사항이 있습니다. 예를 들어, 주로 프로토타이핑을 위해 설계되었으며 복잡하고 대규모인 웹 애플리케이션을 구축하는 데 적합하지 않을 수 있습니다. 또한, 상대적으로 새로운 라이브러리이기 때문에 더 성숙한 웹 개발 프레임워크에서 발견되는 몇 가지 기능이 부족할 수도 있습니다.

Streamlit 세션은 만료됩니까?

Streamlit 세션은 자동으로 만료되지 않습니다. 그러나 사용자가 애플리케이션을 닫을 때 세션 상태의 데이터는 지워집니다.

ASP.NET에서 세션 상태를 사용하는 방법은 무엇입니까?

ASP.NET에서 세션 상태는 사용자별로 일시적으로 값을 저장하고 검색할 수 있는 기능입니다. Session 객체를 호출하고 Session["UserName"] = "John Doe";와 같이 값을 할당함으로써 사용할 수 있습니다. 이는 Python 애플리케이션에서 사용되는 Streamlit 세션 상태와 다르다는 점에 유의하십시오.