`toJSON()` 메서드를 사용하지 않으면, 몽구스 문서 객체가 그대로 반환되거나 사용되게 됩니다. 이는 몇 가지 차이를 가져올 수 있습니다.
### 주요 차이점
1. **원시 몽구스 문서 객체**:
- 몽구스 문서 객체는 일반적인 JavaScript 객체가 아닌, 몽구스의 기능이 추가된 객체입니다.
- 이 객체는 다양한 몽구스 메서드와 프로퍼티를 가지고 있습니다 (`save`, `remove`, `populate`, `isNew` 등).
2. **JSON 변환**:
- `toJSON()`을 사용하면 문서 객체가 JSON 형태로 변환되며, 이 과정에서 몽구스 특유의 메서드와 프로퍼티가 제거됩니다.
- JSON으로 변환된 객체는 순수한 JavaScript 객체로, 네트워크 전송이나 클라이언트 응답에 더 적합합니다.
### 예제
비교를 위해 `toJSON()`을 사용한 경우와 사용하지 않은 경우를 살펴보겠습니다.
#### `toJSON()` 사용
```javascript
const product = new Product({ name: 'Example', description: 'An example product', manager: 'Manager', password: 'password' });
await product.save();
let data = product.toJSON();
data = { ...data, password: undefined };
console.log(data);
```
출력 결과 (민감한 정보 제거 후):
```json
{
"_id": "60c72b2f5f1b2c001c8e4a7e",
"name": "Example",
"description": "An example product",
"manager": "Manager",
"__v": 0
}
```
#### `toJSON()` 사용하지 않음
```javascript
const product = new Product({ name: 'Example', description: 'An example product', manager: 'Manager', password: 'password' });
await product.save();
let data = product;
data.password = undefined;
console.log(data);
```
출력 결과:
```json
{
"_id": "60c72b2f5f1b2c001c8e4a7e",
"name": "Example",
"description": "An example product",
"manager": "Manager",
"password": undefined,
"__v": 0,
"isNew": false,
"errors": null,
"_doc": {
"_id": "60c72b2f5f1b2c001c8e4a7e",
"name": "Example",
"description": "An example product",
"manager": "Manager",
"password": "password",
"__v": 0
}
}
```
### 요약
- `toJSON()`을 사용하면 순수한 JSON 객체를 얻을 수 있으며, 이는 클라이언트에게 응답으로 보내기 더 적합합니다.
- 사용하지 않으면 몽구스 문서 객체가 그대로 반환되어, 몽구스의 내부 메서드와 프로퍼티가 포함될 수 있습니다.
- 데이터 전송 시 불필요한 정보가 포함될 수 있으며, 이는 보안이나 성능 면에서 문제가 될 수 있습니다.
따라서 클라이언트에게 데이터를 응답으로 보낼 때는 `toJSON()`을 사용하여 불필요한 정보를 제거하고 순수한 JSON 객체를 사용하는 것이 좋습니다.
프리즈마는 이미 JavaScript 객체 형태로 반환되므로 추가 작업 필요 없다
'mongoDB' 카테고리의 다른 글
mongo 스키마 모델 (0) | 2024.05.16 |
---|---|
mongoose의 exec() 메서드 사용하는 경우 + exec 설명 (0) | 2024.05.14 |
mongoose와 MongoDB 클라이언트 도구 각각 사용하기 좋은 상황 (0) | 2024.05.14 |