Docs Menu

스키마 버전 관리용 모델 데이터

때에 따라 데이터베이스 스키마 업데이트가 필요합니다. 예를 들어, 사용자 연락처 정보를 보관하기 위한 스키마는 Twitter나 Skype와 같은 새로운 커뮤니케이션 수단이 대중화되면 이를 포함하기 위한 업데이트가 필요할 수 있습니다.

동일한 컬렉션에서 다른 형태의 문서를 지원하는 MongoDB의 유연한 스키마 모델을 사용하여 컬렉션의 스키마를 점진적으로 업데이트할 수 있습니다. 스키마 모델을 업데이트할 때 스키마 버전 관리 패턴을 사용하면 버전 번호로 업데이트를 추적할 수 있습니다. 애플리케이션 코드는 버전 번호를 사용하여 다운타임 없이 다양한 형태의 문서를 식별하고 처리할 수 있습니다.

스키마 버전 관리 패턴을 실행하려면 처음 수정할 때 schema_version(또는 이와 유사한 이름의) 필드를 스키마에 추가합니다. 새 스키마를 사용하는 문서에는 스키마의 두 번째 반복 수행을 준수하고 있다는 점을 나타내는 schema_version 2 표시가 있어야 합니다. 스키마를 다시 업데이트하는 경우 schema_version을 높입니다.

애플리케이션 코드는 문서의 schema_version이나 버전이 없다는 점을 이용하여 문서를 조건부로 처리할 수 있습니다. 데이터베이스에 새로운 정보를 저장하려면 최신 스키마를 사용합니다.

다음 예시에서는 users 컬렉션에서 문서에 대한 스키마를 반복합니다.

이 스키마의 첫 번째 반복 수행에서는 galactic_id, namephone 필드가 기록에 포함됩니다.

// users collection
{
"_id": "<ObjectId>",
"galactic_id": 123,
"name": "Anakin Skywalker",
"phone": "503-555-0000",
}

다음 반복에서는 다른 형태의 추가 정보를 포함하도록 스키마가 업데이트됩니다.

// users collection
{
"_id": "<ObjectId>",
"galactic_id": 123,
"name": "Darth Vader",
"contact_method": {
"work": "503-555-0210",
"home": "503-555-0220",
"twitter": "@realdarthvader",
"skype": "AlwaysWithYou"
},
"schema_version": "2"
}

schema_version 추가는 애플리케이션이 새 스키마에 적합하게 구성된 문서를 식별하고 적절하게 처리할 수 있음을 의미합니다. 문서에 schema_version이 존재하지 않는 경우에도 애플리케이션은 이전 문서를 처리할 수 있습니다.

예를 들어 사용자의 전화번호를 galactic_id로 찾는 애플리케이션을 생각해 볼 수 있습니다. galactic_id가 입력되면 애플리케이션은 데이터베이스를 쿼리해야 합니다.

db.users.find( { galactic_id: 123 } );

데이터베이스에서 문서가 반환된 후 애플리케이션은 문서에 schema_version 필드가 있는지 확인합니다.

  • schema_version 필드가 없는 경우 애플리케이션은 반환된 문서를 원래 스키마에서 phone 필드를 렌더링하는 전용 함수에 전달합니다.

  • schema_version 필드가 있는 경우 애플리케이션은 스키마 버전을 확인합니다 이 예시에서 schema_version2이며, 애플리케이션은 새로운 필드 contact_method.workcontact_method.home을 렌더링하는 전용 함수에 반환된 문서를 전달합니다.

애플리케이션 코드는 schema_version 필드를 사용하여 코드에 전용 핸들러 함수를 추가하는 방식으로 동일한 컬렉션에서 스키마 반복을 원하는 횟수만큼 지원할 수 있습니다.

스키마 버전 관리 패턴은 다음 사례 중 한 가지 이상에 해당될 경우에 이상적으로 사용할 수 있습니다.

  • 애플리케이션 다운타임을 사용할 수 없는 경우

  • 문서 업데이트 완료하는 데 몇 시간, 며칠 또는 몇 주가 걸릴 경우

  • 문서를 새 스키마 버전으로 반드시 업데이트하지 않아도 되는 경우

스키마 버전 관리 패턴을 이용하면 기존의 표 형식 데이터베이스에 비해 데이터 마이그레이션의 시기와 방법을 효과적으로 결정할 수 있습니다.