7장. 웹 UI 연동과 배포
정리
- Streamlit 은 파이썬 파일 하나를 웹 화면으로 바꿉니다. 손님이 위젯을 만질 때마다 스크립트가 맨 위부터 다시 돌고, 그때 남는 것은 위젯의 값과
st.session_state입니다. 실습 1에서 화면을 세 번 그리는 동안runs는 3 이 되었지만 보통 변수clicks는 0 으로 돌아갔습니다. st.session_state는 손님(브라우저 탭)마다 따로 있는 메모장입니다. 대화 기록을 여기에 두고 다시 돌 때마다st.chat_message로 다시 그리면 채팅 화면이 됩니다. 실습 2에서 첫 손님의 기록은 6개, 새 손님은 0개에서 시작해 섞이지 않았습니다.- 챗봇 로직은
make_chain(),answer()같은 함수로 화면과 떼어 둡니다. 4장의 세션 id 와 기록 상자 자리에st.session_state가 들어갑니다. - 모델과 문서 색인처럼 무거운 부품은
st.cache_resource로 서버에서 한 번만 만들어 모든 손님이 함께 씁니다. 실습 5에서 스크립트는 세 번 돌았지만 약관 색인(조각 11개)은 한 번만 만들었습니다. st.write_stream(chain.stream(...))은 답을 조각이 오는 대로 말풍선에 이어 쓰고, 다 쓴 글을 돌려줍니다. 그 글을 그대로 기록에 넣습니다.- 키는 클라우드에서는 Secrets 칸(
st.secrets), 내 PC 에서는.env에서 읽습니다.secrets.toml이 없으면st.secrets가FileNotFoundError를 내므로try로 감쌉니다. - 배포할 폴더에는 앱, 앱이 읽는 파일,
requirements.txt, 비밀 값 견본,.gitignore가 갖춰져야 합니다. 프로젝트에서 실수를 넣은 폴더는AppTest두 가지를 통과하고도 파일 점검 다섯 가지에서 모두 걸렸습니다.