• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

exec( )의 기능

21.06.17 23:33 작성 조회수 26

2

삭제된 글입니다

답변 2

·

답변을 작성해보세요.

0

hhglng님의 프로필

hhglng

질문자

2021.06.19

친절한 답변 감사합니다! 큰 도움이 되었습니다 :)

0

ssdev님 안녕하세요 :)

mongoose로 데이터를 불러오거나 수정할 때 리턴 되는건 Promise가 아니라 Mongoose Query인데요.

Async/Await를 사용하면 차이가 크게 없습니다. 다만 exec를 사용하면 오류 발생시 stack trace(구체적으로 어디에서 오류가 발생했는지)가 좀 더 세부적으로 나오는 이점은 있어요. 하나의 요청에 많은 디비 작업들을 해야한다면 정확히 어떤 디비 작업에서 오류가 발생했는지 알기 어려울 수도 있는데 이 때 exec가 유용합니다.

그리고 await 혹은 .then을 하지 않으면 작성한 쿼리가 실행이 되지 않아요(const user = User.findOne({});). await 없이 .execute를 하게 되면 해당 mongoose query는 Promise로 변환이 되고 실행이 되요. 여기서 await없이 단순히 execute를 하면 해당 Promise가 처리 되기 전에 다음 코드들이 실행됩니다.(말 그대로 await, 즉 기다리지 않고 실행되는거죠)

간혹 요청이 끝날때까지 기다리지 않고 execute만 할 필요가 있을 수 있는데 일반적으로 await를 해서 성공적으로 처리가 되면 다음 코드로 넘어가죠. 혹은 동시에 처리할 수 있는거라면 await Promise.all로 처리를 하게 되고요. 요청이 끝나지 않고 기다리는 경우로는 데이터 일관성과 상관 없는 작업이 같이 들어갈 때 이겠네요. 예를 들면 서버의 처리현황을 외부 서비스에 전달해서 기록한다던지요. 이런건 굳이 하나하나 await해서 반응속도를 늘릴 필요가 없겠죠. await 하지 않으면 해당 promise가 처리 되기도 전에 클라이언트한테 요청 응답이 갈 수 있어요.