레이블이 IVES인 게시물을 표시합니다. 모든 게시물 표시
레이블이 IVES인 게시물을 표시합니다. 모든 게시물 표시

화요일, 11월 04, 2025

LLM을 이용한 환율, 지수, 주가 비교 사이트 제작기 (2)

기존에 사용하던 sqlite3 기반으로는 매주 없데이트 하는데 시간이 오래 걸려서 mongodb로 한번 변경해보는 작업을 진행하였는데 만족스러웠습니다. 

※ mongodb가 상장되어 있는지도 몰랐는데 이번 Dan ives의 ETF(IVES, IVE아닙니다. 물론 IVE도 있고 IVE도 있습니다.)에 mongodb(MDB)가 포함되어 있어 간만에 다시 mongodb를 사용해보기로 하여 아래와 같이 환율, 지수, 주가 정보를 업데이트하는 코드를 수정해 보았습니다.


첫번째 수정작업(Gemini)

(기존에 sqlite3로 사용하던 스크립트 업로드) 첨부한 파일은 기존에 sqlite3를에 테이블을 생성해서 파이썬으로 야후 파이낸스에서 각 ticker 정보를 검색해서 sqlite3로 저장하는 스크립트들 입니다.
환율과 지수, 한국주식, 미국주식 정보를 가져와서 sqlite3 테이블에 저장하는 것입니다.
나는 이 스크립트를 mongodb와 python을 사용해서 작동하도록 하고 싶습니다.
몽고디비는 내 컴퓨터에 설치하였습니다.
첨부한 파일의 스크립트를 참고하여 데이터베이스와 table을 생성하는 코드를 작성해줘 그리고 두번째로는 설치한 몽고DB(mongodb://localhost:27017)에 ticker를 업데이트하는 파이썬 코드를 작성해줘.
현재는 sqlite3에서 table lock로 한번에 한개의 정보만 다운로드 받아 insert하도록 되어있습니다. 환율,야후파이낸스에서 지수,한국주식,미국주식정보를 빠르게 받을 수 있도록 개선된 파이썬 코드를 작성해줘.
python 3.12 버전, yfinance 0.2.61 기준으로 코드를 작성해줘


아쉽게도 기존에 LLM으로는 해결하지 못했던 Session 문제가 그대로 노출되어서 아래와 같이 기존에 문제없이 사용하는 Session 코드를 그대로 보여주고 참고하라고 해서 다행이 잘 해결되었네요

두번째 수정작업(chatGPT)

(생성한 파일 중 update.py파일을 업로드)오류가 발생하여 정상적으로 db에 정보가 쌓이지 않고 있습니다. 문제가 있는 부분을 확인해서 수정해줘.

그리고
# 세션 생성 및 User-Agent 설정 headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36'} session = requests.Session(impersonate="chrome", headers=headers, verify=False)
이 코드를 참고해서 세션 연결을 ticker 다운로드 할 떄마가 하는것이 아니라 스크립트 시작시 세션을 연결하고 모든 작업이 끝나면 세션을 닫으세요


chatGPT가 확인해준 원인들 
(일부 원인이 될 수 있지만 정확하게 해결해주지는 못하더라구요) 

구분 원인 설명
1 requests.Session()yfinance.download()의 호환성 문제 yfinance.download()requests가 아닌 yfinance.shared._session 기반으로 동작합니다. curl_cffi.requests.Session을 전달하면 TypeError 또는 AttributeError가 발생할 수 있습니다.
2 ❌ MongoDB date 필드 처리 오류 datetime.date 객체는 PyMongo가 BSON 변환 시 오류를 일으킬 수 있습니다. datetime.datetime 객체로 저장해야 합니다.
3 latest_dates 집계 시 strftime() 호출 오류 doc['max_date']datetime이 아닌 str로 들어오는 경우 .strftime() 호출 시 AttributeError 발생 가능성이 있습니다.
4 ⚠️ 중복 삽입 방지 미비 insert_many()를 단순 실행하면 중복 데이터가 계속 쌓이거나 오류로 중단될 수 있습니다.
5 ⚠️ 병렬 실행 시 세션 공유 문제 ThreadPoolExecutor 내부에서 yfinance.download() 호출 시 세션/캐시 충돌 가능성이 있습니다.
6 ⚠️ 한국 주식 Ticker 일부 .KQ 종목이 오류 발생 코스닥 종목이 .KS로 지정되어 다운로드 실패 가능성 있습니다.



그래서 아래와 같이 정상 적동하는 2개의 스크립트를 얻게 되었습니다. 

01.mongodb_setup.py

02.mongodb_update.py

다음에는 국내 부동산시세 정보도 알아서 모아올 수 있는 방법이 있는지 확인해보도록 하겠습니다. 물론 다른 서비스들이 있는것으로 봐서는 방법이 없지는 않겠지만 저는 실시간까지는 필요없으니 평이한 방법으로 시도해보도록 하겠습니다. :)



출처: @ye._.vely618