티스토리 뷰

카테고리 없음

Streamlit 일반 변수 vs Session State 비교 실습

정두현의아이티세상 2026. 10. 10. 16:30

Streamlit 일반 변수 vs Session State 비교 실습

Streamlit에서 일반 변수와 st.session_state의 차이를 이해하기 위해 버튼을 누를 때마다 숫자를 1씩 증가시키는 예제 2개를 만들겠습니다.

두 예제는 기능이 같지만, 버튼을 여러 번 클릭했을 때 결과가 달라집니다.

1. 핵심 개념 비교

구분일반 변수st.session_state
값 저장 Python 변수 Streamlit 세션 상태
초기값 실행할 때마다 초기화 세션에서 최초 한 번 초기화
버튼 클릭 프로그램 재실행 프로그램 재실행
이전 값 유지 유지되지 않음 유지됨
버튼 3회 클릭 1 3
활용 일시적인 계산 클릭 횟수, 사용자 선택값 유지

2. 실습 1: 일반 변수 사용

학습목표: Streamlit에서 버튼을 클릭하면 Python 코드가 다시 실행되어 일반 변수가 초기화되는 현상을 확인합니다.

JupyterLab Notebook 셀에 입력합니다.

%%writefile app_normal.py

import streamlit as st

st.title("실습 1. 일반 변수 사용")

# 일반 변수 초기화
count = 0

# 버튼 클릭
if st.button("숫자 증가"):
    count = count + 1

# 결과 출력
st.write("현재 숫자 :", count)

JupyterLab Terminal에서 실행합니다.

streamlit run app_normal.py

버튼 클릭 결과

동작화면 출력
최초 실행 0
버튼 1회 클릭 1
버튼 2회 클릭 1
버튼 3회 클릭 1

왜 숫자가 1에서 증가하지 않을까요?

일반 변수의 실행 흐름

버튼을 클릭할 때마다 count = 0부터 다시 실행되므로 값이 누적되지 않습니다.

3. 실습 2: Session State 사용

학습목표: st.session_state를 이용해 버튼을 클릭할 때마다 숫자가 누적되는 것을 확인합니다.

JupyterLab Notebook 셀에 입력합니다.

%%writefile app_session.py

import streamlit as st

st.title("실습 2. Session State 사용")

# Session State 초기화
# count가 존재하지 않을 때만 0으로 설정
if "count" not in st.session_state:
    st.session_state.count = 0

# 버튼 클릭
if st.button("숫자 증가"):
    st.session_state.count += 1

# 결과 출력
st.write("현재 숫자 :", st.session_state.count)

JupyterLab Terminal에서 실행합니다.

streamlit run app_session.py

버튼 클릭 결과

동작화면 출력
최초 실행 0
버튼 1회 클릭 1
버튼 2회 클릭 2
버튼 3회 클릭 3

Session State의 실행 흐름

프로그램은 다시 실행되지만, 같은 세션에 저장된 count 값은 유지되므로 숫자가 누적됩니다.

 
댓글