소개
상장 기업들의 공시 정보를 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 형식:
테스트 시에는 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를 붙일때 어떻게 작업할지를 고민중입니다.