웹 개발 입문
글자 입력받기선택하게 하기숫자와 날짜 입력버튼을 누르면 무슨 일이 일어나냥연습하기 Level 1미니 프로젝트 · BMI 계산기
놀면 뭐 하니,
그냥 하는거야.

버튼을 누르면 무슨 일이 일어나냥

코딩냥

이 강은 이 수업에서 가장 중요한 강이다냥. 여기를 이해하면 앞으로 나올 게 전부 술술 풀리고, 여기서 헷갈리면 계속 막힌다냥. 그러니 천천히, 꼭꼭 씹어서 읽어보자냥!

오늘의 학습 목표

  • Streamlit 의 재실행(rerun) 규칙을 이해한다.
  • st.button 이 언제 True 가 되는지 안다.
  • "버튼을 눌렀는데 값이 사라져요" 가 왜 생기는지 설명할 수 있다.
실습 준비·필요한 패키지와 버전
  • streamlit1.40 이상파이썬 코드로 웹 화면 만들기

설치하기 — 터미널에 그대로 붙여넣기

pip install "streamlit>=1.40"

설치 확인 — 버전 번호가 찍히면 성공

python -c "import streamlit; print(streamlit.__version__)"

위 버전은 최소 기준이라, 더 높은 버전이 깔려 있으면 그대로 써도 된다냥. 버전이 안 찍히고 에러가 나면 설치가 안 된 거라 설치 명령을 다시 실행해보자냥.

1단계 · 한 가지 규칙만 기억하자냥

Streamlit 의 황금 규칙

화면에서 무언가 하나라도 건드리면(글자를 치든, 버튼을 누르든, 슬라이더를 밀든), Streamlit 은 app.py 를 처음부터 끝까지 통째로 다시 실행한다냥.

일부만 바꾸는 게 아니라 전부 다시 실행하는 거다냥. 이게 핵심이라냥!

코딩냥

놀랐냥? 우리가 앞에서 "입력창에 글자를 칠 때마다 아래 화면이 자동으로 바뀐다" 고 했지? 그게 바로 이 규칙 때문이다냥. 글자를 한 자 칠 때마다 코드 전체가 다시 돌아서 화면을 새로 그리는 거다냥!

2단계 · 일반 프로그램과 뭐가 다르냥

보통 파이썬 (input)
  • ✦코드를 위에서 아래로 딱 한 번만 실행
  • ✦input() 에서 멈춰서 사용자를 기다림
  • ✦값을 받으면 그 아래로 계속 진행
Streamlit
  • ✦화면을 건드릴 때마다 처음부터 다시 실행
  • ✦멈춰서 기다리지 않고 끝까지 쭉 실행
  • ✦위젯 값은 그 순간의 화면 상태를 읽음
코딩냥

보통 파이썬은 input() 에서 멈춰서 기다린다냥. 그런데 Streamlit 은 멈추지 않는다냥. 대신 화면을 건드릴 때마다 처음부터 다시 달린다냥. 이 차이를 아는 게 정말 중요하다냥!

3단계 · 버튼은 "눌린 그 순간만" True 다냥

코딩냥

이제 버튼을 보자냥. st.button 은 눌린 바로 그 순간의 재실행에서만 True 가 되고, 그 다음 재실행부터는 다시 False 로 돌아간다냥. 코드로 확인해보자냥.

import streamlit as st

st.title("버튼 실험이다냥")

if st.button("눌러보기"):
    st.write("지금 막 눌렀다냥!")   # 누른 그 순간에만 보인다냥

st.write("이 줄은 항상 보인다냥")

직접 해보면 이렇다냥

  • 버튼을 누르면 → "지금 막 눌렀다냥!" 이 뜬다냥.
  • 그런데 슬라이더를 밀거나 다른 걸 건드리면 → 그 메시지가 사라진다냥.

버튼이 False 로 돌아갔기 때문이라냥. 버튼은 "방금 눌렸냐?" 를 알려주는 거지, "예전에 눌렀었냐?" 를 기억하는 게 아니라냥!

4단계 · "값이 사라져요" 의 정체

코딩냥

많은 사람이 여기서 처음 좌절한다냥. 예를 들어 버튼을 누를 때마다 숫자를 1씩 늘리고 싶어서 이렇게 짠다냥.

import streamlit as st

count = 0                    # 매번 0으로 다시 시작한다냥!

if st.button("증가"):
    count = count + 1

st.write("횟수: " + str(count))

왜 항상 1에서 멈추냥?

버튼을 눌러도 계속 "횟수: 1" 만 나온다냥. 왜냐면 재실행 때마다 count = 0 부터 다시 시작하기 때문이라냥. 눌러서 1이 됐다가, 다음 재실행에서 또 0으로 리셋되는 거다냥.

이건 버그가 아니라 재실행 규칙 그대로라냥. 값을 기억하게 하려면 특별한 상자가 필요하다냥 — 그게 바로 다음 3부에서 배울 st.session_state 라냥!

5단계 · 그래서 무엇을 조심하냥

재실행 시대의 마음가짐

  • 일반 변수(count = 0)는 재실행마다 초기화된다냥. 기억 못 한다냥.
  • st.button 은 눌린 순간만 True 라냥. 상태를 저장하는 게 아니라냥.
  • 값을 계속 기억하게 하려면 st.session_state 가 필요하다냥(3부).

지금은 "아, 화면을 건드리면 전부 다시 도는구나" 만 확실히 알면 된다냥!

복습 퀴즈

Q1.화면에서 위젯 하나를 건드리면 Streamlit 은 무엇을 하냥?
Q2.st.button 은 언제 True 가 되냥?
Q3.count = 0 으로 시작하는 카운터가 계속 1에서 멈추는 이유는?
코딩냥

가장 중요한 고비를 넘었다냥! 이 규칙만 알면 이제 무섭지 않다냥. 다음 시간엔 지금까지 배운 걸 몽땅 합쳐서 연습 문제를 풀어보자냥. 그 다음엔 드디어 첫 미니 프로젝트 BMI 계산기다냥!

10 / 33
이전2부 · 사용자에게 입력받기 · 숫자와 날짜 입력다음2부 · 사용자에게 입력받기 · 연습하기 Level 1