Skip to content

Instantly share code, notes, and snippets.

@ianychoi
Last active December 3, 2020 12:57
Show Gist options
  • Select an option

  • Save ianychoi/95c4c0340ae60495bbf66bdf6350e829 to your computer and use it in GitHub Desktop.

Select an option

Save ianychoi/95c4c0340ae60495bbf66bdf6350e829 to your computer and use it in GitHub Desktop.
CosmosDB 실습01

모듈: Azure Cosmos DB 알아보기

실습: Azure Cosmos DB 알아보기

Exercise 1: SQL API로 Azure Cosmos DB 데이터베이스 생성

1단계: 환경 준비

2단계: Cosmos DB SQL API를 사용한 문서 데이터베이스 생성

  1. 웹 브라우저 를 실행합니다.
  2. http://portal.azure.com URL에 접속합니다.
  3. (Azure 패스로 만든) 계정을 통해 로그인합니다.
  4. 왼쪽 부분에서 Azure Cosmos DB 를 클릭합니다 (또는 이를 찾습니다).
  5. Azure Cosmos DB 내용에서, + 추가 를 클릭합니다.
  6. Azure Cosmos DB 내용에서, ID 상자부분에, <company>-sql-<성함>-<일자> 형태로 입력합니다, for example microsoft-sql-kim-05.
  7. API 목록에서는, SQL 을 클릭합니다.
  8. 리소스 그룹 에서, 새로 만들기 를 클릭하고, Lab00001 로 입력합니다.
  9. 지역 목록에서는, Azure Pass로 사용 가능한 가장 가까운 지역을 선택하고 생성 을 클릭합니다.
  10. Azure Cosmos DB가 생성될 때까지 기다립니다. 수 분이 소요될 수 있습니다.
  11. Azure Cosmos DB 부분에서, 새로 고침 을 하고, <company>-sql-<성함>-<일자> 를 클릭합니다.
  12. <company>-sql-<성함>-<일자> 부분에서, 데이터 탐색기새 데이터베이스 를 클릭합니다.
  13. New Database 부분에서, Database id 상자 안에, SalesData 라고 입력하고, OK 를 클릭합니다.
  14. Data Explorer 부분에서, New Collection 을 클릭합니다.
  15. Add collection 부분에서, Database id 내에서, Use Existing 을 클릭합니다.
  16. Choose an existing database 목록 내에서, SalesData 를 클릭합니다.
  17. Collection Id 상자에서, Customers 를 입력합니다.
  18. Throughput 상자에서, 10005000 으로 변경합니다.
  19. Unique keys 에서, + Add unique key 를 클릭합니다.
  20. 텍스트 상자에서, /customerid 를 입력하고, OK 를 클릭합니다.

3단계: 고객문서를 집합에 추가

  1. SQL API 창에서, SalesData 밑 부분에, Customers 를 확장하고, Documents 를 클릭합니다.

  2. Documents 탭에서, New Document 를 클릭합니다.

  3. 디폴트 문서 텍스트를 변경합니다:

    {
        "id": "replace_with_new_document_id"
    }

    를 다음 새로운 문서로 변경합니다:

    {
        "id": "1",
        "customerid": 101,
        "firstname": "Orlando",
        "lastname": "Gee",
        "email": "[email protected]",
        "addresses": [
            { "addressline1" : "660 Lindbergh", "city" : "Saint Louis", "stateprovince" : "Missouri", "countryregion" : "United States", "postalcode" : "63103" },
            { "addressline1" : "Ontario Mills", "city" : "Ontario", "stateprovince" : "California", "countryregion" : "United States", "postalcode" : "91764" }
        ]
    }
  4. Documents 탭에서, Save 를 클릭합니다.

  5. 다음 문서로 2-4단계를 반복합니다:

    {
        "id": "2",
        "customerid" : 122,
        "title" : "Ms.",
        "firstname" : "Caroline",
        "middlename" : "A.",
        "lastname" : "Vicknair",
        "companyname" : "World of Bikes",
        "salesperson" : "adventure-works\\jillian0",
        "addresses": [
            { "addressline1" : "72540 Blanco Rd.", "addressline2" : "South Side", "city" : "San Antonio", "stateprovince" : "Texas", "countryregion" : "United States", "postalcode" : "78204" }
        ]
    }

    :

    {
        "id": "3",
        "customerid": 108,
        "title" : "Mr.",
        "firstname" : "Robert",
        "middlename" : "R.",
        "lastname" : "Vessa",
        "suffix" : "Esq.",
        "companyname" : "Totes & Baskets Company",
        "salesperson" : "adventure-works\\jillian0",
        "emailaddress" : "[email protected]",
        "phone" : "560-555-0171"
    }

