WIL 8주차

jathazp·2022년 3월 3일
0

1. 실전 프로젝트

이번 한 주는 기획을 마무리하고, DB 설계, API 설계 및 사용해볼 기술들에 대한 정리를 했다.
또, 회원가입, 로그인과 함께 마이페이지의 기본적인 API 들을 구현했다.

DB는 원래 MySQL 을 사용하려 했는데, 기획이 자주 바뀌다보니 변경사항을 DB 에 반영하는데 생각보다 시간이 오래걸렸다.

그렇게 큰 규모의 프로젝트가 아니기에 MongoDB를 사용해도 괜찮다는 판단, Nodejs와의 호환이 좋다는 점, DB설계에 시간을 조금 덜 투자하고 다른 부분에 집중하는 것이 더 이득이라는 생각에 팀원들과 합의하에 MongoDB로 방향을 수정했다.

또, 협업은 팀노션을 적극적으로 활용하고 있다.
API 설계, 회의록, 팀 일정 및 디자이너 분들과의 일정까지 전부 노션을 통해 정리하고 있는데 생각보다 깔끔하게 정리가 되어 앞으로의 프로젝트 진행에 많은 도움이 될 것 같다.

2. 배운 내용

1. BIGINT

자바스크립트 2^53-1을 초과하는 숫자는 bigint로 표현 가능
ex)

let nums  = BigInt('988888888888888888888888888889999999999')

2. lean()

우리가 사용하는 Mongoose 쿼리는 Mongoose Document를 반환한다.
lena()은 Mongoose Document가 아니라 바로 Javascript Object로 쿼리 하는 옵션이다.

공식문서에서는 Mongoose Document는 내부 상태가 많기 때문에 Javascript Object보다 훨씬 무거워서 쿼리 성능 향상을 위해서는 lean()을 이용하라고 가이드하고있다.
이렇게 하면 쿼리를 더 빠르고 메모리 집약적으로 사용할 수 있다.

당연하지만 lean()을 이용해 쿼리 한 객체에는 아래와 같은 것들이 없기 때문에 주의하여 사용해야 한다.

Change tracking
Casting and validation
Getters and setters
Virtuals
save()

ref) https://node-js.tistory.com/26?category=894262

3. Mongoose query projection

db.bios.findOne(
  { },
  { name: 1, contribs: 1 }
)
let proofShots = await Proofshot.find({ userId: user._id }).select({
  _id: 1,
  imgUrl: 1,
  createdAt: 1,
});

ref) https://mongoosejs.com/docs/api/query.html#query_Query-projection

0개의 댓글