이노베이션 캠프

[TIL] 61일차

hjkim0502 2022. 9. 30. 00:59

1. Python APScheduler

from apscheduler.schedulers.background import BackgroundScheduler

sched = BackgroundScheduler()

sched.add_job(메소드명, 'cron', day_of_week='mon-fri', hour='16', id='renew_index')

sched.start()

while True:
    time.sleep(1)
  • 내 프로젝트의 경우 지속적으로 백그라운드에서 스케줄링하므로 BackgroundScheduler 사용
    • BlockScheduler도 있음
  • 어떤 작업을 할지는 add_job()에 메소드 명을 넣거나, 아래와 같이 메소드 위에 어노테이션 붙이기
    • cron 형식으로 날짜나 요일, 시간 설정함
@sched.scheduled_job('cron', day_of_week='mon-fri', hour='15', minute='35', id='renew_chart')
def renew_chart():

 

2. 실수...

db에 주식 데이터를 대량으로 넣는데, 테스트하지 않고 처음부터 자신감있게 코드를 다 짜고 넣으니 세세하게 잘못된 부분을 이미 많이 넣고서야 중간에 계속 알아차리기를 3번이나 반복했다. 처음부터 잘 세팅해놓고 넣었으면 이미 끝났을 것을 한시간을 버린 셈이 되었다...

자신있어도 무조건 스텝을 밟아나가야 함을 다시 깨달았다..

 

몽고 db에 날짜별로 컬럼을 두어서 주식 데이터를 세팅했었는데, 당연하게도 스프링에서 매핑하는 컬럼을 그 날짜 수 만큼 정의해야하는 것 같아서, 한 컬럼에 이중리스트 형식으로 다 담는 것으로 바꾸었다.

 

3. SSE

실시간 주식데이터는 SSE로 하면 최적이겠다 싶어서 살짝 공부해봤다.

메인 app.py에서 flask로 announcer 클래스 정의, 메세지 형식 메소드 정의, 메세지 listen 및 send 하는 루트 만들어주고

listen.py에서 sseclient에 있는 메세지를 print하는 구조이다. flask 서버 돌리고, listen.py도 돌리면서 send하는 루트에 get 요청 보낼때마다 미리 지정한 메세지가 출력된다. 신기하긴했는데, 프로젝트에 어떻게 적용시킬지는 아직 멀은 것 같다.

https://maxhalford.github.io/blog/flask-sse-no-deps/