질문: customerid 필드셋이 108이고, id가 4인 데이터를 추가해보면 어떨까요?

답변: Azure portal에 다음 메시지가 보일 것입니다:

Unique index constraint violation.

Task 4: SQL 쿼리 실행

  1. Data Explorer 창에서, New SQL Query 를 클릭합니다.

  2. Query 1 탭에서, 기존 SQL query를 주석처리하고, Execute Query 를 클릭합니다:

    SELECT * FROM c
  3. 위 쿼리를 다음 코드로 변경하고 Execute Query 를 클릭합니다.

     SELECT c.firstname, c.lastname, c.email FROM c

질문: 문서 데이터베이스는 스키마가 없는데, email 속성을 갖지 않는 customers JSON에 대해서는 무엇이 반환될까요?

답변: 속성을 지정하지 않은 Customers 데 대해서는 데이터를 반환하지 않습니다. 따라서 이 예제에서는 첫 번째 고객만 email 주소를 반환합니다. 다음 두 고객은 firstname 및 lastname 만 반환합니다.

  1. 위 쿼리를 다음 코드로 바꾸고, Execute Query 를 실행합니다.

    SELECT c.Customerid FROM c

질문: 왜 데이터가 아무것도 나타나지 않을까요? (힌트: 필드 이름은 대소문자를 구별합니다)

답변: 이 쿼리는 3개의 빈 문서를 반환하는데, Customerid attribute를 가지는 문서가 없기 때문입니다. 모두 customerid attribute는 가지고 있습니다. Azure Cosmos DB는 문서 데이터베이스가 스키마가 없기에 생각하는 컬럼과 같은 문법 검사를 수행할 수가 없습니다.

  1. 위 쿼리를 다음 코드로 바꾸고, Execute Query 를 실행합니다.

    SELECT c.addresses FROM c

질문: 이 쿼리를 통해 반환되는 문서 형식을 설명하시오.

답변: 첫 번째 customer는 addresses가 2개 있고, 두 번째 customer는 address가 하나 있으며, 세 번째 customer는 addresses가 없습니다 (빈 문서 {} 형태로 출력)

  1. 위 쿼리를 다음 코드로 바꾸고, Execute Query 를 실행합니다.

    SELECT c.customerid, c.city FROM c

질문: 이 쿼리로 어떤 것이 반환되기를 기대하였으나, 동작하지 않는 이유가 무엇일까요?

답변: 각 customer에 대해 customerid 및 city가 각각 반환되기를 기대하였을 테지만, customerid만 반환됩니다. 이는 문서 메인 파트에 city가 필드로 없기 때문입니다 - address 안에 서브 문서 배열처럼 되어 있기 때문이죠.

질문: 각 customer에 대해 customerid 및 city 를 출력하려면 어떻게 해야할까요? 아래 쿼리가 맞을까요?

SELECT c.customerid, c.addresses.city FROM c

답변: 아닙니다. 정확한 답변은 아래 코드인데, 왜일까요?

SELECT c.customerid, c.addresses[0].city FROM c

참고: addresses 부분은 배열입니다. 따라서, 배열 인덱스를 사용하여 배열 내 서브 문서에 접근해야 합니다 (이 경우, 0번째 요소가 첫 번째 서브 문서입니다). 배열 내 모든 문서에 대해 데이터를 찾고자 한다면, JOIN 연산자를 사용할 수가 있는데, 이는 고급 과정에서 다룰 내용입니다. 관심이 있는 경우, 다음과 같이 쿼리를 재작성하여 실행해 보십시오:

SELECT c.customerid, a.city
FROM c
JOIN a IN c.addresses

