한달여 정도 chatGPT와 gemini에 물어보면서 개발 기획서를 정리한 내용으로 각각의 LLM들이 작성한 코드들을 한번 돌려보는 시간을 가져본 내용을 공유하려고 합니다. :)
지금까지의 요청 내용은 줄글, 풀어쓴 내용들이어서 LLM이 이해하기 쉽게 작성하라고 하니 아래처럼 작성한다고 하길래 가급적 한번 구성을 맞춰보았습니다.
# 금융 데이터 시각화/관리 웹 플랫폼 개발 기획서
## 1\. 개요
* **목표:** MongoDB에 저장된 한국/미국 주식, 지수, 환율 데이터를 로컬 웹 환경에서 시각화하여 조회하고, 관련 메타데이터(티커명 등)를 관리할 수 있는 대시보드 구축
* **핵심 가치:** 다양한 금융 데이터의 직관적인 차트 시각화(캔들스틱, 이동평균선) 및 상호 비교 분석 기능 제공
## 2\. 기술 스택 및 환경
* **Language:** Python 3.12
* **Web Framework:** Flask 3.0.3
* **Database:** MongoDB (PyMongo 4.15.3)
* **Data Processing:** Pandas 2.2.2, NumPy 1.26.4
* **Frontend (권장):** Jinja2 템플릿 + 차트 라이브러리 (Plotly.js 또는 ApexCharts, Highcharts 등 금융 차트 지원 라이브러리 활용 예정)
## 3\. 데이터 모델링 (Database Schema)
finance.json 참고
## 4\. 기능 상세 명세
### 4.1. 공통 기능 (User Interface)
* **검색 기능:**
* 모든 뷰어 상단에 검색바 제공
* **검색 기준:** Ticker(코드) 또는 Name(종목명)
* **자동 완성(Autocomplete):** 키워드 입력 시 매칭되는 종목 리스트 드롭다운 제공
* **신규 생성하는 ticker_metadata의 ticker나 name을 참조 할것
* **차트 공통 요건 (캔들스틱):**
* **X축(시간):** 휴장일(데이터가 없는 날)은 차트에서 제외하여 캔들이 연속적으로 보이도록 처리 (Gap 제거).
* **기간 설정:** 기본 1개월 뷰. 마우스 휠 또는 슬라이더로 기간 축소/확대(Zoom In/Out) 가능.
* **축소/확대:** 축소 확대 시 기본적으로 보여주는 1개월 외에 이전 정보들을 보여줘야함
* **뷰 기간:** 차트 상단에 일주일, 1개월, 3개월, 6개월, 금년, 1년, 3년 5년 10년, 최대 등 버튼으로 초기 설정된 기간의 차트를 확인 할 수 있어야함.
* **차트 타입:** OHLC(시가, 고가, 저가, 종가) 캔들스틱 차트.
### 4.2. 페이지별 상세 요건
#### A. 한국 주식 뷰어 (`korean_stocks`)
* **검색:** Ticker(숫자 6자리) 및 종목명(예: 삼성전자)
* **보조 지표 (이동평균선):** 5일, 20일, 60일, 120일 선 표시
#### B. 미국 주식 뷰어 (`us_stocks`)
* **검색:** Ticker(영문) 및 종목명(예: Microsoft)
* **보조 지표 (이동평균선):** 5일, 10일, 20일, 50일, 200일 선 표시
#### C. 지수 정보 뷰어 (`indices`)
* **검색:** Ticker 및 관리자가 지정한 지수명
* **보조 지표 (옵션 선택 가능):**
* 옵션 1: 5, 20, 60, 120일 이평선
* 옵션 2: 5, 10, 20, 50, 200일 이평선
#### D. 환율 정보 뷰어 (`currencies`)
* **검색:** Ticker 및 관리자가 지정한 환율명
* **차트:** 기본 캔들스틱 차트 (이동평균선 필수 요건 없음, 필요시 추가)
#### E. 통합 비교 뷰어 (Comparison)
* **기능:**
* 한국주식, 미국주식, 지수, 환율 중 2개 이상의 대상을 검색하여 추가/삭제 가능.
* 서로 다른 스케일(가격 단위) 문제 해결 로직 적용.
* **비교 로직 (해결 방안):**
1. **2개 종목 비교 시:** **Dual Y-Axis (이중 축)** 적용. 왼쪽 축은 A종목 가격, 오른쪽 축은 B종목 가격 표시.
2. **3개 이상 또는 스케일 차이가 극심할 때:** **정규화(Normalization)** 차트 옵션 제공.
* 시작 시점을 0% 또는 100으로 기준 잡고 **등락률(%)** 그래프로 변환하여 비교.
### 4.3. 관리자(Admin) 페이지
* **데이터 업데이트 관리:**
* 각 카테고리별(한국주식, 미국주식, 지수, 환율) 데이터 수집/업데이트 실행 버튼 제공 (백엔드 크롤러/API 트리거).
* 한국주식: update_kr.py
* 미국주식: update_us.py
* 지수: update_index.py
* 환율: update_currency.py
* 각 업데이트 버튼시 각각의 스크립트가 백그라운드에서 작동되도록 구현
* 업데이트 시 `finance_db`내 각각의 종목 중 마지막 날짜 이후 정보만 업데이트 하도록 구성
* **관리 리스트 편집:**
* 데이터를 수집/관리할 대상 종목 리스트(Ticker 목록) 추가/삭제 기능.
* 참고할 collection은 `ticker_metadata` 임.
* 관리 리스트 편집 페이지는 한국주식, 미국주식,지수,환율운 각각 tab이나 별도의 페이지에서 리스트를 확인 할 수 있을 것
* 한 페이지에 많은 데이터를 보여줄 수 없기에 pagination 기능이 필요
* **메타데이터 관리 (Ticker Map):**
* `ticker_metadata` 컬렉션에 대한 CRUD 제공.
* Ticker에 매핑되는 `name`(사용자 표시 이름) 수정 기능.
* 동일한 페이지에서 update할 수 있는 기능이 필요 개별 item별로 name과 marker type을 수정해서 적용하거사 해당 페이지에서 수정된 item들을 적용하도록 기능을 구현할 것.
-----
## 5\. UI/UX 제안 사항 (추가 제안)
* **반응형 레이아웃:** 뷰어 영역을 최대한 확보하기 위해 사이드바 메뉴(Collapsible Sidebar) 형태 권장.
* **차트 라이브러리:** `Plotly` 또는 `Lightweight Charts (TradingView)` 사용 권장. (휴장일 스킵 기능 및 줌/팬 성능이 우수함).
-----
## 6. 실행
1. **데이터 업데이트 로직:**
* 관리자 페이지의 '업데이트 버튼'을 눌렀을 때 실제로 데이터를 가져오는 python script는 02.mongodb_update_fix.py 파일을 참고하면 됩니다. 이 파일을 참고해서 각각의 항목에 맞도록 스크립트를 분리/작성해줘.
2. **바로 사용 가능하도록 코드 작성**
* 지금 바로 수행가능한 app.py파일과, html, js, css 모든 파일을 flask가 작동가능한 디렉토리 구조에 맞게 작성해줘
* 가능하면 zip으로 압축해서 한번에 다운로드 받을 수 있게 해줘
결과적으로 gemini 제외하고 zip파일을 다운로드 받을 수 있게 링크는 제공해 주었으나 그 링크를 통해서 zip파일을 다운로드 받을 수 있는 것은 없었습니다. 다만 gemini는 링크 대신에 위의 기능을 구현한 파일을 zip파일로 압축하는 python 스크립트를 제공해주었습니다. 한... 30kb짜리 파이썬 스크립트를 내놓더라구요 ㅎㅎ
위 내용을 바탕으로 chatGPT, gemini, grok, kimi, perplexity에 코드를 작성해달라고 25년 12월 1일 월요일에 요청하였고, 모두 무료 버전의 LLM으로 한번 물어보고 테스트를 진행하였습니다.
아, pseudo zip파일 링크만 준 녀석들은 다시 코드 내놔해서 한땀 한땀 코드를 복붙 했습니다. ㅎㅎ
gemini : flask 구동시 필요한 파일이 모두 작성되었던 유일한 모델
chatGTP: 압축파일은 못 만들었지만 GTP도 필요한 파일은 모두 제시해 줬음
grok: flask의 app.파일에는 작성되어져 있었지만 template 폴더 내 일부 html 파일이 없어서 다시 요청했었음. 필요했던 파일이 5개 였다면 2개 정도가 비어 있음
kimi: 압축파일은 못만들었지만 GTP도 필요한 파일은 모두 제시해 줬음
perplexity: grok처럼 flask의 app.py파일에는 작성되어져 있었지만 template 폴대내 대부분의 생성되어 있어야할 html 파일들이 대부분 누락(10개가 필요하다면 8개가 없음). perplexite는 별 기대 안하고 요청해본 모델이어서 별 기대 없었습니다. :)
그리고 각 flask를 한번씩 돌려본 것을 남겨보자면...
요청서가 자세하지 않아서 모델들이 제대로 이해를 못한 결과 제대로된 결과물이 나오지 않은 것으로 각각의 화면을 한땀 한땀 설명하는 프롬프트를 작성해야할듯으로 보이네요
모든 모델에서 이상하게 mongodb에서 주가정보를 load하지 못했다는 공통점이 있어서 요청서에 문제가 있어보이긴 합니다. 그래도 grok와 kimi 모델에서는 메타데이터 관리를 위한 기능은 작동되는 것이 신기하긴 했습니다. :)
결론: 요청서나 설명하는 문장을 좀 더 다듬어 보는 걸로
![]() |
| 출처: @ye._.vely618 |

