Ruby에서 Azure Table Storage 또는 Azure Cosmos DB for Table을 사용하는 방법

적용 대상: 테이블

경고

이 프로젝트는 수명 주기의 커뮤니티 지원 단계에 있습니다. 결국 연결된 모든 클라이언트 라이브러리는 영구적으로 사용 중지됩니다. 사용 중지 및 이 프로젝트 사용에 대한 대안에 대한 자세한 내용은 사용 중지 알림: Azure Storage PHP 클라이언트 라이브러리를 참조하세요.

이 문서의 내용은 Azure Table Storage 및 Azure Cosmos DB for Table에 적용됩니다. Table용 API는 처리량 최적화 테이블, 전역 배포 및 자동 보조 인덱스를 제공하는 Table Storage에 대한 프리미엄 제품입니다.

이 문서에서는 테이블을 만들고, 데이터를 저장하고, 데이터에 대한 CRUD 작업을 수행하는 방법을 보여줍니다. Azure Table service 또는 Azure Cosmos DB for Table 중 하나를 선택합니다. 이 문서에서 설명하는 샘플은 Ruby로 작성되었으며 Azure Storage Table Client Library for Ruby를 사용합니다. 테이블 만들기, 테이블 삭제, 엔터티 삽입 및 테이블에서 엔터티 쿼리가 포함된 시나리오를 다룹니다.

Azure 서비스 계정 만들기

Azure Table Storage 또는 Azure Cosmos DB를 사용하여 테이블을 작업할 수 있습니다. 이러한 두 서비스에서 테이블 제공 간의 차이점에 대한 자세한 내용은 API for Table 개요를 참조하세요. 사용하려는 서비스에 대한 계정을 만들어야 합니다. 다음 섹션에서는 Azure Table Storage와 Azure Cosmos DB 계정을 모두 만드는 방법을 보여줍니다. 단, 둘 중 하나만 사용할 수 있습니다.

Azure Table Storage

Azure Storage 계정을 가장 쉽게 만드는 방법은 Azure Portal을 사용하는 것입니다. 자세한 내용은 스토리지 계정 만들기를 참조하십시오.

Azure PowerShell 또는 Azure CLI를 사용하여 Azure Storage 계정을 만들 수도 있습니다.

또한 이번에 스토리지 계정을 만들지 않으려는 경우 Azure Storage Emulator를 사용하여 로컬 환경에서 코드를 실행하고 테스트할 수 있습니다. 자세한 내용은 개발 및 테스트에 Azure Storage Emulator 사용을 참조하세요.

Azure Cosmos DB for Table

Azure Cosmos DB for Table 계정을 만드는 지침은 데이터베이스 계정 만들기를 참조하세요.

Azure 스토리지 또는 Azure Cosmos DB에 대한 액세스 추가

Azure Storage 또는 Azure Cosmos DB를 사용하려면 Ruby Azure 패키지를 다운로드하여 사용합니다. 이 패키지에는 Table REST 서비스와 통신하는 편의 라이브러리 집합이 포함되어 있습니다.

RubyGems를 사용하여 패키지 가져오기

  1. PowerShell(Windows), Terminal(Mac) 또는 Bash(Unix)와 같은 명령줄 인터페이스를 사용합니다.
  2. 명령 창에서 gem install azure-storage-table을 입력하여 gem 및 종속성을 설치합니다.

패키지 가져오기

주로 사용하는 텍스트 편집기에서 스토리지를 사용할 Ruby 파일의 맨 위에 다음을 추가합니다.

require "azure/storage/table"

연결 문자열 추가

Azure 스토리지 계정 또는 Azure Cosmos DB for Table 계정에 연결할 수 있습니다. 사용 중인 계정 유형에 따라 연결 문자열 가져옵니다.

Azure Storage 연결 추가

Azure Storage 모듈은 AZURE_STORAGE_ACCOUNTAZURE_STORAGE_ACCESS_KEY 환경 변수를 읽고 Azure Storage 계정에 연결하는 데 필요한 정보를 확인합니다. 이러한 환경 변수가 설정되지 않은 경우 다음 코드와 함께 Azure::Storage::Table::TableService 를 사용하기 전에 계정 정보를 지정해야 합니다.

Azure.config.storage_account_name = "<your Azure Storage account>"
Azure.config.storage_access_key = "<your Azure Storage access key>"

Azure 포털의 클래식 또는 Resource Manager 스토리지 계정에서 이러한 값을 가져오려면

  1. Azure 포털에 로그인합니다.
  2. 사용하려는 Storage 계정으로 이동합니다.
  3. 설정 페이지에서 액세스 키를 선택합니다.
  4. 액세스 키 페이지에서 액세스 키 1 및 액세스 키 2를 관찰합니다. 이러한 키 중 하나를 사용할 수 있습니다.
  5. 복사 아이콘을 선택하여 키를 클립보드에 복사합니다.

Azure Cosmos DB 연결 추가

Azure Cosmos DB에 연결하려면 Azure Portal에서 주 연결 문자열을 복사하고 복사한 연결 문자열을 사용하여 Client 개체를 만드세요. TableService 개체를 만들 때 Client 개체를 제공할 수 있습니다.

common_client = Azure::Storage::Common::Client.create(storage_account_name:'myaccount', storage_access_key:'mykey', storage_table_host:'mycosmosdb_endpoint')
table_client = Azure::Storage::Table::TableService.new(client: common_client)

