티스토리 뷰

 

아침 6시부터 공부함! 뿌듯!


1회차 복습 퀴즈

  • Python 버전: Streamlit 앱 개발 시 Python 3.10~3.14 버전 권장
  • 실행 명령어: streamlit run 명령어 사용 (일반 Python 실행 방식과 다름)
  • st.metric: KPI 지표나 전월 대비 변화량 등을 표시할 때 사용
  • st.dataframe vs st.table: st.dataframe은 정렬, 필터링, 검색 등 인터랙티브 UI 제공, st.table은 고정된 데이터 형태로 표시
  • st.write vs st.dataframe: st.write는 범용 출력 함수지만 특수 옵션 처리 불가, st.dataframe은 가로/세로 크기 등 전용 파라미터 지정 가능
  • 위젯 종류:
    • multiselect: 여러 항목 동시 선택 가능
    • checkbox: True/False 반환
    • radio: 선택한 옵션값 반환
    • spinner: 작업 중임을 알리는 로딩 표시

 

st.write와 st.dataframe 차이점

  • st.write: 범용 출력 함수로 데이터프레임, 차트, 텍스트 등 다양한 형태 출력 가능
  • st.dataframe: 데이터프레임 전용으로 가로/세로 크기 등 특수 파라미터 지정 가능
  • 두 함수 모두 데이터프레임 출력 시 정렬, 필터, 검색 UI 제공

 

Form 사용법

  • 목적: 여러 입력을 한 번에 제출하여 재실행 최소화
  • 사용 예시: 회원가입, 설문조사, 주문서 등
  • 구문: st.form with 키워드 사용, 내부에 입력 위젯 배치, st.form_submit_button으로 제출
  • 제출 버튼 클릭 시에만 전체 코드 재실행되어 성능 최적화

 

레이아웃 컴포넌트

컬럼(Columns)

  • 용도: 화면을 가로(열) 방향으로 분할
  • 주요 파라미터:
    • spec: 정수 입력 시 컬럼 개수 지정, 리스트 형태로 비율 설정 가능 (예: [3, 1]은 3:1 비율)
    • gap: 컬럼 간 간격 (small, medium, large)
    • vertical_alignment: 컬럼 내 요소의 수직 정렬 (top, center, bottom)

탭(Tabs)

  • 용도: 같은 위치에 다른 정보를 표시
  • 사용 시기: 전달할 내용이 많거나 연관된 정보를 다르게 보여주고 싶을 때
  • 구문: st.tabs로 탭 메뉴 생성, 각 탭에 다른 콘텐츠 배치

컨테이너(Container)

  • 용도: 요소들을 논리적으로 그룹화
  • 기능:
    • border로 테두리 설정 가능
    • height로 높이 지정 가능, 내용이 넘치면 자동 스크롤 생성
  • 사용 예시: 동일한 정보/그룹을 묶을 때

Expander

  • 용도: 정보를 펼치거나 접을 수 있는 확장 가능한 영역
  • 주요 옵션:
    • label: 제목
    • expanded: 펼친/접힌 초기 상태 설정
  • 사용 시기: 추가 정보나 상대적으로 덜 중요한 정보를 숨김 처리할 때

st.empty

  • 용도: 빈 컨테이너를 생성하여 나중에 내용 동적 교체
  • 사용 예시:
    • 로딩 상태 표시
    • 카운트다운
    • 페이지마다 다른 필터 영역 구성
  • 특징: 현재 위치를 먼저 확보하고 나중에 내용을 변경 가능

st.space

  • 용도: 요소 사이의 수직 간격 제어
  • 옵션: small (~12px), medium (~40px), large (~68px), 또는 픽셀 값 직접 지정

Dialog (모달 팝업)

  • 용도: 기존 레이아웃을 유지하면서 팝업창으로 정보 표시 또는 입력 받기
  • 구문: st.dialog로 생성, width='large'로 크기 조절 가능
  • 중요: Dialog 내 입력값을 다른 곳에서 사용하려면 session state에 저장 필요
  • 확인/취소 Dialog: 삭제 등 중요한 작업 전 사용자 확인 받을 때 사용

 

사이드바(Sidebar) 설정

  • 용도: 필터, 내비게이션, 설정 옵션 배치
  • 구문: st.sidebar 접두어 추가하여 사이드바에 위젯 배치

필터 구현 시 주의사항

  • key 값의 역할:
    • 위젯에 key 지정 시 자동으로 session state에 저장
    • 다른 페이지에서 필터 값 접근 가능
    • 위젯 값 변경 시에도 값 유지
  • value와 session state 동기화: value에 session state 값을 넣어야 시각적 동기화 완성
  • 필터 초기화: session state의 key 값 삭제로 초기화 가능

 

Session State와 Cache Data

Session State

  • 특징:
    • 개별 사용자마다 독립적인 데이터 저장
    • 로그인 상태, 개인 설정값 등에 적합
    • 새로고침 시 데이터 소멸
  • 사용법: st.session_state.변수명 형태로 접근
  • 초기화: if문으로 변수 존재 여부 확인 후 초기값 설정

Cache Data

  • 특징:
    • 모든 사용자가 공유하는 데이터
    • CSV 파일 등 공통 데이터에 적합
    • 새로고침 후에도 데이터 유지
  • 사용법: @st.cache_data 데코레이터로 함수 캐싱

 

다중페이지(Multi-page) 앱 구조

폴더 구성

  • 기본 구조:
    • main.py: 진입점 (설정 파일)
    • pages/ 폴더: 각 페이지 파일들 저장
    • data/ 폴더: 데이터 파일 저장

main.py 설정

  • st.set_page_config: 앱 전체 설정
    • page_title: 페이지 제목
    • page_icon: 아이콘
    • layout: 레이아웃
    • initial_sidebar_state: 사이드바 초기 상태
  • menu_items: 우측 상단 햄버거 메뉴 커스터마이징
  • st.Page: 페이지 정의 (경로, 제목, 아이콘, default 설정)
  • st.navigation: 네비게이션 바 구성 (딕셔너리로 섹션 구분)

페이지 간 데이터 공유

  • 핵심 원칙:
    • 직접 선언한 session state 값만 페이지 간 유지됨
    • 위젯의 key로 생성된 session state는 페이지 이동 시 소멸
  • 해결 방법:
    1. 명시적으로 session state 변수 선언
    2. 위젯에 임시 key 값 부여 (예: _income_range)
    3. on_change 함수로 session state 업데이트
    4. 다른 페이지에서 명시적 session state 값 사용

사이드바 영역 동적 변경

  • st.empty()로 플레이스홀더 생성:
    • main.py에서 sidebar_placeholder = st.sidebar.empty() 선언
    • 각 페이지에서 st.session_state.sidebar_placeholder.container()로 내용 교체
  • 용도: 페이지마다 다른 필터/내용 표시하면서 레이아웃 유지

 

성능 최적화

  • 메모리와 속도:
    • 메모리: 작을수록 좋음 (현재는 덜 중요)
    • 속도: 빠를수록 좋음 (알고리즘 최적화 필요)
  • Form 사용: 여러 입력 위젯 사용 시 재실행 최소화
  • Cache Data: 데이터 로딩 결과 재사용

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함