블럭 정보 저장 서버 exception 처리

in #sct5 years ago (edited)

안녕하세요 @realmankwon입니다.

최근 제가 어떤 개발을 하고 계신지는 포스팅을 읽으셨다면 잘 알고 계실 겁니다.
스팀엔진에서 스팀 블럭에 custom json으로 저장하는 정보를 읽고 이것을 몽고 DB 에 저장하는 서버를 개발 중입니다.
이 서버를 통해서 SCT 에서 발생하는 모든 트랜잭션을 모니터링하여 추천인 프로젝트, 따봉 프로젝트, krwp 보상 자동화 등을 수행하게 됩니다.
그래서 이 서버는 안정적으로 실행이 되어야 하며 중단이 되더라도 자동으로 재실행이 되어 중단시점부터 다시 다음 블럭을 읽고 저장하는 일을 계속 수행해야 합니다.

이 작업을 2주 전에 마치고 중단되는 문제를 다 해결했었지만 이번에 krwp 보상 자동화로 인해서 스팀엔진 정보 뿐만 아니라 스팀의 일부 블럭 정보까지 저장을 해야 했습니다.
api 를 변경하고 다른 정보를 추가했는데 자고 일어나면 중단이 되어 있었습니다.

현재 해당 서버는 node.js 로 개발하였고 중단이 되더라도 재실행이 되도록 forever로 운영 중인데 중단이 되니 좀 갑갑했습니다.
아시는 분들은 아시겠지만 비동기 기반의 javascript로 개발된 node.js 이기에 비동기에 대한 처리와 try catch가 기존에 제가 했던 방식과 많이 다릅니다.
그래서 이 또한 새로 공부하면서 promise 기반으로 다시 변경하였고 crontab으로 실행시켰던 것을 setTimeout을 이용한 재귀함수로 변경하였습니다.
이 와중에 promise로 된 함수에서 exception 발생시 처리를 잘못해 주었나 봅니다.

몽고 DB 에 데이터를 저장하면서 저렇게 중단이 계속 되고 있었습니다.

krwp 자동화 개발을 해야하는데 계속 여기에만 시간을 쏟고 있으니 개발은 점점 더 늦어지고...ㅜㅜ
그래도 이 녀석을 꼭 잡아야 했기에 오늘도 소스를 계속 보았습니다.

미심쩍은 부분을 수정했습니다.
catch 에서 throw 를 작성했던 것을 reject 로 변경하였습니다.
javascript 에서는 throw가 실행이 안 되는 것 같은 생각에 그렇게 변경하였고 다른 부분도 조금조금 변경하여 실행을 시켰습니다.

그랬더니 해당 exception이 발생하고 나서도 서버는 중단되지 않고 계속 실행이 되는 것을 확인하였습니다.
4~5 번 정도 동일 exception이 발생해도 중단되었는 블럭에서 다시 재실행이 되었습니다.
드디어 자동화의 기반이 안정적으로 마련이 된 것 같습니다.

이제는 몽고 DB 에서 필요한 정보를 조회하여 정제시켜서 저장한 후에 실제 작업을 수행하는 부분을 개발하면 될 듯 합니다.
너무 많은 에너지를 쏟아서 조금 지쳐가는 요즘입니다.
그래도 맡은 프로젝트는 무사히 끝내야겠지요~^^
잘 마무리가 될 수 있도록 열심히 해야겠습니다.

Sort:  

수고 많으십니다.

비동기화가 정말 어려운 부분인것 같아요. 해결책을 찾은 것 같아서 다행이군요.

Posted using Partiko Android

Congratulations @realmankwon! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You published more than 350 posts. Your next target is to reach 400 posts.

You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Vote for @Steemitboard as a witness to get one more award and increased upvotes!

Coin Marketplace

STEEM 0.30
TRX 0.11
JST 0.033
BTC 64106.00
ETH 3129.71
USDT 1.00
SBD 4.16