테이블 만들기

Azure::Storage::Table::TableService 개체를 통해 테이블 및 엔터티에 대한 작업을 할 수 있습니다. 테이블을 만들려면 create_table() 메서드를 사용합니다. 다음 예제에서는 테이블을 만들거나 있는 경우 오류를 출력합니다.

azure_table_service = Azure::Storage::Table::TableService.new
begin
    azure_table_service.create_table("testtable")
rescue
    puts $!
end

테이블에 엔터티 추가

엔터티를 추가하려면 먼저 엔터티 속성을 정의하는 해시 개체를 만듭니다. 모든 엔터티에 대해 PartitionKeyRowKey를 지정해야 합니다. 이러한 엔터티는 엔터티의 고유 식별자이며 다른 속성보다 빠르게 쿼리할 수 있는 값입니다. Azure Storage는 PartitionKey 를 사용하여 여러 스토리지 노드를 통해 테이블의 엔터티를 자동으로 분산합니다. PartitionKey 가 동일한 엔터티는 동일한 노드에 저장됩니다. RowKey 는 엔터티가 속하는 파티션 내에서 엔터티의 고유한 ID입니다.

entity = { "content" => "test entity",
    :PartitionKey => "test-partition-key", :RowKey => "1" }
azure_table_service.insert_entity("testtable", entity)

엔터티 업데이트

다음과 같은 여러 메서드를 사용하여 기존 엔터티를 업데이트할 수 있습니다.

Description
update_entity() 기존 엔터티를 바꿔서 업데이트합니다.
merge_entity() 새 속성 값을 기존 엔터티에 병합하여 기존 엔터티를 업데이트합니다.
insert_or_merge_entity() 기존 엔터티를 바꾸어서 업데이트합니다. 엔터티가 없으면 새 엔터티가 삽입됩니다.
insert_or_replace_entity() 새 속성 값을 기존 엔터티에 병합하여 기존 엔터티를 업데이트합니다. 엔터티가 없으면 새 엔터티가 삽입됩니다.

다음 예제에서는 update_entity() 를 사용하여 엔터티를 업데이트하는 방법을 보여 줍니다.

entity = { "content" => "test entity with updated content",
    :PartitionKey => "test-partition-key", :RowKey => "1" }
azure_table_service.update_entity("testtable", entity)

update_entity()merge_entity()를 사용하면 업데이트하려는 엔터티가 없으면 업데이트 작업이 실패합니다. 따라서 엔터티의 존재 여부에 상관없이 엔터티를 저장하려면 insert_or_replace_entity() 또는 insert_or_merge_entity() 를 대신 사용해야 합니다.

엔터티 그룹 작업

서버에서 원자성 처리를 수행하도록 여러 작업을 일괄적으로 제출하는 것이 좋은 경우도 있습니다. 이렇게 하려면 먼저 Batch 개체를 만든 다음 TableService에서 execute_batch() 메서드를 사용합니다. 다음 예제에서는 RowKey 2와 3을 가진 두 엔터티를 일괄 제출하는 방법을 보여 줍니다. 동일한 PartitionKey를 가진 엔터티에 대해서만 작동합니다.

azure_table_service = Azure::TableService.new
batch = Azure::Storage::Table::Batch.new("testtable",
    "test-partition-key") do
    insert "2", { "content" => "new content 2" }
    insert "3", { "content" => "new content 3" }
end
results = azure_table_service.execute_batch(batch)

엔터티 쿼리

테이블에서 엔터티를 쿼리하려면 테이블 이름인 PartitionKeyRowKey를 전달하여 get_entity() 메서드를 사용합니다.

result = azure_table_service.get_entity("testtable", "test-partition-key",
    "1")

엔터티 집합 쿼리

테이블에서 엔터티 집합을 쿼리하려면 쿼리 해시 개체를 만들고 query_entities() 메서드를 사용합니다. 다음 예제에서는 동일한 PartitionKey를 가진 엔터티를 모두 가져오는 방법을 보여 줍니다.

query = { :filter => "PartitionKey eq 'test-partition-key'" }
result, token = azure_table_service.query_entities("testtable", query)

참고

단일 쿼리에서 반환할 결과 집합이 너무 크면 후속 페이지를 가져오는 데 사용할 수 있는 연속 토큰이 반환됩니다.

엔터티 속성 하위 집합 쿼리

테이블 쿼리에서는 엔터티에서 일부 속성만 검색할 수 있습니다. 이 "프로젝션" 기술은 대역폭을 줄이고 특히 큰 엔터티의 경우 쿼리 성능을 향상시킬 수 있습니다. select 절을 사용하고 가져올 속성의 이름을 클라이언트에 전달합니다.

query = { :filter => "PartitionKey eq 'test-partition-key'",
    :select => ["content"] }
result, token = azure_table_service.query_entities("testtable", query)

엔터티 삭제

엔터티를 삭제하려면 delete_entity() 메서드를 사용합니다. 엔터티, 엔터티의 PartitionKey 및 RowKey가 포함된 테이블의 이름을 전달합니다.

azure_table_service.delete_entity("testtable", "test-partition-key", "1")

테이블 삭제

테이블을 삭제하려면 delete_table() 메서드를 사용하고 삭제하려는 테이블의 이름을 전달합니다.

azure_table_service.delete_table("testtable")