장고 심화주차의 두번째 과제인 LLM과제, 개인적으로 DRF에 집중하고 싶었기때문에 이번 과제는 그동안 생각하던 아이디어가 생각처럼 동작 할 것인지에 중점을 두고 간단하게 구현해보았다.
이번에 정한 목표는 gpt를 활용해서 특정 종목의 주가를 예측하는 웹페이지를 만드는 것이다. 따라서 필요한 기능은 다음과 같다.
- 사용자로부터 입력받은 데이터를 서버에 저장하는 기능
- RAG로 GPT가 서버내의 데이터를 참고하여 답변을 하는 기능
- 최근 주가를 받아오는 기능
더 복잡하고 정교한 프로그램이라면 더 많은 기능이 필요하겠지만 내가 만드려는 간단한 기능은 이정도면 충분할 것이다. 때문에 웹페이지를 만들기 위한 장고와 RAG를 사용하기위한 랭체인이 필요할 것이다.
나는 우선 공공 API를 활용해서 특정 종목의 주가를 입력해보기로 했다.
데이터는 공공데이터 포털을 활용했다. 외부 api 연동은 지난번에도 몇번 해본적이 있기 때문에 홈페이지의 설명만 잘 읽는다면 금방 할 수 있을 것이라고 생각을 했었는데... 그렇게 쉽지가 않았다.
시작은 간단했다. 발급받은 키를 넣고 원하는 데이터가 나오도록 값을 입력하면 url 주소를 만들어주었고 그것을 get요청으로 받아오면 되는 것이다. 하지만 막상 데이터를 출력해보려고 하니 에러가 발생했다.
https://jemmaa.tistory.com/80#google_vignette
SSL에러가 바로 그것이었다. 구글링을 열심히 해보니 인증서 관련 오류같은데... 처음 보는 문제라서 해결이 쉽지 않았다.
아무튼 블로그에 정리된 대로
result = request(url, verify=False)
이런 식으로 인증을 False로 설정해서 인증을 하지 않도록 바꿔주었다. 보안문제가 발생할 가능성이 크다고 하지만 일단 출력이 되는 것이 더 중요하니까...
하지만 이번에도 같은 오류가 발생했다.
https://0ver-grow.tistory.com/1003
다음으로 시도해본 방법은 pyOpenSSL 업데이트이다.
SSL인증서를 최신버전으로 업데이트 하는 방법이라고하는데... 될지 안될지 확신은 없었지만 일단 시도해보기로했다.
pip install pyOpenSSL
터미널에 위와 같이 입력하여 토큰을 업데이트했다. 무언가 열심히 깔리기 시작하고 다시 실행을 해보았지만... 결과는 이번에도 실패였다. 아무래도 다른 방법이 필요한것같았다.
다음으로 떠올린 방법은 https부분을 손보는 것이었다. 수박겉핥기식으로 적당히 얻어낸 지식이기때문에 정확한 것은 아니지만 SSL에러는 https 사이트에 접속을 시도할때 발생하는 에러라고한다. 그럼 접근 프로토콜을 다른 방식으로 바꾸면 해결할 수도 있지 않을까?
그리고 여기부터는 내 능력을 벗어나버렸기 때문에 챗GPT를 활용해서 해결했다.
GPT는 httpx라는 것을 알려주었는데 이것을 활용하면 파이썬에서 https가 아니라 http요청을 보낼 수 있다고 한다. 그럼 인증이 필요없어질테고 예상대로 실행이 되지 않을까?
그리고 이번에야말로 예상대로 api를 출력할 수 있었다. 여기까지 출력이 되었으면 다음은 쉽다. json형식은 딕셔너리형태이기 때문에 데이터를 손쉽게 다룰 수 있다.
이렇게 해서 원하는 데이터를 추출해낼 수 있었다.
https://apis.data.go.kr/1160100/service/GetStockSecuritiesInfoService/getStockPriceInfo?serviceKey={사용자인증키}&resultType=json&beginBasDt={date}&likeSrtnCd={ticker}
이제 원하는 곳에 변수를 입력해서 내가 원하는 종목의 주가를 조회할 수 있다.
'내일배움캠프' 카테고리의 다른 글
django심화 - 개인과제 종료 (0) | 2024.09.11 |
---|---|
LLM개인과제 - LangChain 기본적인 사용 (0) | 2024.09.09 |
Django DRF과제 - 트러블슈팅 (0) | 2024.09.05 |
Django 커스텀 User model 사용하기 (0) | 2024.09.05 |
DRF로 회원가입 기능 구현하기 (0) | 2024.09.04 |