inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

이중 select

해결된 질문

74

hhglng

작성한 질문수 8

2

삭제된 글입니다

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

답변 1

0

김시훈 (도도소프트)

ssdev님 안녕하세요 :)

좋은 질문이네요. ssdev님이 하시려는것처럼 비밀번호 같은 정보는 노출 시키지 않아야 됩니다. 혹은 API요청하는 유저의 권한에 따라 return되는 정보가 달라야할 때도 있고요. 

userWithPassword, userWithoutPassword를 Promise.all로 묶어서 불러오면 사용자 입장에서 응답시간은 개선이 될거에요. 하지만 이렇게 해도 디비에 여전히 불필요한 호출이 가서 좋은 해결책은 아니죠.(두번 연달아서 호출한걸 동시에 호출한걸로 바꾼거니깐요)

const  { password, ...userWithoutPassword } = user;

가능하면 select로 불필요한 필드를 제외하면 좋지만 이 경우 처음에 생각하셨던 방법으로 하시는게 좋을거 같아요.

다만 이렇게 하면 userWithoutPassword에 처음보는 이상한 정보들이 많을거에요. user document는 문서의 정보 말고도 document class가 가지고 있는 다른 정보들이 많기 때문이에요.

const  { password, ...userWithoutPassword } = user._doc;

이렇게 하시면 비밀번호를 제외한 유저 정보를 받을 수 있어요. ._doc를 하면 문서의 정보 자체만 받게 됩니다.

저 같은 경우는 GraphQL 백엔드를 두고 있는데요. 이 경우 더 쉽게(혹은 실수의 여지를 제거) 이 문제를 해결할 수 있어요. 외부가 데이터를 불러올 수 있는 GraphQL Schema정의가 따로 있는데요. Mongoose Schema와 매우 흡사합니다. 다만 여기서 비밀번호 같은 외부에 노출되지 말아야할 항목들은 GraphQL Schema에서 제외시켜요. 그러면 비밀번호가 포함된 회원정보를 리턴해도 서버에서 리턴하기 전에 GraphQL Schema에 비밀번호가 없기 때문에 해당 필드를 삭제해서 전달됩니다.

0

hhglng

상세한 답변 감사합니다! 큰 도움이 되었습니다! 

그런데 user._doc으로 뽑은 userWithoutPassword인 경우 더이상 Document 타입이 되지 않아서 문제가 가 있는 것 같습니다 ㅠㅠ 지금은 Rest API를 설계중인데 나중에 GraphQL을 한 번 고려해봐야 겠네요. 감사합니다! :)

0

김시훈 (도도소프트)

아 그쵸 typescript 사용중이셨네요. 음 그러면 깔끔한 방법은 생각나지 않네요. Promise.all이용해서 두 가지 경우 불러오거나 아니면 리턴하기 전에 비밀번호 부분을 다른 임의의 string으로 수정하고 보내는 방법도 있지 않을까 싶어요(.save를 안하면 어짜피 변경된 부분이 디비에 반영되지 않으니)

0

hhglng

오 어차피 db에 반영이 되지 않으니 password를 임의의 string으로 변경하는 방법이 좋을 듯 하네요!   성능상으로는 이 방법이 제일 나은 방법 같습니다! 정말 감사합니다 ㅠㅠㅜ 😀😀😀

option usecreateindex is not supported 오류 나면은

0

162

1

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

0

258

1

user 내장 시 ref 필드 필요성

0

255

1

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

0

306

2

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

0

320

1

$elemMatch 질문이 있습니다.

0

251

1

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

2

777

2

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

0

243

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

438

3

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

0

610

1

인덱스 생성시점

0

720

1

$pull 문법에 대한 질문

0

366

1

comment의 id가 생성되는 시점

1

310

1

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

1

321

1

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

0

296

1

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

-1

413

1

faker 패키지 취약성 이슈

1

495

1

라우터 리팩토링

0

348

1

섹션4 진행중, mongoose 질문

0

316

1