MongoDB는 스키마리스(Schema-less) 데이터베이스이지만, Mongoose와 같은 ODM(Object Data Modeling) 라이브러리를 사용하면 스키마를 정의하고 모델을 생성할 수 있습니다. 이를 통해 데이터 구조와 제약 조건을 설정할 수 있습니다. 여기에서는 MongoDB에서 Mongoose를 사용하여 스키마와 모델을 정의하고 사용하는 방법을 설명하겠습니다.
### Mongoose의 Schema와 Model
#### Schema
스키마(Schema)는 MongoDB 컬렉션에 저장될 문서의 구조를 정의합니다. 각 필드의 데이터 타입, 기본값, 유효성 검사 등을 설정할 수 있습니다. 스키마를 통해 데이터 구조와 제약 조건을 명확히 정의할 수 있어 일관성을 유지하고 데이터 무결성을 보장하는 데 도움이 됩니다.
**예시: User 스키마 정의**
```javascript
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userSchema = new Schema({
name: {
type: String,
required: true,
},
email: {
type: String,
required: true,
unique: true,
},
age: {
type: Number,
min: 0,
},
createdAt: {
type: Date,
default: Date.now,
}
});
module.exports = userSchema;
```
위의 예시에서 `userSchema`는 사용자(User) 문서의 구조를 정의합니다. 각 필드에 데이터 타입과 제약 조건을 설정할 수 있습니다. 예를 들어, `name`과 `email`은 문자열 타입이며, 필수(`required`) 필드입니다. `email`은 또한 고유(`unique`)해야 합니다. `age`는 숫자 타입이며 0 이상의 값이어야 하고, `createdAt` 필드는 문서 생성 시 자동으로 현재 시간으로 설정됩니다.
#### Model
모델(Model)은 스키마를 기반으로 생성된 MongoDB 컬렉션의 인터페이스입니다. 모델을 사용하여 데이터베이스에서 문서를 생성(Create), 읽기(Read), 업데이트(Update), 삭제(Delete)할 수 있습니다. 모델은 데이터베이스와 상호작용하는 메서드를 제공하며, 스키마에서 정의한 구조와 제약 조건을 따릅니다.
**예시: User 모델 사용**
```javascript
const mongoose = require('mongoose');
const userSchema = require('./userSchema'); // 위에서 정의한 User 스키마
const User = mongoose.model('User', userSchema);
// 사용자 생성
const newUser = new User({
name: 'John Doe',
email: 'john.doe@example.com',
age: 30
});
newUser.save()
.then(user => console.log('User saved:', user))
.catch(err => console.error('Error saving user:', err));
// 사용자 조회
User.findOne({ email: 'john.doe@example.com' })
.then(user => console.log('User found:', user))
.catch(err => console.error('Error finding user:', err));
// 사용자 업데이트
User.updateOne({ email: 'john.doe@example.com' }, { age: 31 })
.then(result => console.log('User updated:', result))
.catch(err => console.error('Error updating user:', err));
// 사용자 삭제
User.deleteOne({ email: 'john.doe@example.com' })
.then(result => console.log('User deleted:', result))
.catch(err => console.error('Error deleting user:', err));
```
위의 예시에서 `User` 모델은 `userSchema`를 기반으로 만들어졌습니다. 이를 통해 새로운 사용자를 생성하고, 데이터를 조회하며, 업데이트하고, 삭제하는 작업을 수행할 수 있습니다.
### 요약
- **Schema**: MongoDB 컬렉션에 저장될 문서의 구조를 정의합니다. 각 필드의 데이터 타입, 기본값, 유효성 검사 등을 설정할 수 있습니다.
- **Model**: 스키마를 기반으로 생성된 데이터베이스 인터페이스입니다. 모델을 사용하여 데이터베이스에서 CRUD 작업을 수행할 수 있습니다.
Mongoose를 사용하면 MongoDB의 유연한 스키마 구조를 보완하여, 데이터베이스의 일관성을 유지하고 데이터 무결성을 보장할 수 있습니다. 이를 통해 더 체계적으로 데이터를 관리하고, 보다 안정적인 애플리케이션을 개발할 수 있습니다.
'면접질문' 카테고리의 다른 글
Promise란 무엇인지 설명해주세요. (1) | 2024.07.25 |
---|---|
API 명세서를 작성해야 되는 이유는 무엇인가요? (0) | 2024.05.22 |