티스토리 뷰
2. venv 환경에서 requirements.txt 생성
2-1. 기존 가상환경 활성화
Windows 명령 프롬프트(CMD) 기준입니다.
cd C:\korail_ai
venv\Scripts\activate
활성화되면 다음과 같이 표시됩니다.
(venv) C:\korail_ai>
설치된 패키지 확인:
python -m pip list
2-2. requirements.txt 파일 생성
python -m pip freeze > requirements.txt
생성된 파일의 예시는 다음과 같습니다.
streamlit==1.50.0
openai==2.3.0
pandas==2.3.3
numpy==2.3.3
python-dotenv==1.1.1
위 버전은 형식 설명용 예시이며, 실제 파일에는 현재 가상환경에 설치된 패키지와 버전이 기록됩니다.
주요 명령어:
| pip list | 설치된 패키지 목록 |
| pip freeze | 패키지와 버전 출력 |
| pip freeze > requirements.txt | 설치 목록 파일 생성 |
| pip install -r requirements.txt | 패키지 일괄 설치 |
| pip install --upgrade openai | OpenAI 패키지 업데이트 |
| pip check | 패키지 의존성 충돌 확인 |
주의: pip freeze는 현재 환경의 모든 설치 패키지를 기록합니다. JupyterLab과 다른 실습 패키지가 포함되어 있다면 배포에 불필요한 패키지도 함께 설치될 수 있습니다.
3. 다른 PC에서 동일한 Python 환경 구성
3-1. 프로젝트 파일 복사
개발 PC에서 아래 파일을 다른 PC로 복사합니다.
korail_ai/
│
├── app.py
├── requirements.txt
└── .env.example
venv 폴더는 복사하지 않습니다. 운영체제와 Python 설치 경로에 영향을 받기 때문에 대상 PC에서 새로 생성하는 것이 좋습니다.
3-2. 새 PC에서 venv 생성
먼저 개발 PC와 동일한 Python 버전을 설치합니다. 예를 들어 Python 3.11을 사용한다면:
cd C:\korail_ai
py -3.11 -m venv venv
가상환경 활성화:
venv\Scripts\activate
3-3. requirements.txt로 패키지 설치
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
설치 확인:
python -m pip check
python -m pip show streamlit openai
이제 개발 PC와 동일한 버전의 Python 패키지를 설치할 수 있습니다. 다만 운영체제, CPU 아키텍처, Python 버전, 시스템 라이브러리까지 같아야 완전히 동일한 실행 환경에 가까워집니다.
4. Streamlit 서버를 외부 PC에서 접속하도록 설정
4-1. 기본 실행
streamlit run app.py
기본적으로 다음 주소로 접속할 수 있습니다.
http://localhost:8501
localhost는 현재 실행 중인 PC 자신을 의미합니다.
4-2. 외부 PC 접속 허용
streamlit run app.py --server.address 0.0.0.0 --server.port 8501
주요 옵션:
| --server.address 0.0.0.0 | 모든 네트워크 인터페이스에서 연결 수신 |
| --server.port 8501 | 웹서버 포트 지정 |
| --server.headless true | 서버 실행 시 브라우저 자동 실행 방지 |
0.0.0.0은 서버의 수신 주소이지 사용자가 브라우저에 입력하는 접속 주소는 아닙니다.
4-3. 서버 IP 확인
서버 PC에서 CMD를 실행합니다.
ipconfig
예를 들어 서버 IP가 192.168.0.100이라면 외부 PC에서 다음 주소를 입력합니다.
http://192.168.0.100:8501
4-4. Windows 방화벽 설정
관리자 권한 CMD에서 다음 명령을 실행합니다.
netsh advfirewall firewall add rule name="Streamlit 8501" dir=in action=allow protocol=TCP localport=8501 profile=private
이 규칙은 Private 네트워크 프로필에 적용됩니다. 실제 운영 시에는 허용할 클라이언트 IP도 제한하는 것이 안전합니다.
외부 접속 시 확인할 사항
-
Streamlit 서버가 정상 실행 중인지 확인
-
서버와 사용자 PC가 서로 통신 가능한 네트워크인지 확인
-
Windows 방화벽에서 TCP 8501 허용 여부 확인
-
서버 IP 주소와 포트가 정확한지 확인
사내망이 아닌 인터넷에서 접속할 경우에는 8501 포트를 직접 공개하기보다 HTTPS 리버스 프록시(Nginx/Caddy), 인증, 접근제어를 구성하는 것을 권장합니다.
5. Streamlit + OpenAI 채팅 애플리케이션 구현
5-1. 패키지 설치
pip install streamlit openai python-dotenv
5-2. API Key 설정
프로젝트 폴더에 .env 파일을 생성합니다.
OPENAI_API_KEY=본인의_OpenAI_API_KEY
.env.example에는 실제 키 대신 다음처럼 작성합니다.
OPENAI_API_KEY=your-api-key-here
실제 .env 파일은 다른 PC로 배포하거나 Git에 업로드하지 않습니다. 각 서버에서 별도로 설정해야 합니다.
5-3. 전체 Python 소스: app.py
다음 예제는 아래 기능을 포함합니다.
-
OpenAI API 연동
-
Streamlit 채팅 화면 구현
-
사용자 질문 입력
-
AI 답변 출력
-
이전 대화 내용 유지(Session State)
-
모델 선택
-
대화 초기화
-
API 오류 처리
import osimport streamlit as stfrom dotenv import load_dotenvfrom openai import OpenAI# 1. 환경변수 로드load_dotenv()API_KEY = os.getenv("OPENAI_API_KEY")# 2. Streamlit 화면 설정st.set_page_config( page_title="Korail AI Chatbot", page_icon="🚆", layout="centered")st.title("🚆 Korail AI Chatbot")st.caption("Streamlit + OpenAI 채팅 실습")# 3. API Key 확인if not API_KEY: st.error("OPENAI_API_KEY가 설정되지 않았습니다.") st.stop()# 4. OpenAI 클라이언트 생성client = OpenAI(api_key=API_KEY)# 5. 사이드바 설정with st.sidebar: st.header("채팅 설정") model = st.selectbox( "AI 모델 선택", ["gpt-4o-mini", "gpt-4o"] ) # 대화 초기화 버튼 if st.button("대화 초기화"): st.session_state.messages = [] st.rerun()# 6. 최초 실행 시 대화 저장 공간 생성if "messages" not in st.session_state: st.session_state.messages = []# 7. 이전 대화 화면 출력for message in st.session_state.messages: with st.chat_message(message["role"]): st.markdown(message["content"])# 8. 사용자 질문 입력prompt = st.chat_input("질문을 입력하세요.")if prompt: # 사용자 메시지 저장 st.session_state.messages.append({ "role": "user", "content": prompt }) # 사용자 메시지 출력
실습용 코드이므로 오류 원문을 출력하지만, 실제 운영 환경에서는 사용자에게 내부 오류 상세를 노출하지 않고 서버 로그에 기록하는 방식이 적합합니다.
5-4. 프로그램 실행
streamlit run app.py --server.address 0.0.0.0 --server.port 8501
6. 실행 화면 예시
Korail AI Chatbot
AI Assistant
승차권 변경은 구매 경로와 승차권 상태에 따라 절차가 달라질 수 있습니다. 코레일톡 앱 또는 공식 홈페이지에서 예약 내역을 확인해 주세요. 변경이 어려운 경우 환불 후 재구매가 필요할 수 있습니다.
7. Streamlit 채팅에 사용되는 핵심 함수
| st.title() | 화면 제목 |
| st.chat_input() | 채팅 입력창 |
| st.chat_message("user") | 사용자 채팅 말풍선 |
| st.chat_message("assistant") | AI 답변 말풍선 |
| st.session_state | 대화 기록 저장 |
| st.markdown() | 채팅 메시지 출력 |
| st.spinner() | AI 응답 대기 표시 |
| st.selectbox() | AI 모델 선택 |
| st.button() | 버튼 생성 |
| st.rerun() | 화면 재실행 |
특히 st.session_state.messages는 Streamlit이 사용자 입력 때마다 스크립트를 다시 실행하더라도 현재 세션의 이전 대화 내용을 유지하는 역할을 합니다. 서버를 재시작하거나 세션이 종료되면 대화가 사라질 수 있으므로 영구 보관하려면 별도의 DB가 필요합니다.
8. 다른 PC로 배포하는 전체 명령어 요약
개발 PC
cd C:\korail_ai
venv\Scripts\activate
python -m pip freeze > requirements.txt
배포 PC
cd C:\korail_ai
py -3.11 -m venv venv
venv\Scripts\activate
python -m pip install -r requirements.txt
python -m pip check
streamlit run app.py --server.address 0.0.0.0 --server.port 8501
사용자 PC
http://192.168.0.100:8501
IP 주소는 실제 서버의 주소로 변경합니다.
- Total
- Today
- Yesterday
- SWA
- 인공지능주말교육
- 핵심집중반
- python성능
- MariaDB
- 컴퓨터시스템응용기술사
- 핀옵스
- joblib
- argocd
- 인공지능교육
- 모델저장
- 클라우드 활용
- RegeneratorRuntime
- 두음신공
- 정보관리기술사
- 고급개발자
- atom git 연동
- ci/cd
- FinOps
- 기술사
- 벡터db
- 정보처리기술사
- 경력자인공지능교육
- mysql
- 소프트웨어아키텍트
- 123회기술사
- BERT
- 클라우드 비용절감
- 아이리포
- 중급개발자
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
