목차
이제, OpenAI API를 활용한 새해 운세 프로그램 세 번째 이야기입니다. 최종 결론이고요, 드디어 OpenAI API와 연동하여 GPT가 대답해 주는 2025년 새해 운세를 구현해 보기로 하겠습니다.
새해 운세를 알려주는 OpenAI API 활용 프로그램
앞서 사주팔자 세우기 이론과 프로그램을 만들어 봤습니다. 이제는 만들어 둔 프로그램과 OpenAI API를 연동하여 새해 운세를 GPT에게 요청하고 대답을 받는 프로그램을 구현해 보기로 하겠습니다.
Streamlit Web app (WebUI)
우선, 사용자의 정보를 입력 받는 것과 새해 운세에 대한 내용을 GPT로부터 얻어오는 답변을 보여주는 화면이 필요합니다. Python 언어로 복잡하지 않고 간단하게 할 수 있는 방법은 두 가지로 Flask와 Streamlit을 생각해 볼 수 있습니다. 오래 전이지만 이전 글에서 Flask 방식으로 구현해 본 글이 있으므로, 이번에는 Streamlit으로 구현해 보도록 하겠습니다.
코드 구현 전에 Streamlit에 대해 간단하게 살펴보면,
Streamlit이란, 인터엑티브한 웹 애플리케이션을 간단한 코드로 만들 수 있는 파이썬 라이브러리입니다. 주요 특징은 아래와 같습니다.
- 간단한 코드: Streamlit은 간단한 파이썬 코드만으로 웹 애플이케이션을 구축할 수 있습니다. HTML, CSS, JavaScript와 같은 웹 기술을 몰라도 됩니다.
- 빠른 개발: 몇 줄의 코드로 그래프, 데이터 테이블, 슬라이더 같은 위젯을 추가할 수 있습니다.
- 실시간 대화형 애플리케이션: 사용자의 입력(버튼, 슬라이더 등)에 따라 결과를 실시간으로 업데이트합니다. (이 부분이 가장 강점 중 하나 같은데요, Streamlit은 GUI 구성을 직접하지 않아도 구현합니다. 물론 정해진 컴포넌트를 이용하는 거죠.)
- 이외 데이터 시각화, 배포 용이 등 여러가지 장점을 가지고 있습니다.
- 하지만, 이런 간단하고 빠른 프로그램들은 제약도 많습니다. 복잡한 구조나 기능, 세부적인 디자인 적용 등은 불가능하죠.
이러한 Streamlit을 사용하려면 일단 설치를 해야겠죠? 다음과 같이 pip를 이용해 설치합니다.
pip install streamlit
이후 나중에 streamlit으로 구현한 프로그램을 실행하려면 다음과 같은 명령으로 실행합니다.
streamlit run 파일명
새해 운세 프로그램
이제 실제 코드를 구현해 보겠습니다.
우선, 이전 글에서 구현했던 사주팔자 세우는 함수들을 하나의 클래스로 만들어서 정리해 둡니다. 다음과 같이 말이죠.

KoreanLunarCalendar는 양력 음력 변환을 위해 import했습니다. MyungriCalculator라는 클래스를 만들어 사주팔자 기둥 세우는 함수들을 이 클래스 안에 정리했습니다. 년주, 월주, 일주, 시주에 관한 자세한 내용은 이미 이전 글에서 정리했기 때문에 클래스 명 정도만 언급하고 넘어 가겠습니다. 물론 파일명 역시 동일하게 MyungriCalculator.py로 명명했습니다.
이제, 앞서 설치했던 streamlit을 적용한 메인 부분을 구현해 보겠습니다.

설치한 streamlit을 import하고, openai api 라이브러리도 import합니다. 만일 openai api가 설치되어있지 않다면 아래와 같이 설치한 후 import합니다.
pip install openai
또한, 앞서 만들었던 MyungriCalculator를 import한 후 정의한 사주팔자 기둥 함수를 가져옵니다.
streamlit이 간단하게 구현 가능하다는 것은 위 코드에서도 나타나는데, 위와 같이 그저 title, text_input, date_input 등을 통해 해당 기능을 동작하는 GUI를 간단하게 구현할 수 있습니다. 본문 아래에서 작성된 웹 UI의 모습을 보여드리겠습니다.
이제 openai api의 핵심 부분이에요. 메시지를 요청하고 응답을 받는 부분입니다. model을 선택해야 하고 메시지를 구성해야만 합니다. 작년에는 모델에 따라 소요되는 토큰과 비용이 차이가 있었는데, 최근엔 GPT-4 이상에서는 거의 동일 한 것 같습니다.

streamlit 기반으로 구성하는 웹 애플리케이션은 이게 다입니다. HTML 페이지를 구성할 필요도 없습니다. Flask나 네이티브 웹 앱 방식과는 비교가 안되게 간단하죠.
운세 프로그램 실행
이제 구성한 코드를 실행해 볼까요? “streamlit run 파일명“을 입력하여 실행합니다. 여기에서 파일명은 “FourPillars_Streamlit.py”이었어요.

streamlit이 실행되면 터미널에 위와 같이 출력되고 웹 브라우져가 실행됩니다. 만일 웹브라우져가 실행되지 않는다면 브라우저를 실행하여 http://localhost:8501 주소를 입력하면 됩니다.
실행된 웹 브라우저 화면은 아래와 같습니다. 위 코드에서 작성한 st.title(“2025년 새해 운새, GPT에게 물어봐!”)이 보입니다. 폰트 사이즈를 정의하지 않아도 기본 정보가 입력되어 적용됩니다. 아래 st.text_input(“이름을 입력하세요:”) 부분 역시 기본적으로 적용된 형태입니다. 그럼에도 불구하고 자연스럽게 정상 동작을 합니다.

자, 이제 정보를 입력하고 GPT의 대답을 받아 볼께요. 이름과 생년월일시를 입력하고, 맨 아래 “운세 확인하기”를 눌러 요청을 전달합니다. GPT가 반응할때까지 살짝 시간이 걸립니다. 네트워크 “에러일까? 아니네!” 정보의 시간? 대략 5초?
물론 이런 딜레이 부분은 어떤 요청을 했는가, 랭체인을 이용한 프롬프트 엔지니어링 관련 부분을 추가했는가에 따라 또 달라는 것이므로 여기에서는 논외로 합니다.
자, 이제 GPT에서 대답한 운세 결과는 아래와 같이 나타납니다. 매우 정리된 문장 구성과 문맥으로 대답을 하고 있습니다.

화면 상에서는 내용이 잘 보이지 않으나 상세 내용을 살펴보면 명리학 이론이 기초하여 사주 팔자의 구성과 관계를 상세하게 설명해 주고 있습니다.

년주와 대운, 월주와 년운, 일주와 년운 등 각 사주 기둥과 년운의 관계를 설명한 후 아래에 종합적으로 설명합니다. GPT가 제가 생각했던 것 보다 더 논리적이고 명리학에 대한 이해를 잘 갖추고 있는 것 같네요.
지금까지 OpenAI API를 활용한 새해 운세 프로그램을 구현해 봤습니다.
- 생성형 AI 소유권, 챗지피티 지브리 스타일 이미지 사례 #1
- OpenAI API로 구현하는 AI Agent #2, “프로그래밍 AI 에이전트”
- OpenAI API로 구현하는 AI Agent, GPT-4o와 Function Tool 활용
- AI Detector로 AI content 판별이 가능할까? 기준과 현실 #1
- 검색 키워드와 데이터 독점 문제, 오픈API로 키워드 추출 방법 #1