coding apple님 감사합니다! 만들어주신 강의 열심히 잘 수강하고 있습니다. 덕분에 독학하는데 있어서 큰 도움이 되고 있습니다.
다름이 아니라 제가 강의를 들으면서 강의 내용을 응용하여 웹서비스를 만들고 있는데 기능들을 만들다 보니 한가지 관문에 부딛히게 되었습니다.
제가 만들고 싶은 기능을 설명드리면, 사용자가 특정 데이터를 검색하면 mongoDB에서 그 데이터가 포함된 DOC를 먼저 찾고,
그 DOC안의 어떤 배열 데이터를 가져와서 그 배열 데이터의 각각의 원소들을 또 mongoDB에서 찾아서 , 찾은 DOC안의 배열 데이터를
또 mongoDB에서 검색하는 작업을 반복하다가 검색한 배열의 원소들로 찾은 DOC의 배열에 더이상 어떤 정보도 들어있지 않을 때까지
반복하는 작업입니다.
아마 관문이 무엇이었을지 바로 아셨을거라고 생각되는데요.
node.js의 비동기적인 방식 때문에 반복문 안에 그냥 mongodb의 컬렉션에 접근하여 작업을 하라는 코드를 집어넣으면,
반복문이 돌아갈때마다 각각의 변수들은 mongoDB 접근 코드까지는 와서 살아있지만,
모든 반복문이 돌아간 후에 mongoDB 접근 작업을 몰아서 하는 것인지,
맨 mongoDB접근 코드의 콜배함수 안에서는 맨 마지막 변수만 살아있어서 그 변수로만 반복횟수만큼 작업을 해버린다는 점입니다.
수많은 구글링과 고뇌를 통해서 결국 Promise와 반복횟수를 세는 다른 변수를 만들고 조건문을 반복문 안에 넣어서 탈출하는 방식으로 해결한 듯 하였으나 콜백이 실행되는 속도가 그때그때 다른 것인지 출력되는 값의 개수와 값은 항상 똑같지만 값들의 순서가 실행할 때마다 달라진다는 문제가 있었습니다.
결국 찾은 변수들을, 반복문 밖에서 정의된 변수를 활용한 키의 값으로 하는 객체형식으로 저장하는 것으로 해결되기는 하였습니다만,
웹서비스를 계속 진행해나가면서 비슷한 류의 기능을 몇번 더 만들어야 했고 그때마다 제가 해결한 방식은 무언가 데이터의 낭비와 작
업이 너무 투박하다는 느낌을 지울 수가 없어서 결국 질문하게 되었습니다.
이런 문제를 해결하기 위한 좋은 방법은 무엇인지, 혹시 node.js안에서 코드를 동기적으로 쓸 수 있는지 두가지가 궁금합니다.