MLOps 부트캠프 by 한경+토스뱅크

금융 데이터 AI 챗봇 개발기: 4) 드디어 모델 배포! 사이트가 생기니 좋구만!

나니니 2025. 1. 24. 19:51
👇 이전 포스팅은 아래에서 확인할 수 있습니다. 👇  
1️⃣ 금융 데이터 AI 챗봇 개발기: 1) 그래서 PDF를 어떻게 분석할건데? (기획부터 데이터 전처리까지)  
 - 출처: https://nanini.tistory.com/90
2️⃣ 데이터 AI 챗봇 개발기: 2) LLM 모델을 통한 챗봇 만들기 (RAG부터 Chain까지)   
- 출처: https://nanini.tistory.com/91
3️⃣ 금융 데이터 AI 챗봇 개발기: 3) 추천 알고리즘, 개인 선호도를 반영한 레포트 추천 기능 만들기
- 출처: https://nanini.tistory.com/92 

 
 
앞에서 세 개 포스팅으로 모델을 구현한 이야기의 최종판, 
기능들을 한데 모아서
RePick이란 서비스를 만들었다. 
 
- RePick (https://repick.site/)
(*현재는 AWS를 내려서 사이트에 접속할 수 없다)
 
서비스명인 RePick은 Research Pick 을 줄여서 만든 네이밍인데, 
거의 몰표를 받고 투표에 뽑혔다. 
2음절이라 입에 착착 붙고, 텍스트 그대로 로고로 만들기도 좋아서 서비스명으로 결정되었다. 

RePick Service Flow

RePick의 
서비스 전반 내부 플로우는 아래처럼 구성되었다. 
(*참고로 하단의 Internal Zone 내 보이는 PlantiPay는 다른 팀에서 만든 페이시스템이다)

RePick Service Flow

크게 내부존과 데이터존으로 구분되어 있으며,  
세부 기능들은 각각 MSA로 구성되어 서로 통신하는 구조다. 

그리고 RePick의 핵심인 챗봇과 관련된 기능은 데이터존에 별도로 구성되어 있으며 
ChaotbotAPI를 통해 데이터존의 LLM과 통신하게 된다. 
 
그리고 MLOps Pipeline은 아래처럼 되어 있다. 

RePick MLOps Pipeline

왼쪽부터
pdf 수집부터 LLM 챗봇까지의 전반적인 Flow가 구성되어 있는데,
이렇게 구성된 Flow는 Jenkins를 통해 
매일 저녁 10시에 자동으로 실행되도록 구현했다. 
 
최종적으로 목표했던 바는
매일 크롤링 -> 크롤링 된 PDF parser -> Embedding -> ChromaDB update 였으나
 
PDF parser와 Embedding에 이미 많은 비용을 지불했던 터라
이 부분은 코드상으로만 구현했다. 
 

RePick 페이지별 기능 소개

RePick에는 크게 
메인, 챗봇, 커뮤니티, 레포트 저장소, 마이페이지가 있다. 
 

메인

먼저 아래 보이는 화면이 RePick 메인인데, 
로그인을 하기 전에는 '종목/산업' 레포트가 최신순으로 정렬되어 있다. 
로그인을 하게 되면, 추천 알고리즘에 의해 개인이 저장한 북마크, 추천 산업/기업 레포트에 따라
결과값이 바뀌게 된다.
 
그리고 오른쪽에는 한경에서 매일 최신 뉴스를 크롤링해오도록 했고, 
그 하단에는 커뮤니티 내 게시글의 조회순에 따라 인기글이 보여지도록 구성했다.

RePick: 메인 개인화 추천 레포트

그리고 '종목분석 레포트'를 누르면, '00기업 분석해줘'
'산업분석 레포트'를 누르면, '00 현황 알려줘' 로
문장이 자동완성되어 챗봇에 입력되게 된다. 
 
이 기능을 생각했을 때, 
좀 실용적인데? 라고 생각함 ㅎㅎㅎㅎ
 

챗봇

챗봇 페이지에서는
ChatGPT, perplexity, Linear처럼 질문하면 응답하는 방식으로 구성했는데, 
레퍼런스로 가장 크게 이용한건 Linear였다. 
깔끔하고, 강조될 부분만 강조되고, 뭐랄까 한국인에게 최적화되어 있달까..?
UI가 제일 마음에 들었음
 
금융 레포트는 대부분 table(표)가 포함되어 있다보니,
챗 대화에서 테이블이 깔끔하게 나오도록 하는게 관건이었는데,
다행히 프론트쪽에서 DB에 저장된 Markdown을 깔끔하게 변환되어 나오도록 했다.

RePick: Chatbot

다음은 사이드바!
 
사이드바는 Chat 히스토리가 나오도록 했고, 
언제든지 삭제하거나 해당 챗으로 이동할 수 있도록 했다.

RePick: Sidebar

 

커뮤니티 페이지

여긴 산업별로 게시판을 만든 후에
커뮤니티 메인에는 인기 게시글과 실시간 채팅방을 만들었다. 
 
실시간 채팅방
채팅방에 들어와있는 분들끼리 실시간으로 채팅을 진행할 수 있고, 산업이나 기업에 관한 의견을 나눌 수 있도록 했다. 
 
그리고 인기 게시글
주식 커뮤방을 참고했는데, 각 산업별로의 인기글을 모아서 볼 수 있도록 하고
게시글도 산업별로 작성할 수 있도록 했다. 

RePick: Community

다음은

레포트 저장소

여긴 MLOps에서 크롤링해온 금융 레포트를 
종목(기업)/산업 별로 원본을 다운로드 할 수 있도록 했다. 
 
챗봇에서는 여러 레포트를 종합하여 종목과 산업을 알려주지만,
출처로 나온 레포트들의 원본을 찾아볼 수 있도록 했다.
 
검색창도 구현하여, 제목&기업명의 키워드에 따라 검색되도록 했다. 

RePick: Reports

 
그리고 추가적으로
admin 페이지와 기능도 만들었다!

admin 페이지

별도로 구성된 어드민 페이지에 들어가면
연도별/월별 가입자 수와 로그인 통계를 차트로 구현하여 보기 쉽게 시각화를 했다. 

그리고 
슈퍼 관리자 페이지에서 일반 관리자를 추가/제거 할 수 있고,
유저 관리에서 유저의 정보들을 확인하거나, 유저가 남긴 문의 내용들을 확인하고 대응할 수 있다. 
 
이렇게 우리가 고군분투해서 만든
RePick의 세부 기능의 소개를 마친다. 
 

데모 영상

아래 영상은 RePick의 전체 기능 데모 영상인데, 1분 40초에 2.5배속을 적용해서
지루하지 않게 한국인 최적화 속도로 볼 수 있다 ㅎㅎㅎㅎㅎ

 
 


6주간의 RePick 개발기가 드디어 끝이 났다.
 
서로를 잘 모르던 7명이 힘을 모아 하나의 서비스를 만들었고, 
감사하게도 RePick 으로 '최우수상'까지 탈 수 있었다.
 
이때, 도파민이 쫙 퍼졌다 ㅎㅎㅎㅎㅎㅎㅎ
 
돌아보면
PM으로서, 팀장으로서
오랜만에 회사밖을 나와서 제일 열정넘치게 무언가에 집중한 시기였는데
함께 한 친구들의 열정과 재능, 패기도 많이 배운 시간이라
결과도, 결과물도 좋았던 것 같다. 
 
그리고 부트캠프의 소회도 짧게 풀자면, 
배우고 싶었던 것을 마음껏 배우고 실현해보니
회사 다닐 때보다 훨씬, 훠어어얼씬 재미있었다. 
(현실의 벽을 보기 전까지....)
 
명절 연휴 직전에 
불합통보를 3개나 때려박고서
실력이 모자란 나를 탓하는 중이다. 
(더 연습할 껄, 더 공부할 껄..)
 
회사와 핏이 맞지 않아서 떨어졌다고들 하지만, 
난 RG, 내 능력을..후..
 
무튼
최종 프로젝트를 포스팅으로 정리하고 나니
한결 마음이 가벼워졌다. 
 
다시 힘내서
취준GO, 취준GO!