소개
상장 기업들의 공시 정보를 DB화 하고 분류해서 이용하고 싶었습니다.
백엔드 프로토타이핑이나 간단한 기능 사용에 n8n에 적합하다고 생각 되어 적용해 보았습니다.
진행 방법
공시 리스트 페이지당 건수가 최대 100건입니다. (https://opendart.fss.or.kr/guide/detail.do?apiGrpCd=DS001&apiId=2019001)
공시를 전부 DB화 하려면 rate limit 을 고려하면서 pagination 하는 방식으로 저장하고,
과거 데이터를 DB화 한 후에는 실시간 데이터를 DB에 저장하면 될것 같았습니다.
그래서 데이터 구조도 파악할겸 실시간 데이터를 받아서 확인하기로 했습니다.
chatgpt 에게 물어보니 RSS feed를 안내 해주었습니다.
RSS feed 구독에 대해서 잘 링크에 잘 설명되어 있어서 쭉 진행했습니다.
https://dart.fss.or.kr/introduction/content6.do
RSS 리더를 n8n 으로 하고요.
n8n RSS feed trigger 노드를 테스트 해보니 item이 1개만 노출되었습니다.
중국 컴퓨터 화면의 스크린 샷
동일 URL 로 browser를 통해 접근하면 response로 50개의 데이터가 옵니다.
ex)
중국 웹 사이트의 스크린 샷
그래서 일단 간단하게 telegram node와 google sheet 노드를 붙여서 데이터가 어떻게 쌓이는지 확인하기로 하고 node를 구성했습니다.
20분간 데이터를 모아서 대조해 보았습니다.
Google Sheet 형식:
telegram 형식:
xml response 형식:
브라우저에서 CSS 파일의 스크린 샷
테스트 시에는 response에 노출 되는 건수가 1건씩만 보여서 1분 단위로 호출 했을때 누락이 되지 않을까 확인이 필요했었는데, 호출 시 이전 호출과 차이만큼 item이 노출되면서 여러 회 workflow를 처리하는 것을 확인했습니다.
예상한대로 동일 n8n workflow에서 처리한 telegram과 sheet 내용은 일치했습니다.
근데 rss feed xml의 내용과 google sheet 의 내용에는 2건 정도의 차이가 발생했습니다. (중간에 당황스럽게 일본어로 바뀌어서 답변을 줬네요 😅)
제가 workflow를 active 해놓고 테스트해본 시간은 KST 기준 16시39 부터 17시00분까지 였는데요, 그 사이에 workflow 상의 error는 발생하지 않았습니다.
개별 item 에 대해서 누락된 건이 2건이 있었습니다. 🥲
<아스타> 에 해당하는 정보는 타이밍 상 이전 정보로 간주하고 처리 안될수 있을것 같은데, <NH투자증권> 정보는 16시 46분 공시 정보라, 누락이 안되어야할 것 같은데 누락되었네요.
이유는 아직 잘 모르겠습니다. 주기도 바꿔보고 몇가지 더 테스트를 해봐야 될것 같습니다.
결과와 배운 점
실습을 통해서 dart 실시간 데이터 RSS feed 데이터를 구조를 확인했습니다.
중간에 왜 누락이 되었는지 좀 의아한 부분이 있습니다.
실시간 공시정보가 필요하면 간단하게 사용하되, 100프로 신뢰하기는 어려워 보이므로
이후 api 를 통해서 DB 화 하는 것이 무결성과 안정성 측면에서 좋아보입니다.
n8n을 통해서 workflow를 빠르게 prototyping 할수 있는점과 처리 과정을 시각화 할 수 있는점이 좋았습니다.
n8n 장점 (만들어진 노드이용, 편리함) vs 개발 장점 (자유도, 익숙함)
사이에서 실제 DB를 붙일때 어떻게 작업할지를 고민중입니다.