Azure Cosmos DB: 글로벌 NoSQL
Cosmos DB의 다중 모델·다중 지역 아키텍처를 살펴보고, 파티션 키를 이해하며, 애플리케이션 요구 사항에 맞는 일관성 수준을 선택합니다.
Azure Cosmos DB: 글로벌 NoSQL은(는) CoddyKit의 무료 Azure Fundamentals 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Azure Fundamentals 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Azure Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.
Azure Cosmos DB란 무엇입니까
Azure Cosmos DB는 Microsoft의 전 세계 분산 다중 모델 NoSQL 데이터베이스 서비스입니다. 전 세계 어디서나 어떤 규모로든 한 자릿수 밀리초의 읽기 및 쓰기 지연 시간을 제공하도록 설계되었습니다. 단일 지역으로 제한되는 기존 데이터베이스와 달리 Cosmos DB는 수십 개의 Azure 지역에 데이터를 동시에 투명하게 복제할 수 있습니다.
다중 모델 API 지원
Cosmos DB는 하나의 서비스를 통해 여러 데이터베이스 API를 지원합니다. 기본 제공 NoSQL API(JSON 문서), MongoDB 드라이버를 기반으로 구축된 앱을 위한 MongoDB API, 와이드 컬럼 작업을 위한 Apache Cassandra API, 그래프 데이터를 위한 Gremlin API, 키-값 데이터를 위한 Table API를 사용할 수 있습니다. 각 API는 익숙한 인터페이스를 통해 Cosmos DB의 기본 엔진을 제공합니다.
계정, 데이터베이스 및 컨테이너
Cosmos DB 리소스 계층은 세 가지 수준으로 구성됩니다. 계정은 복제 지역 목록과 일관성 수준을 정의하는 최상위 리소스입니다. 계정 안에는 논리적 네임스페이스인 데이터베이스를 만듭니다. 각 데이터베이스 안에는 항목(문서)을 보관하고 처리량을 프로비저닝하는 단위인 container를 만듭니다.
# Create a Cosmos DB account with the NoSQL API
az cosmosdb create \
--name mycosmosaccount \
--resource-group myRG \
--kind GlobalDocumentDB \
--locations regionName=eastus failoverPriority=0 isZoneRedundant=true
# Create a database
az cosmosdb sql database create \
--account-name mycosmosaccount \
--resource-group myRG \
--name myDatabase파티션 키: 확장의 기반
파티션 키는 Cosmos DB가 물리적 파티션 전체에 데이터를 분산하는 데 사용하는 모든 항목의 속성입니다. 올바른 파티션 키를 선택하는 것이 중요합니다. 파티션 키는 카디널리티가 높고(서로 다른 값이 많고), 쓰기 트래픽을 고르게 분산하며, 대부분의 쿼리에 포함되어야 합니다. 잘못된 파티션 키를 선택하면 처리량이 제한되고 성능이 저하되는 핫 파티션이 발생합니다.
// Example container with /userId as partition key
// Items in the container:
{
'id': 'order-001',
'userId': 'user-42',
'product': 'Widget',
'total': 29.99
}
// userId distributes orders across partitions처리량: RU/s 모델
Cosmos DB는 초당 요청 단위(RU/s)로 처리량에 대한 요금을 부과합니다. 1RU는 대략 ID로 1KB 문서를 읽는 데 드는 비용입니다. 쓰기, 쿼리, 삭제에는 항목 크기와 인덱스 복잡도에 따라 더 많은 RU가 사용됩니다. 컨테이너 수준에서 RU/s를 프로비저닝하거나 데이터베이스의 모든 컨테이너가 공유하는 풀을 사용할 수 있으며, 자동 확장 모드로 전환하여 Cosmos DB가 처리량을 자동으로 확장하도록 할 수도 있습니다.
# Create a container with 400 RU/s
az cosmosdb sql container create \
--account-name mycosmosaccount \
--resource-group myRG \
--database-name myDatabase \
--name orders \
--partition-key-path '/userId' \
--throughput 400전역 배포
Cosmos DB의 가장 강력한 기능은 몇 번의 클릭만으로 데이터를 전 세계에 복제할 수 있다는 점입니다. 계정에 지역을 추가하면 Cosmos DB가 모든 지역의 모든 쓰기 작업을 자동으로 동기화합니다. 다중 쓰기(다중 주 복제본) 구성에서는 각 지역이 읽기와 쓰기를 동시에 처리할 수 있으므로 지리적으로 분산된 사용자의 지연 시간을 최소화할 수 있습니다.
# Add a second region to the Cosmos DB account
az cosmosdb update \
--name mycosmosaccount \
--resource-group myRG \
--locations regionName=eastus failoverPriority=0 \
regionName=westeurope failoverPriority=1다섯 가지 일관성 수준
Cosmos DB는 가장 강한 수준부터 가장 약한 수준까지 연속적인 범위로 조정할 수 있는 다섯 가지 일관성 수준을 제공합니다. Strong(선형화 가능한 읽기, 가장 높은 지연 시간), Bounded Staleness(읽기가 제한된 시간 범위만큼 쓰기를 뒤따름), Session(기본값 — 세션 내에서 자신의 쓰기에 대해 일관된 읽기 제공), Consistent Prefix(읽기에서 순서가 뒤바뀐 쓰기를 절대 보지 않음), Eventual(가장 빠른 읽기, 가장 약한 보장)입니다. 오래된 데이터를 허용할 수 있는 애플리케이션의 수준에 따라 선택하십시오.
자동 인덱싱
기본적으로 Cosmos DB는 사전에 스키마를 정의하지 않아도 삽입하는 모든 항목의 모든 속성을 자동으로 인덱싱합니다. 따라서 인덱스를 유지 관리하지 않고도 유연한 임시 쿼리를 실행할 수 있습니다. 한 번도 쿼리하지 않는 경로를 제외하도록 인덱싱 정책을 사용자 지정하여 저장소 비용을 줄이거나, 여러 속성에 대한 ORDER BY 쿼리를 위해 복합 인덱스를 추가할 수 있습니다.
// Custom indexing policy example
{
'indexingMode': 'consistent',
'includedPaths': [{ 'path': '/*' }],
'excludedPaths': [
{ 'path': '/largeTextBlob/?' },
{ 'path': '/_etag/?' }
]
}이벤트 기반 앱을 위한 변경 피드
변경 피드는 Cosmos DB 컨테이너에서 수행되는 모든 만들기 및 업데이트 작업을 정렬하여 기록한 로그입니다. 애플리케이션은 변경 피드를 구독하여 후속 처리를 트리거할 수 있습니다. 예를 들어 검색 인덱스를 업데이트하거나, 알림을 보내거나, 구체화된 뷰에 쓸 수 있습니다. 변경 피드는 Cosmos DB 아키텍처에서 이벤트 기반 및 CQRS 패턴의 기반입니다.
만료 데이터용 TTL(Time-to-Live)
Cosmos DB는 지정된 초가 지나면 항목을 자동으로 삭제하도록 컨테이너 또는 개별 항목에 설정하는 속성인 TTL(Time-to-Live)을 지원합니다. 세션 데이터, 캐시 항목, 규정상 보존 기간이 정해진 감사 로그 또는 만료 시점을 알고 있는 모든 데이터에 적합합니다. TTL 삭제는 백그라운드 작업으로 수행되며 프로비저닝된 RU/s를 사용하지 않습니다.
// Enable TTL on a container (TTL in seconds)
az cosmosdb sql container update \
--account-name mycosmosaccount \
--resource-group myRG \
--database-name myDatabase \
--name sessions \
--ttl 3600가격 책정 및 Serverless 계층
Cosmos DB는 두 가지 청구 모드를 제공합니다. 프로비저닝된 처리량은 실제 사용량과 관계없이 RU/s-시간 단위로 요금이 부과되며, 일정하고 예측 가능한 작업에 적합합니다. Serverless 모드는 사용한 RU와 저장된 GB를 기준으로 요금을 부과하고 최소 비용이 없으므로 개발, 프로토타이핑, 트래픽 급증 상황에 비용 효율적입니다. Serverless Cosmos DB는 현재 단일 지역으로 제한됩니다.
빠른 확인
이 단원에서 배운 Microsoft Azure Fundamentals(AZ-900) 개념을 이해했는지 확인해 보세요.
단원 요약
이 단원에서는 다음 내용을 배웠습니다. Cosmos DB는 전 세계에 분산된 다중 모델 NoSQL 서비스입니다. 파티션 키는 데이터를 분할하는 방식을 결정하므로 신중하게 선택해야 합니다. 또한 5가지 일관성 수준을 통해 지연 시간과 데이터 최신성 사이의 균형을 조정할 수 있습니다. 다음으로 오픈 소스 데이터베이스 엔진을 위한 애저의 관리형 서비스를 살펴보겠습니다.
자주 묻는 질문
“Azure Cosmos DB: 글로벌 NoSQL” 강의는 무료인가요?
네 — “Azure Cosmos DB: 글로벌 NoSQL” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Azure Fundamentals 강의 전체를 잠금 해제할 수 있습니다. Azure Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.
“Azure Cosmos DB: 글로벌 NoSQL”에서 뭘 배우나요?
Cosmos DB의 다중 모델·다중 지역 아키텍처를 살펴보고, 파티션 키를 이해하며, 애플리케이션 요구 사항에 맞는 일관성 수준을 선택합니다. 브라우저에서 직접 실행하는 실습 코드로 Azure Fundamentals을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Azure Fundamentals을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Azure Fundamentals은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“Azure Cosmos DB: 글로벌 NoSQL” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Azure Fundamentals 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Azure Fundamentals 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Azure SQL Database
- Azure Cosmos DB: 글로벌 NoSQL
- Azure의 오픈 소스 엔진용 데이터베이스
- Azure로 데이터베이스 마이그레이션