5단계: 문서 라이프타임 구성

  1. SQL API 창에서, Documents 아래 부분에서, Scale & Settings 를 클릭합니다.
  2. Scale & Settings 탭에서, Time to Live 아래 부분에서, On 을 클릭합니다.
  3. second(s) 상자에서, 10 을 입력하고, Save 를 클릭합니다.
  4. SQL API 창에서, Documents 를 선택합니다.
  5. Edit Filter 버튼에서, Refresh 버튼을 클릭합니다.

참고: 모든 이전 문서가 지워졌다고 가정합니다.

  1. SQL API 창에서, Documents 아래 부분에서, Scale & Settings 를 클릭합니다.
  2. Scale & Settings 탭에서, Time to Live 아래 부분에서, Off 를 클릭하고, Save 를 클릭합니다.

6단계: 여러 리전에 Cosmos DB 계정 복제

  1. Data Explorer 창에서, SETTINGS 부분 중, Replicate data globally 를 클릭합니다.
  2. Replicate data globally 부분 중, 지도에서, 현재 사용 리전에서 가까운 부분에 + 를 클릭합니다.
  3. 지도에서, 현재 사용 리던에서 가까운 또 다른 부분에서 + 를 선택하고 Save 를 클릭합니다.

참고: 추가된 리던은 페이지 하단에 READ REGIONS 에서 보입니다. 수 분에서 (최대 30 분까지), 새로운 리전이 활성화되는데 소요될 수 있습니다. Azure 포털이 해당 리던이 사용 가능하게 되면 알림을 줄 것입니다.

  1. 해당 지역이 추가되면, Automatic Failover 를 선택합니다.
  2. Automatic Failover 부분에서, ON 을 클릭합니다.
  3. 추가된 지역에 마우스를 가져다 댄 후, 세 개의 점이 있는 핸들을 드래그 & 드롭하여 한 리전을 다른 리전으로 바꾸는 방식으로 우선 순위를 조절합니다. 그리고 나서 OK 를 클릭합니다.
  4. Replicate data globally 부분에서, Save 을 클릭합니다.
  5. Replicate data globally 부분에서, Manual Failover 를 클릭합니다.
  6. Manual Failover 부분에서, 읽어온 리전을 클릭합니다.
  7. I understand and agree to trigger a failover on my current Write Region 체크 박스를 선택하고, OK 를 클릭합니다.
  8. 다음 작업이 준비될 때까지 웹 브라우저에서 기다립니다.

결과: 여기까지 하면 다음과 같은 내용을 한 것입니다:

  • SQL API로 Azure Cosmos DB 데이터베이스 생성.
  • 뭌서를 document 데이터베이스에 추가.
  • 데이터베이스에 대해 여러 쿼리를 수행.
  • Time to Live 값을 document에 대해 조절.
  • 데이터베이스 데이터를 글로벌로 복제.

Exercise 2: 기존 Mongo DB 데이터베이스를 Cosmos DB로 마이그레이션하기

1단계: MongoDB 데이터베이스 준비하기

  1. 시작 메뉴에서 cmd 를 입력하고 엔터를 누릅니다.

  2. 명령 프롬프트에서 다음을 입력하고 엔터를 누릅니다:

    E:
    cd MongoDB\bin
    mongo.exe
    
  3. MongoDB 쉘 프롬프트 > 에서, 다음 명령어를 입력합니다:

    use SalesData;
    db.createUser(
    {
        user: "salesadmin",
        pwd: "Pa55w.rd",
        roles: [ { role: "readWrite", db: "SalesData" } ]
    }
    );
    use admin;
    db.shutdownServer();
    exit;
    
  4. 명령 프롬프트에서, MongoDB를 재시작하기 위해 다음 명령어를 입력하고 엔터를 누릅니다:

    net start mongodb
    
  5. 명령 프롬프트에서, 다음 명령어를 입력하고 엔터를 누릅니다:

    mongo.exe -u "salesadmin" -p "Pa55w.rd" --authenticationDatabase "SalesData"
    
  6. MongoDB 쉘 프롬프트 > 에서, 다음 명령어를 입력하고 엔터를 누릅니다:

    use SalesData;
    db.testcollection.insert({testdata: 1});
    show collections;
    db.testcollection.find();
    exit;
    
  7. 참고로 테스트 데이터가 보일 것입니다.

  8. 명령 프롬프트에서, 다음 명령어를 입력하고 엔터를 누릅니다:

    mongorestore -u "salesadmin" -p "Pa55w.rd" --db SalesData --collection customers  "E:\Labfiles\Lab01\Setup\customers.bson"
    
  9. 다음과 같은 결과를 볼 수 있을 것입니다:

    finished restoring SalesData.customers (407 documents)
    

