▶️25

[영상] Streamlit으로 대시보드 만들기

Docker 배포 & 테스트

학습 목표

Streamlit의 핵심 위젯(st.chat_input, st.chat_message, st.plotly_chart)을 활용해 제조 AI 대시보드를 구성할 수 있다 Streamlit Session State를 사용해 대화 이력과 설비 상태를 관리하는 방법을 설명할 수 있다 FastAPI 백엔드와 Streamlit 프론트엔드를 SSE로 연결해 스트리밍 응답을 표시하는 코드를 작성할 수 있다 Docker Compose로 Streamlit UI와 FastAPI 백엔드를 함께 컨테이너화하는 구성을 작성할 수 있다

영상 핵심 정리 — Streamlit으로 대시보드 만들기

이 영상은 Streamlit으로 제조 AI 어시스턴트의 사용자 인터페이스를 30분 만에 구성하는 방법을 실습한다. FastAPI 백엔드와 연결해 실시간 진단 결과를 대화형으로 표시하는 대시보드를 만든다.


1. 제조 AI 대시보드 핵심 코드

import streamlit as st
import requests

st.set_page_config(page_title='제조 AI 어시스턴트', layout='wide')

@st.cache_data(ttl=300)
def load_machines():
    return requests.get('http://api:8000/machines').json()

with st.sidebar:
    st.header('설비 선택')
    machines = load_machines()
    machine_id = st.selectbox('설비', machines)
    st.metric('현재 진동', '2.8g', '+0.3g')
    st.metric('온도', '72°C', '-2°C')

if 'messages' not in st.session_state:
    st.session_state.messages = []

for msg in st.session_state.messages:
    with st.chat_message(msg['role']):
        st.write(msg['content'])

if prompt := st.chat_input('알람 코드 또는 질문을 입력하세요'):
    st.session_state.messages.append({'role': 'user', 'content': prompt})
    with st.chat_message('assistant'):
        response = requests.post(
            'http://api:8000/diagnose',
            json={'machine_id': machine_id, 'alarm_code': prompt},
            stream=True
        )
        result = st.write_stream(response.iter_content(chunk_size=None))
    st.session_state.messages.append({'role': 'assistant', 'content': result})

2. 대시보드 레이아웃 구성

┌─ 사이드바 ─┬──────── 메인 영역 ──────────┐
│ 설비 선택  │  [탭1: AI 진단 채팅]        │
│ 실시간 KPI │  [탭2: 센서 실시간 차트]    │
│ 알람 목록  │  [탭3: 정비 이력 테이블]    │
└────────────┴────────────────────────────┘

함정 주의: Streamlit은 인터랙션마다 전체 스크립트를 재실행한다. @st.cache_resource 없이 AI 모델이나 DB 연결을 스크립트 최상단에 두면 사용자가 버튼을 클릭할 때마다 모델이 재로드돼 응답이 수십 초 걸린다. 무거운 리소스는 반드시 캐시해야 한다.


다음 task와의 연결

다음 reading 'Docker Compose로 LLM+벡터DB+UI 묶기'에서는 오늘 만든 Streamlit UI, FastAPI 백엔드, Chroma 벡터DB를 Docker Compose 단일 파일로 묶어 한 번에 실행하는 방법을 배운다. 서비스 간 네트워크 연결과 볼륨 마운트가 핵심이다.

AI로 학습하기 — 꿀팁
🤖Streamlit 대시보드 코드 생성 요청AI 학습 팁

AI 에이전트에게 제조 설비 모니터링용 Streamlit 대시보드 코드를 작성하게 하고, st.session_state로 설비 선택·알람 이력을 유지하는 구조가 올바른지 확인하세요.

스마트팩토리 설비 모니터링용 Streamlit 대시보드를 만들어줘. st.title(), st.chat_input(), st.plotly_chart()를 사용해 설비 5대의 실시간 센서 값을 시각화하고, st.session_state에 설비 선택 상태·알람 리스트·AI 대화 이력을 저장하도록 구현해줘. FastAPI SSE 응답을 st.write_stream()으로 실시간 스트리밍 표시하는 코드도 포함해줘.
이 팁이 도움이 됐나요?
핵심 포인트
  • Streamlit은 Python 코드를 그대로 웹 앱으로 만들어준다 — `st.title()`, `st.chat_input()`, `st.plotly_chart()` 3개만 알아도 AI 대시보드 완성 가능하다
  • `st.session_state`가 페이지 새로고침 간 상태를 유지하는 유일한 방법이다 — 대화 이력·설비 선택·알람 리스트를 모두 session_state에 저장해야 한다
  • `st.write_stream(response.iter_content())`으로 FastAPI SSE 응답을 Streamlit에서 실시간 스트리밍으로 표시할 수 있다
  • Streamlit은 사용자 인터랙션마다 전체 스크립트를 재실행한다 — 무거운 연산(모델 로드, DB 연결)은 `@st.cache_resource`로 캐싱해야 성능 저하를 막는다