You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
매일 오전 8시에 종목을 최신화하여 상장된 종목들은 db에 저장되고 폐지된 종목들은 db에서 제거되어야 하는데 스케줄링 메서드의 로그상으로는 추가된 종목들이 있으나 실제 db에는 종목 데이터가 반영되지 않습니다.
3개의 종목이 추가되기 전에 테스트를 위해서 084180 종목만 일부러 지우지 않고 123840, 082740만 지웠습니다.
그러나 오전 8시에 찍힌 로그의 결과는 2개(123840, 082740)이 아닌 다음과 같이 지우지도 않은 3개의 결과였습니다.
그리고 db에는 추가된 3개의 종목이 반영되었는지 확인하기 위해서 조회했습니다.
select * from stock where stock.ticker_symbol in ('084180', '123840', '082740');
결과는 다음과 같이 종목들은 저장되지 않았습니다.
로그에 추가된 종목들의 티커가 찍히기 위해서는 db에 저장이 되어야 하기 때문에 현재 추측으로는 종목들이 저장되었지만 어떤 일로 인하여 제거되는 것으로 추측하고 있습니다.
원인
기존 stocks.tsv 파일을 이용한 종목 최신화 스케줄링 메서드가 하루에 한번 자정에 실행시 기존 최신화된 종목들을 삭제한 것이 원인이었습니다.
예를 들어 기존의 종목을 최신화하는 방식은 하루에 한번 자정에 한번씩 실행하여 stocks.tsv 파일과 open api 서버로부터 받은 최신 종목들을 가져온 다음에 기존 stocks.tsv 파일에 있는 종목들중에서 서버로부터 받은 최신 종목들에서 공통된 것을 제거한 다음에 남아있는 종목들을 제거하고 있습니다. 기존 소스 코드는 다음과 같습니다.
로그로 기록된 위 종목들은 서버로부터 받은 최신 종목들과 공통되지 않고 남은 종목들이므로 상장 폐지된 종목들임을 알 수 있습니다. 따라서 해당 스케줄링 메서드에서는 종목들에 달려 있는 포트폴리오 종목, 매입 이력등을 사전에 제거한 다음에 최종적으로 종목 데이터가 삭제되는 것을 볼 수 있습니다.
서버를 시작하고 나서 위 종목들을 조회해보면 기존 종목 최신화전에 남아있는 것을 볼 수 있습니다.
상황
매일 오전 8시에 종목을 최신화하여 상장된 종목들은 db에 저장되고 폐지된 종목들은 db에서 제거되어야 하는데 스케줄링 메서드의 로그상으로는 추가된 종목들이 있으나 실제 db에는 종목 데이터가 반영되지 않습니다.
3개의 종목이 추가되기 전에 테스트를 위해서 084180 종목만 일부러 지우지 않고 123840, 082740만 지웠습니다.
그러나 오전 8시에 찍힌 로그의 결과는 2개(123840, 082740)이 아닌 다음과 같이 지우지도 않은 3개의 결과였습니다.
그리고 db에는 추가된 3개의 종목이 반영되었는지 확인하기 위해서 조회했습니다.
결과는 다음과 같이 종목들은 저장되지 않았습니다.
로그에 추가된 종목들의 티커가 찍히기 위해서는 db에 저장이 되어야 하기 때문에 현재 추측으로는 종목들이 저장되었지만 어떤 일로 인하여 제거되는 것으로 추측하고 있습니다.
원인
기존 stocks.tsv 파일을 이용한 종목 최신화 스케줄링 메서드가 하루에 한번 자정에 실행시 기존 최신화된 종목들을 삭제한 것이 원인이었습니다.
예를 들어 기존의 종목을 최신화하는 방식은 하루에 한번 자정에 한번씩 실행하여 stocks.tsv 파일과 open api 서버로부터 받은 최신 종목들을 가져온 다음에 기존 stocks.tsv 파일에 있는 종목들중에서 서버로부터 받은 최신 종목들에서 공통된 것을 제거한 다음에 남아있는 종목들을 제거하고 있습니다. 기존 소스 코드는 다음과 같습니다.
위 서비스 메서드를 api를 통하여 호출했을때 최신 종목들과 비교하여 공통된 종목들을 삭제하고 남은 initialStockInfos 컬렉션 상태는 다음과 같았습니다.
로그로 기록된 위 종목들은 서버로부터 받은 최신 종목들과 공통되지 않고 남은 종목들이므로 상장 폐지된 종목들임을 알 수 있습니다. 따라서 해당 스케줄링 메서드에서는 종목들에 달려 있는 포트폴리오 종목, 매입 이력등을 사전에 제거한 다음에 최종적으로 종목 데이터가 삭제되는 것을 볼 수 있습니다.
서버를 시작하고 나서 위 종목들을 조회해보면 기존 종목 최신화전에 남아있는 것을 볼 수 있습니다.
이번에는 임시로 만든 api를 통해서 종목 파일 최신화를 수행해봅니다.
로그로 찍힌 결과는 위 설명과 같이 나옵니다.
종목 파일을 최신화 한다음에 db 조회한 결과는 다음과 같습니다.
이번에는 새로 추가한 종목 최신화 스케줄링 메서드를 실행해보겠습니다. 포스트맨을 통하여 실행한 결과는 다음과 같습니다.
db로 조회시 결과는 다음과 같습니다.
위와 같은 테스트를 통하여 기존 종목 최신화 스케줄링 메서드가 실행되어 추가된 종목 최신화 스케줄링 메서드가 실행하고 난 이후의 종목들을 삭제했다는 것을 알게 되었습니다.
해결방법
기존 구현한 종목 최신화 스케줄링 메서드를 삭제하였습니다.
The text was updated successfully, but these errors were encountered: