비슷한 차트 검색기
전 종목의 최근 10년간 모든 차트를 탐색합니다. 내 종목의 차트는 과연 상승하는 차트일까요?
www.similarchart.com
개발할 때 식겁했던 순간
https://blog.similarchart.com/134
프로젝트15. 모든 사용자 기능 구현완료! 힘들었던 점과 식겁했던 순간
제 프로젝트는 사용자가 특정 차트를 고르면, 코스피 코스닥 전 종목의 과거(10년) 차트들을 모두 탐색하여 가장 유사한 차트 10개 정도를 골라 사용자에게 보여주는 것이 목표입니다. 웹프로젝
blog.similarchart.com
웹사이트 공개 후 반년
비슷한 차트 검색기 웹사이트를 운영한 지 6달이 되었습니다. 그동안 많은 사람들이 제 서비스에 방문했습니다. 비록 사용자가 아주 적은 편이지만 실제로 사용자들이 사용하는 서비스를 운영하려다 보니 모든 면에서 조심스러워집니다. 테스트와 모니터링은 필수였죠.
2024년 2월 이후 6달 동안 서비스를 운영하며 많은 문제를 마주하면서 그에 따라 추가적으로 많은 수정이 이루어졌습니다. 그중 몇몇 문제는 저를 식겁하게 만들었는데요, 사용자의 서비스 이용에 불편을 주는 수준의 문제들을 마주했을 때입니다.
오늘은 저를 식겁하게 만들었던 문제들을 정리해 보았습니다.
1. 라이브러리를 너무 믿지 말자
제 서비스는 주식 시장이 열리는 날에만 비슷한 차트 데이터가 업데이트됩니다. 주말 또는 휴일에는 실행이 되지 않아야 하죠. 주식 시장이 열리는 날인지 체크하기 위해 ecals라는 라이브러리를 사용했습니다.
calendar = ecals.get_calendar('XNYS')
if calendar.is_session(date)=
return True # Market is open
else:
return False # Market is closed
위와 같이 코드를 작성했었습니다.
2024년 4월 10일은 제22대 국회의원 선거날이었습니다. 제 웹사이트에 들어가 보니 4월 9일이어야 하는 최신 업데이트 날짜가 4월 10일로 되어있었습니다. 즉, 비슷한 차트를 저장하는 테이블에 들어가서는 안될 데이터가 들어가 있었습니다. 하필 저는 밖에 나와있는 상황이라 23시가 넘어야 대처가 가능했습니다. 그래서 사용자들은 17~23시에 서비스 이용에 불편을 겪었을 것입니다. DB(MySQL, Redis)에 데이터가 잘못 들어가니 대처가 까다롭더군요.
알고 보니 위 라이브러리가 선거날을 휴일로 지정하지 않아 발생한 문제였습니다. 그래서 아래와 같이 주가 데이터 하나의 유효한 날짜들을 불러와 해당 날짜가 존재하는지 체크하는 로직을 추가하여 이중으로 체크를 하도록 수정했습니다.
calendar = ecals.get_calendar('XNYS')
all_open_date = fdr.DataReader(fdr.StockListing('KRX')['Code'].iloc[0]).index[:].strftime('%Y-%m-%d').tolist()
if calendar.is_session(date) and date in all_open_date:
return True # Market is open
else:
return False # Market is closed
이외에도 대표적인 파이썬 주가 데이터 로드 라이브러리인 FinanceDataReader
가 한국 거래소 API의 문제로 인해 주가 데이터를 제공하지 못해 차트 탐색 서비스가 지연되는 경우도 있었습니다. 해결책으로 다른 라이브러리를 활용해 플랜 B를 준비해 두었습니다.
2. EC2 인스턴스도 유효기간이 있네?
어느 순간부터인지는 잘 모르겠지만 EC2에 접속하면 다음과 같은 문구가 출력되었습니다.
Amazon Linux 2 is reaching the end of its standard support on June 30, 2025. Please consider migrating to a newer version or to Amazon Linux 2023 (AL2023).
웹과 앱을 모두 배포한 후에야 이 문구를 신경 쓸 여유가 생겼습니다. 리눅스 버전을 업그레이드 하라더군요. 아예 새 EC2 인스턴스로 마이그레이션을 해야 했습니다.
일단 Route 53에서 기존 인스턴스로 트래픽을 보내다가 새 EC2의 설정을 마친 후 새 인스턴스로 트래픽을 옮기는 방법으로 서비스의 중단이 없도록 하는 마이그레이션을 계획했습니다.
하지만 새 EC2를 설정하던 도중 문제가 생겼습니다. 새 EC2에 인증서를 발급받기 위해서는 도메인 소유 확인을 위해 트래픽이 새 EC2로 연결되어야 했습니다. 그래서 새 EC2에 대한 설정이 아직 다 끝나지 않았음에도 어쩔 수 없이 서비스 점검 시간을 공지한 후 서비스를 잠깐 중단해야 했습니다.
물론 기존 EC2에서 SSL 인증서를 옮겨오는 방법이 있다곤 했지만, SSL인증서는 보안이 철저해서 옮겨오는데 매우 까다롭더군요.
분명 무중단으로 EC2를 마이그레이션 할 수 있는 방법이 있을 것입니다. 다음에는 꼭 성공해야겠네요.
최근 몇 달은 잠잠하지만 계속 운영하다 보면 분명 또 갑자기 예상하지 못한 경우가 발생할 것입니다. 여기저기 예외 처리를 잘해야겠다는 생각이 드네요.
'프로젝트' 카테고리의 다른 글
프로젝트31. 누군가 내 서비스를 망치려고 한다.. 어떻게 막을까? (1) | 2024.09.24 |
---|---|
프로젝트30. Airflow? 뭔가 내 서비스에 잘 맞을 것 같은데? (7) | 2024.09.12 |
프로젝트28. 정확도 60%↑? 모두가 4달동안 보는 앞에서 주가 예측 성공! (0) | 2024.07.17 |
프로젝트27. 앱 배포 완료! 이제 나도 웹사이트, 앱 오너! (0) | 2024.06.18 |
프로젝트26. 어라..? 나 프론트엔드 좋아할지도..? (0) | 2024.05.29 |