본문 바로가기
mongoDB

몽구스에서 toJson() 쓸때와 안쓸때 차이

by momomoo 2024. 6. 27.

`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 객체 형태로 반환되므로 추가 작업 필요 없다