2025. 1. 22. 13:00ㆍ프로젝트
이 전 글들이 궁금하다면 ?
0. 사이트를 만드려는 이유
https://hsjoo126.tistory.com/80
1-1. 프로젝트 가능성 보기
https://hsjoo126.tistory.com/81
pandas 와 jupyter 이용해서 테스트해보기
https://hsjoo126.tistory.com/82
1-2. 기획 단계 - 디자인, 와이어 프레임, ERD 등
https://hsjoo126.tistory.com/83
2. 개발 단계 - 계획짜기, 구현해보기
https://hsjoo126.tistory.com/84
2-1. 개발 단계 - 배당지불일, 시장별 티커리스트 구하기
https://hsjoo126.tistory.com/85
2-2. 개발 단계 - 코드 정리
https://hsjoo126.tistory.com/86
2-3. 개발 단계 - 사이트에 적용하기(장고)
https://hsjoo126.tistory.com/87
2-4. 개발 단계 - 사이트 로딩 속도 줄이기
https://hsjoo126.tistory.com/88
2-5. 개발 단계 - 주식별 동적인 페이지 만들기
https://hsjoo126.tistory.com/89
오늘은! 디테일 잡는 걸 할 것이다.
대충 MVP는 다 구현이 되었고, 프론트도 대충 만들었다
마음같아선 그냥? 마무리 하고 싶지만 ㅎㅎ
사이트 완성도 있게 마무리 하면 좋으니까~!
디테일 잡기 시작!
이건 저번 글에 적어놨던 할 일이다.
여기에 추가로 할 것들도 있어서 한 번에 정리해보자
할 일
- views.py 중복 코드 없애기
- 데이터 로딩시간 줄이기
- 티커 나스닥 뿐만아니라 다른 시장도 넣어서 조회하기
할 일
- views.py 중복 코드 없애기
- 데이터 로딩시간 줄이기
- 티커리스트 미리 넣는 방식 고려
- 티커 나스닥 뿐만아니라 다른 시장도 넣어서 조회하기
- 프론트
- navbar에 다른 페이지 이동할 수 있게 추가
- 상세페이지
- middle, high 페이지에 있는 것들 상세페이지에 포함시키기
- 주가 내역 예쁘게 나오게 바꾸기
- 소수점 2번째까지만 나오게
- 숫자마다 콤마 추가하기
- 주가 그래프 / 배당 그래프 추가하기
이정도로 정리하고 하나씩 해치워 나가보자!
1. 다른 시장도 넣어서 조회하기
현재 우리 사이트에는 나스닥 밖에 들어있지 않기 때문에
다른 시장도 넣어서 조회할 수 있게끔 하려고 한다.
데이터가 너무 많아지기 때문에, 미리 DB에 리스트를 저장하고 불러오는 방식으로 구현해보자!
그런데? 그러기 전에 ㅋㅋㅋㅋㅋㅋㅋ 중요한 오류 하나 해결하고 가야하는데..
여태까지는 무시했던 그것... 바로 상위 100개만 가져와서 데이터를 보여준 거!!
나스닥에는 많은 종목이 있는데,,, 저걸 다 보면 시간이 너무 오래걸릴 거 같아서 여태까진 100개 종목으로 제한했었다.
근데 이제 프로젝트 막바지니까 엄청 걸리는 로딩시간을 해결해야한다...!
한번.. 100개 제한을 없애보면..?
오류 파티를 맞이 할 수 있었다 ㅋㅋㅋㅋㅋㅋ ㅠㅠㅠㅠ
오케이,, 그럼 해결방법은?
일단 DB에 티커리스트를 올리는 방식으로 해결해보려고 한다!
원래는 ... DB 안 만드려고 했는데 어쩔 수 없지!
1-1. 구현 방식
구현 방식은 간단하다!
financedatareader에서 ticker 데이터를 불러다가 DB에 저장하면 된다!
우리 사이트는 미국 주식 위주의 사이트이기 때문에, 뉴욕증권거래소와 나스닥의 데이터를 불러올 것이다.
프로젝트에서 crontab을 사용하고 있으니까 얘한테 주기적으로 db를 업데이트 하라고 할 생각이다!
로직 순서는 다음과 같다.
fdr 라이브러리를 통해 ticker 조회(나스닥과, 뉴욕 증권거래소)
DB에 저장
crontab이 주기적으로 업데이트
1-2. 구현해보기
1-2. 1. 모델 정의하기
티커 이름을 저장하고, 어느 시장에서 가져왔는지도 표시 하기 위해
다음과 같이 모델을 정의했다.
#models.py
from django.db import models
class Ticker(models.Model):
symbol = models.CharField(max_length=10, unique=True) # 티커 심볼
market = models.CharField(max_length=100, null=True, blank=True) # 시장
def __str__(self):
return self.symbol
1-2. 2. cron.py 정의하기
fdr에서 티커리스트를 조회한 뒤, symbol에 저장했다.
get_or_create를 써서 중복된 데이터가 있으면 넘어가고,
없으면 저장을 했고
각 시장 심볼을 저장할 때마다 market에 각 시장 이름이 들어가도록 설정했다.
#cron.py
from stocks.models import Ticker
def update_tickers():
nasdaq_stocks = fdr.StockListing('NASDAQ')
nyse_stocks = fdr.StockListing('NYSE')
# NASDAQ 티커 저장
for _, row in nasdaq_stocks.iterrows():
symbol = row['Symbol']
Ticker.objects.get_or_create(symbol=symbol, defaults={'market': 'NASDAQ'})
# NYSE 티커 저장
for _, row in nyse_stocks.iterrows():
symbol = row['Symbol']
Ticker.objects.get_or_create(symbol=symbol, defaults={'market': 'NYSE'})
1-2. 3. settings.py에 cronjob추가하기
기존에 있던 cronjob에 추가로 넣어주면 된다.
#settings.py
#django-crontab설정
CRONJOBS = [
('*/5 * * * *', 'stocks.cron.update_stock_data', '>> /Users/t2023-m0088/Desktop/stocks/dividend_stock/data.log'),
('*/10 * * * *', 'stocks.cron.update_tickers', '>> /Users/t2023-m0088/Desktop/stocks/dividend_stock/data.log'),
]
1-2. 4. 결과 확인하기!
crontab을 실행시킨 뒤 예약을 건 시간이 지나고 db를 확인해보면 ??
후후 잘뜨는 것을 볼 수 있습니다!
2.트러블 슈팅... 절망..
아!으오ㅓㅏ아아아아아아ㅏㅏ
티커리스트를 DB에 넣어서 조회하면 오류가 안 뜰줄 알았는데 똑같이 뜬다!!
아오오오옹오오
ㅋㅋㅋㅋㅋ...
db로 해결될 줄 알았던 내 자신... 멍충....
429에러는 너무 많은 요청을 사이트에 보내서 나오는 에러라고 한다.
그래서 찾아보니 야후에서는 1시간에 100개로 제한하고 있었다.
https://help.yahooinc.com/datax/docs/rate-limits-1
그리고 또 찾아보니 다른 사람들은 ?
이 방법으로 해결한다는데
1. 기다렸다가 다시 한다.
2. 응답이 올 때까지 기다린다.
3. 요청 시간을 지연시킨다.
1,2번 방법은 api마다 다르고 ...
많은 요청을 보내지 않았는데 429가 뜰 경우 사용하는 거 같다.
그럼 두 번째 방법은?
이걸 사용해 지연시키는 건데
time.sleep(1)
결론부터 말하자면 되지 않았다. 그럼 어떻게 하면 좋을까!!
나도 모르지 아오오오오
시도
1. 100개로 나눠서 조회하기?
생각해보면, 처음에 100개 제한을 두고 조회를 했을 땐,
시간이 많이 걸리긴 했지만 조회가 되긴 했었다.
그래서 이걸 이용해서 만들어보면 어떨까 싶다.
(물론 안될 수도 있음 ㅜ)
하는 중인데,,, 문제가 하나 생겼다.
이젠 100개 이하를 요청해도 429에러가 뜬다..
그래서 100개 나눠서 조회하는 기능을 테스트 해볼 수 없게 되었다 ...
이게 뭐람 ㅠ
몇시간 뒤에 하거나 내일 해서 오류를 해결해야할 거 같다 ..
하 이거 해결할 수 있는 거 맞냐!!!
'프로젝트' 카테고리의 다른 글
나만의 배당주 사이트 만들기) 2-5. 개발 단계 - 주식별 동적인 페이지 만들기, (시총, 주가내역, 배당 내역 등) (0) | 2025.01.21 |
---|---|
나만의 배당주 사이트 만들기) 3. 디자인 - 잠깐 쉬어가자! 그런김에 디자인~! (0) | 2025.01.20 |
나만의 배당주 사이트 만들기) 2-4. 개발 단계 - 사이트 로딩 속도 줄이기 (0) | 2025.01.17 |
나만의 배당주 사이트 만들기) 2-3. 개발 단계 - 사이트에 적용하기(장고) (0) | 2025.01.16 |
나만의 배당주 사이트 만들기) 2-2. 개발 단계 - 코드 정리(티커리스트, 마지막 배당금, 마지막 배당일, 배당률, 시총) (0) | 2025.01.15 |