cosmosdb-모범-사례은(는) 무엇을 하나요?
'cosmosdb-best-practices' 에이전트 스킬 (cline/skills)
이 스킬은 Azure Cosmos DB를 사용할 때 따라야 할 주요 모범 사례를 제공합니다.
개요
Azure Cosmos DB는 전 세계적으로 분산된 다중 모델 데이터베이스 서비스로, 높은 가용성, 짧은 지연 시간, 그리고 유연한 스키마를 제공합니다. 이 스킬은 Cosmos DB의 성능, 비용, 그리고 보안을 최적화하는 방법을 안내합니다.
주요 모범 사례
1. 파티션 키 선택
- 균일한 분포: 파티션 키는 요청이 여러 파티션에 균등하게 분산되도록 선택하십시오.
- 핫 파티션 방지: 데이터 액세스 패턴이 특정 파티션에 집중되지 않도록 하십시오.
- 쿼리 범위 고려: 대부분의 쿼리가 동일한 파티션 내에서 수행되도록 설계하십시오.
2. 인덱싱 정책
- 기본 인덱싱: 모든 필드에 대해 자동 인덱싱이 활성화되어 있으므로, 필요 없는 경우 특정 경로를 제외하십시오.
- 복합 인덱스: 다중 필드 정렬이나 필터가 필요한 쿼리의 성능을 위해 복합 인덱스를 사용하십시오.
- 인덱스 크기 최적화: 인덱싱하지 않을 필드를 명시적으로 제외하여 저장 비용을 절감하십시오.
3. 요청 단위(RU) 최적화
- 프로비저닝 모드 선택: 워크로드 특성에 따라 프로비저닝된 처리량과 서버리스 모드 중 선택하십시오.
- 쿼리 비용 평가: 각 쿼리의 RU 비용을
x-ms-request-charge헤더로 모니터링하십시오. - 일괄 처리: 가능한 경우 여러 작업을 하나의 트랜잭션으로 결합하여 RU 사용량을 줄이십시오.
4. 글로벌 분배
- 다중 마스터: 여러 지역에 데이터를 쓰기 위해 다중 마스터 구성을 사용하십시오.
- 자동 장애 조치: 고가용성을 위해 자동 장애 조치 정책을 구성하십시오.
- 읽기 기본 설정: 사용자와 가까운 지역에서 읽기를 수행하도록 애플리케이션을 설정하십시오.
5. 보안
- 네트워크 격리: VNet 서비스 끝점 또는 프라이빗 엔드포인트를 사용하여 데이터베이스에 대한 액세스를 제한하십시오.
- 인증: Azure AD 관리 ID를 사용하여 서비스 간 인증을 처리하십시오.
- 암호화: 전송 중 데이터 암호화를 위해 TLS 1.2 이상을 사용하고, 저장 데이터 암호화는 기본 설정을 그대로 사용하십시오.
예제 코드
다음은 Node.js SDK를 사용하여 Cosmos DB 데이터베이스에 연결하고 항목을 쿼리하는 간단한 예제입니다.
const { CosmosClient } = require("@azure/cosmos");
const endpoint = process.env.COSMOS_DB_ENDPOINT;
const key = process.env.COSMOS_DB_KEY;
const client = new CosmosClient({ endpoint, key });
async function queryItems() {
const database = client.database("mydb");
const container = database.container("mycontainer");
const querySpec = {
query: "SELECT * FROM c WHERE c.category = @category",
parameters: [
{ name: "@category", value: "electronics" }
]
};
const { resources: items } = await container.items.query(querySpec).fetchAll();
console.log(items);
}
queryItems().catch(console.error);
환경 변수
| 변수 이름 | 설명 |
|---|---|
COSMOS_DB_ENDPOINT | Cosmos DB 계정 엔드포인트 (예: https://myaccount.documents.azure.com:443/) |
COSMOS_DB_KEY | Cosmos DB 계정의 기본 키 또는 보조 키 |
참고 링크
이 스킬은 Azure Cosmos DB 사용 시 효율성과 신뢰성을 높이기 위해 설계되었습니다.