웹 개발 입문
이미지와 파일 업로드여러 페이지로 나누기페이지 이동과 링크느린 앱을 빠르게기다림을 보여주기페이지 설정·테마와 비밀값
놀면 뭐 하니,
그냥 하는거야.

느린 앱을 빠르게

심화 강이다냥

이번 강은 심화 내용이라냥. 앱이 느려서 답답할 때 꺼내 쓰는 기술이다냥. 지금 앱이 빠르면 "이런 게 있구나" 하고 넘어가도 된다냥!

코딩냥

9강에서 배운 재실행 규칙, 기억하냥? 위젯을 건드릴 때마다 코드가 처음부터 전부 다시 돈다냥. 그런데 그 안에 무거운 일(큰 파일 읽기 등)이 있으면, 매번 다시 해서 앱이 답답하게 느려진다냥. 오늘은 그걸 해결하는 캐시 를 배운다냥!

오늘의 학습 목표

  • 재실행 때문에 앱이 왜 느려지는지 이해한다.
  • @st.cache_data 로 무거운 일을 한 번만 하게 만든다.
  • 캐시가 어울리는 상황을 안다.
실습 준비·필요한 패키지와 버전
  • pandas2.2 이상표(DataFrame)로 데이터를 다루기
  • streamlit1.40 이상파이썬 코드로 웹 화면 만들기

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

pip install "pandas>=2.2" "streamlit>=1.40"

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

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

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

1단계 · 매번 다시 하니까 느리다냥

코딩냥

큰 CSV 파일(수천 줄)을 읽는 앱을 생각해보자냥. 슬라이더를 한 번 밀 때마다 재실행되고, 그때마다 그 큰 파일을 처음부터 다시 읽는다냥. 파일이 안 바뀌었는데도 말이다냥. 이게 낭비라냥!

매번 장 보러 가기 vs 냉장고에 넣어두기

요리할 때마다 시장에 다시 가서 재료를 사 오면 너무 오래 걸린다냥. 한 번 사서 냉장고에 넣어두면 다음엔 꺼내 쓰기만 하면 된다냥.

캐시는 바로 그 냉장고라냥. 한 번 한 일의 결과를 저장해뒀다가, 다음엔 다시 안 하고 저장된 걸 꺼내 쓴다냥!

2단계 · 캐시 붙이기 — @st.cache_data

코딩냥

방법은 아주 간단하다냥. 무거운 일을 하는 함수를 만들고, 그 위에 @st.cache_data 한 줄을 붙이면 끝이라냥!

import streamlit as st
import pandas as pd

@st.cache_data
def load_data():
    return pd.read_csv("big_data.csv")   # 무거운 일이라냥

df = load_data()      # 처음 한 번만 진짜로 읽고, 그 다음엔 냉장고에서 꺼낸다냥

st.dataframe(df)

@ 로 시작하는 한 줄의 정체

함수 바로 위에 붙는 @st.cache_data 를 데코레이터라고 부른다냥. "이 함수의 결과를 저장해뒀다가 재사용해줘" 라고 Streamlit 에게 부탁하는 표시라냥. 함수 정의 바로 위 줄에 붙여야 한다냥!

3단계 · 캐시가 똑똑한 점

코딩냥

캐시는 입력이 같으면 저장된 결과를 주고, 입력이 다르면 새로 계산한다냥. 그래서 안심하고 쓸 수 있다냥.

import streamlit as st

@st.cache_data
def slow_square(n):
    # 실제로는 오래 걸리는 계산이라 치자냥
    return n * n

x = st.slider("숫자", 1, 100, 10)
st.write(slow_square(x))   # 같은 x 면 저장된 값, 새 x 면 새로 계산이라냥

캐시가 어울리는 것

  • 큰 파일 읽기 (read_csv)
  • 인터넷에서 데이터 받아오기
  • 시간이 오래 걸리는 계산

반대로 매번 달라져야 하는 것(예: 현재 시각)에는 캐시를 쓰면 안 된다냥. 옛날 값이 계속 나오기 때문이라냥!

복습 퀴즈

Q1.재실행 때 무거운 일을 매번 다시 해서 앱이 느려질 때 쓰는 것은?
Q2.함수 바로 위에 붙는 @st.cache_data 같은 줄을 뭐라고 부르냥?
Q3.캐시를 쓰면 안 되는 것의 예는?
코딩냥

느린 앱을 빠르게 만드는 법을 배웠다냥! 다음 시간엔 앱이 일하는 동안 사용자가 답답하지 않게 기다림을 보여주는 법을 배운다냥. 로딩 표시, 진행 막대 같은 거다냥!

27 / 33
이전5부 · 진짜 앱처럼 · 페이지 이동과 링크다음5부 · 진짜 앱처럼 · 기다림을 보여주기