소개
이 랩에서는 MongoDB 에서 데이터 유효성 검사의 기본 사항을 배우게 됩니다. 데이터 유효성 검사는 모든 컬렉션의 문서가 특정 구조와 규칙을 준수하도록 함으로써 데이터의 무결성과 일관성을 유지하는 데 도움이 되는 중요한 기능입니다. 유효성 검사 규칙이 있는 컬렉션을 생성하고, 유효한 데이터와 유효하지 않은 데이터를 모두 삽입하여 이러한 규칙을 테스트하고, 기존 컬렉션의 유효성 검사 규칙을 수정하는 방법을 배우게 됩니다. 이 랩이 끝나면 MongoDB 데이터베이스 내에서 직접 데이터 품질을 적용할 수 있게 됩니다.
스키마 유효성 검사를 사용하여 컬렉션 생성
첫 번째 단계에서는 MongoDB 서버에 연결하고 특정 유효성 검사 규칙이 있는 새 컬렉션을 생성합니다. 이러한 규칙은 문서 내 필드에 대한 예상 데이터 유형 및 제약 조건을 정의합니다.
먼저 MongoDB Shell (mongosh) 을 열어 데이터베이스와 상호 작용합니다. 이 대화형 셸은 MongoDB 를 관리하는 기본 도구입니다.
mongosh
셸에 들어가면 test>와 같은 프롬프트가 표시됩니다. 이는 기본 test 데이터베이스에 연결되었음을 나타냅니다. dataValidationLab이라는 새 데이터베이스를 생성하고 전환해 보겠습니다.
use dataValidationLab
이제 users 컬렉션을 생성해 보겠습니다. 컬렉션을 생성할 때 $jsonSchema를 사용하여 규칙을 정의하는 validator 문서를 포함합니다.
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "age", "email"],
properties: {
name: {
bsonType: "string",
description: "must be a string and is required"
},
age: {
bsonType: "int",
minimum: 18,
description: "must be an integer >= 18 and is required"
},
email: {
bsonType: "string",
pattern: "^.+@.+$",
description: "must be a valid email address and is required"
}
}
}
}
});
명령을 실행한 후 성공을 나타내는 출력이 표시되어야 합니다.
{ "ok": 1 }
유효성 검사기를 자세히 살펴보겠습니다.
bsonType: "object": 문서의 루트는 객체여야 합니다.required: ["name", "age", "email"]:name,age,email필드는 모든 문서에 존재해야 합니다.properties: 이 객체는 개별 필드에 대한 규칙을 정의합니다.name:string이어야 합니다.age:int(정수) 여야 하며minimum값은 18 이어야 합니다.email: 기본 이메일 형식을 확인하는 정규식pattern과 일치하는string이어야 합니다.
이제 데이터 유효성 검사 규칙이 있는 컬렉션을 성공적으로 생성했습니다. 다음 단계에서는 이러한 규칙을 테스트합니다.
문서 삽입을 통한 유효성 검사 테스트
이제 users 컬렉션에 유효성 검사 규칙이 설정되었으므로 이를 테스트해 보겠습니다. 규칙을 위반하는 여러 문서와 규칙을 준수하는 하나의 문서를 삽입해 볼 것입니다. 이를 통해 MongoDB 가 스키마를 어떻게 적용하는지 이해하는 데 도움이 될 것입니다.
먼저 age 필드에 잘못된 데이터 유형이 있는 문서를 삽입해 보겠습니다. 정수 대신 문자열 "25"를 제공할 것입니다.
db.users.insertOne({
name: "John Doe",
age: "25",
email: "john.doe@example.com"
});
이 작업은 실패합니다. age 필드가 bsonType: "int" 요구 사항을 충족하지 않기 때문에 MongoDB 는 문서를 거부하고 WriteError를 반환합니다. 오류 메시지에는 유효성 검사 실패에 대한 세부 정보가 포함됩니다.
MongoServerError: Document failed validation
다음으로, 필수 필드인 email이 누락된 문서를 삽입해 보겠습니다.
db.users.insertOne({
name: "Jane Doe",
age: 30
});
유효성 검사기의 required 배열에 email 필드가 나열되어 있기 때문에 이 역시 실패합니다. 유사한 WriteCommandError를 받게 됩니다.
마지막으로 모든 규칙을 따르는 문서를 삽입해 보겠습니다. name과 email은 문자열이고 age는 18 이상인 정수입니다.
db.users.insertOne({
name: "Alice",
age: 28,
email: "alice@example.com"
});
이번에는 명령이 성공하며 새로 삽입된 문서의 _id가 포함된 확인 메시지가 표시됩니다.
{
"acknowledged": true,
"insertedId": ObjectId("...")
}
유효한 문서가 추가되었는지 확인하기 위해 컬렉션을 쿼리할 수 있습니다.
db.users.find();
출력에는 유효성 검사를 성공적으로 통과한 문서 하나가 표시됩니다.
[
{
"_id": ObjectId("..."),
"name": "Alice",
"age": 28,
"email": "alice@example.com"
}
]
기존 유효성 검사기 수정
애플리케이션 요구 사항은 시간이 지남에 따라 변경될 수 있으며 유효성 검사 규칙을 업데이트해야 할 수도 있습니다. 이 단계에서는 collMod 명령을 사용하여 기존 컬렉션의 유효성 검사기를 수정하는 방법을 배우고 새로운 규칙을 테스트합니다.
users 컬렉션에 새로운 status 필드를 추가한다고 가정해 보겠습니다. 이 필드는 문자열이어야 하며 "active" 또는 "inactive" 두 가지 값 중 하나만 가질 수 있습니다.
collMod (collection modify) 명령을 사용하여 새 유효성 검사기를 적용합니다.
db.runCommand({
collMod: "users",
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "age", "email", "status"],
properties: {
name: {
bsonType: "string",
description: "must be a string and is required"
},
age: {
bsonType: "int",
minimum: 18,
description: "must be an integer >= 18 and is required"
},
email: {
bsonType: "string",
pattern: "^.+@.+$",
description: "must be a valid email address and is required"
},
status: {
enum: ["active", "inactive"],
description: "can only be one of the enum values and is required"
}
}
}
}
});
명령은 성공 시 { "ok": 1 }을 반환합니다. 이제 status 필드를 요구하고 enum 키워드를 사용하여 해당 값을 제한하도록 유효성 검사기를 업데이트했습니다.
이제 새 규칙을 테스트해 보겠습니다. 잘못된 상태가 있는 문서를 삽입해 보세요.
db.users.insertOne({
name: "Bob",
age: 45,
email: "bob@example.com",
status: "pending"
});
"pending"이 status 필드의 enum 목록에 없으므로 이 작업은 실패합니다. 다음으로 업데이트된 규칙을 준수하는 문서를 삽입합니다.
db.users.insertOne({
name: "Bob",
age: 45,
email: "bob@example.com",
status: "active"
});
이 삽입은 성공합니다. 컬렉션의 모든 문서를 보려면 find()를 다시 실행하세요.
db.users.find();
이제 Alice 와 Bob 의 문서가 모두 표시됩니다. 규칙 변경 전에 삽입된 Alice 의 문서에는 status 필드가 없다는 점에 유의하세요. 기본적으로 유효성 검사는 수정될 때까지 기존 문서에 적용되지 않습니다.
요약
이 실습에서는 MongoDB 에서 데이터 유효성 검사를 구현하는 필수 기술을 배웠습니다. 데이터 유형, 필수 필드 및 값 제약을 적용하기 위해 $jsonSchema 유효성 검사기를 사용하여 컬렉션을 만드는 것부터 시작했습니다. 그런 다음 잘못된 문서와 유효한 문서를 모두 삽입하려고 시도하여 이러한 규칙을 테스트하고 MongoDB 가 스키마를 준수하지 않는 데이터를 어떻게 거부하는지 관찰했습니다. 마지막으로 새로운 요구 사항에 맞게 collMod 명령을 사용하여 기존 컬렉션의 유효성 검사 규칙을 수정하는 방법을 배웠습니다. 이러한 기술은 강력한 애플리케이션을 구축하고 MongoDB 데이터베이스에서 높은 데이터 품질을 유지하는 데 기본이 됩니다.

