스키마 버전 관리용 모델 데이터
이 페이지의 내용
개요
때에 따라 데이터베이스 스키마 업데이트가 필요합니다. 예를 들어, 사용자 연락처 정보를 보관하기 위한 스키마는 Twitter나 Skype와 같은 새로운 커뮤니케이션 수단이 대중화되면 이를 포함하기 위한 업데이트가 필요할 수 있습니다.
동일한 컬렉션에서 다른 형태의 문서를 지원하는 MongoDB의 유연한 스키마 모델을 사용하여 컬렉션의 스키마를 점진적으로 업데이트할 수 있습니다. 스키마 모델을 업데이트할 때 스키마 버전 관리 패턴을 사용하면 버전 번호로 업데이트를 추적할 수 있습니다. 애플리케이션 코드는 버전 번호를 사용하여 다운타임 없이 다양한 형태의 문서를 식별하고 처리할 수 있습니다.
스키마 버전 관리 패턴
스키마 버전 관리 패턴을 실행하려면 처음 수정할 때 schema_version
(또는 이와 유사한 이름의) 필드를 스키마에 추가합니다. 새 스키마를 사용하는 문서에는 스키마의 두 번째 반복 수행을 준수하고 있다는 점을 나타내는 schema_version
2
표시가 있어야 합니다. 스키마를 다시 업데이트하는 경우 schema_version
을 높입니다.
애플리케이션 코드는 문서의 schema_version
이나 버전이 없다는 점을 이용하여 문서를 조건부로 처리할 수 있습니다. 데이터베이스에 새로운 정보를 저장하려면 최신 스키마를 사용합니다.
예시
다음 예시에서는 users
컬렉션에서 문서에 대한 스키마를 반복합니다.
이 스키마의 첫 번째 반복 수행에서는 galactic_id
, name
및 phone
필드가 기록에 포함됩니다.
// 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_version
은2
이며, 애플리케이션은 새로운 필드contact_method.work
및contact_method.home
을 렌더링하는 전용 함수에 반환된 문서를 전달합니다.
애플리케이션 코드는 schema_version
필드를 사용하여 코드에 전용 핸들러 함수를 추가하는 방식으로 동일한 컬렉션에서 스키마 반복을 원하는 횟수만큼 지원할 수 있습니다.
사용 사례
스키마 버전 관리 패턴은 다음 사례 중 한 가지 이상에 해당될 경우에 이상적으로 사용할 수 있습니다.
애플리케이션 다운타임을 사용할 수 없는 경우
문서 업데이트 완료하는 데 몇 시간, 며칠 또는 몇 주가 걸릴 경우
문서를 새 스키마 버전으로 반드시 업데이트하지 않아도 되는 경우
스키마 버전 관리 패턴을 이용하면 기존의 표 형식 데이터베이스에 비해 데이터 마이그레이션의 시기와 방법을 효과적으로 결정할 수 있습니다.