2단계: DocumentDB 데이터 마이그레이션 도구 실행

  1. 파일 탐색기에서, E:\dmt\bin\dtui 로 이동한 다음, dtui.exe 를 실행합니다.
  2. 다음 단계를 위해 실행 상태로 둡니다.

3단계: MongoDB 데이터베이스를 Cosmos DB 데이터베이스로 가져오기

  1. 웹 브라우저에서, 왼쪽 부분에서 Azure Cosmos DB 를 선택하고 <company>-sql-<성함>-<일자> (이전 실습에서 생성한 SQL API 데이터베이스)를 클릭합니다.

  2. <company>-sql-<성함>-<일자> 부분에서, SETTINGSKeys 를 클릭합니다.

  3. PRIMARY CONNECTION STRING 값에 대한 노트를 만듭니다.

  4. DocumentDB Data Migration Tool 창에서, Welcome 페이지 부분에서, Next 를 클릭합니다.

  5. Source Information 페이지에서, Import from 드롭다운 목록에서, MongoDB 를 선택합니다.

  6. Connection String 창에서, 다음을 입력하고 Verify 을 클릭합니다:

    mongodb://salesadmin:Pa55w.rd@localhost/SalesData
    
  7. Verify Connection 다이얼로그 창에서, OK 를 클릭합니다.

  8. Collection 상자에서, customers 를 입력하고, Next 을 클릭합니다.

  9. Target Information 페이지에서, Connection String 박스에서, 복사한 PRIMARY CONNECTION STRING 정보를 입력합니다.

  10. 문자열 마지막 부분에 database=SalesData 를 추가합니다.

  11. Collection 상자에서, Customers 를 클릭합니다.

  12. Id Field 상자에서, _id 를 입력하고, Next 을 클릭합니다.

  13. Advanced 페이지에서, Next 을 클릭합니다.

  14. Summary 페이지에서, Import 를 클릭합니다. 최대 30초 정도 소요됩니다.

질문: 얼마나 많은 문서가 전송되었을까요?

답변: 407 개 문서

결과: 해당 실습을 하면 다음을 완료한 것입니다:

  • MongoDB 설치 및 기존 MongoDB 문서 집합에서 가져오기.
  • DocumentDB Data Migration Tool 설치.
  • MongoDB 데이터를 Azure Cosmos DB로 마이그레이션.
  • Data Explorer를 실행하여 documents database 내 데이터 보기.

Exercise 3: SQL API를 사용한 데이터 액세스

Task 1: 기존 .NET 응용 프로그램 살펴보기

Task 2: SQL API를 사용해 Cosmos DB에 연결하기 위한 응용 프로그램 구성하기

Task 3: 응용 프로그램 마무리

Task 4: 응용 프로그램 테스트

Exercise 4: Cosmos DB 데이터베이스에서 데이터 보호

Task 1: 사용자 권한 설정

Task 2: 응용 프로그램 구성 및 실행

Task 3: 사용자 인증 및 자원 토큰 생성

Task 4: 웹 API 테스트를 위한 클라이언트 응용 프로그램 빌드

Task 5: 실습 정리

  1. 비용을 절약하기 위해 Cosmos DB 데이터베이스를 포함하는 리소스 그룹을 삭제하고자 합니다.
  2. 웹 브라우저에서 왼쪽 부분에 있는 리소스 그룹 을 클릭합니다.
  3. Lab00001 을 클릭하고, 리소스 그룹 삭제 를 클릭합니다.
  4. "Lab00001"를 정말로 삭제하시겠습니까? 과 같은 내용이 나타나면, 리소스 그룹 이름 입력: 상자에서, Lab00001 를 입력하고, 삭제 를 클릭합니다.

결과: 여기까지 하면 다음 내용을 한 것입니다:

  • Azure 비용을 절약하기 위한 리소스 정리.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment