최근 제가 어떤 개발을 하고 계신지는 포스팅을 읽으셨다면 잘 알고 계실 겁니다.
스팀엔진에서 스팀 블럭에 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 에서 필요한 정보를 조회하여 정제시켜서 저장한 후에 실제 작업을 수행하는 부분을 개발하면 될 듯 합니다.
너무 많은 에너지를 쏟아서 조금 지쳐가는 요즘입니다.
그래도 맡은 프로젝트는 무사히 끝내야겠지요~^^
잘 마무리가 될 수 있도록 열심히 해야겠습니다.