inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

mongoDB 기초부터 실무까지(feat. Node.js)

exec( )의 기능

해결된 질문

108

hhglng

작성한 질문수 8

2

삭제된 글입니다

mongo 데이터 엔지니어링 rest-api nodejs DBMS/RDBMS aws javascript mongodb

답변 2

0

hhglng

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

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가 처리 되기도 전에 클라이언트한테 요청 응답이 갈 수 있어요.

option usecreateindex is not supported 오류 나면은

0

160

1

Schemaless 특성을 재생시 검은화면이 나와요

0

257

1

user 내장 시 ref 필드 필요성

0

255

1

await 관련해서 질문드릴게 있습니다!!

0

306

2

섹션6의 3번째 강의 faker파일이 어디있나요?

0

320

1

$elemMatch 질문이 있습니다.

0

251

1

DB 업데이트에 실패했을 상황에서 대처는 어떻게 할 수 있나요.

2

776

2

블로그에 user 데이터를 추가하는 방법에 대해서

0

242

1

blog 데이터 생성시 user 관련 오류

0

363

1

age 예외 처리를 별도로 하신 이유가 궁금합니다.

2

312

2

delete 메소드가 많은 이유가 궁금합니다.

0

185

1

unique validation 처리

0

302

1

updateMany에서 user._id를 못찾는 상황

1

402

1

find() 가 리턴하는 instance member

1

437

3

몽고 db를 백업방법을 부탁합니다.

0

609

1

인덱스 생성시점

0

720

1

$pull 문법에 대한 질문

0

366

1

comment의 id가 생성되는 시점

1

310

1

리팩토링 강의에서 라우터 리팩토링 전개연산자(...)

1

320

1

session.abortTransaction()에 대한 실제 예시 문의

0

295

1

섹션9 Computed Fields 강의에서, 다음 강의 가기 전 빠진부분

-1

413

1

faker 패키지 취약성 이슈

1

494

1

라우터 리팩토링

0

348

1

섹션4 진행중, mongoose 질문

0

316

1