Node.js 사용하여 Microsoft Azure 테이블 저장소를 관리하는 방법
이 블로그에서는 Node.js 및 Microsoft Azure Table Storage를 사용하는 방법에 대해 설명합니다. 오픈 소스 솔루션(OSS)은 플랫폼 독립적 및/또는 클라우드 애플리케이션의 구현에 매우 적합합니다. Node.js는 이러한 클라우드 애플리케이션의 실제 구현에 널리 사용됩니다.
이 블로그에서는 Node.js 및 Microsoft Azure Table Storage를 사용하는 방법에 대해 설명합니다. 오픈 소스 솔루션(OSS)은 플랫폼 독립적 및/또는 클라우드 애플리케이션의 구현에 매우 적합합니다. Node.js는 이러한 클라우드 애플리케이션의 실제 구현에 널리 사용됩니다.
Node.js는 개발을 위한 가장 인기 있는 성장 플랫폼 중 하나입니다. 나는 Node.js와 Microsoft SQL Server에 대한 두 개의 기사로 시작하여 Node.js 전용 일련의 게시물을 시작했습니다. 여러 블로그에서 Microsoft Azure Storage에서 Node.js를 사용하는 방법에 대해 자세히 설명하겠습니다.
What Is Azure Storage?
Microsoft Azure 스토리지 서비스를 사용하면 Microsoft Cloud 환경에서 NON RELATIONAL 데이터를 저장/검색할 수 있습니다. (관계형 데이터의 경우 SQL Azure 서비스가 사용됩니다.)
Microsoft Azure Storage에서 데이터는 4가지 형식(v.i.z. Blob, 테이블 및 큐, 파일 스토리지(미리 보기))으로 저장할 수 있습니다. 위 데이터의 검색/저장은 RESTful 방식으로 수행됩니다.
- Blob Storage는 파일 데이터를 저장합니다. Blob은 문서, 미디어 파일 또는 애플리케이션 설치 관리자와 같은 모든 유형의 텍스트 또는 이진 데이터일 수 있습니다.
- 테이블 저장소는 구조화된 데이터 집합을 저장합니다. 테이블 스토리지는 NoSQL 키-속성 데이터 저장소로, 이를 통해 신속하게 개발하고 많은 양의 데이터에 빠르게 액세스할 수 있습니다.
- Queue Storage는 워크플로 처리 및 클라우드 서비스 구성 요소 간의 통신을 위한 신뢰할 수 있는 메시징을 제공합니다.
- 파일 스토리지는 표준 SMB 2.1 프로토콜을 사용하여 레거시 애플리케이션을 위한 공유 스토리지를 제공합니다. Azure 가상 머신 및 클라우드 서비스는 탑재된 공유를 통해 애플리케이션 구성 요소 간에 파일 데이터를 공유할 수 있으며, 온-프레미스 애플리케이션은 파일 서비스 REST API를 통해 공유의 파일 데이터에 액세스할 수 있습니다.
이 문서에서는 Azure Table 서비스를 사용하여 처리하는 방법에 중점을 Node.js
테이블 스토리지
Azure Table Storage 서비스는 많은 양의 구조화된 데이터를 저장합니다. 이 서비스는 Azure 클라우드 내부 및 외부에서 인증된 호출을 수락하는 NoSQL 데이터 저장소입니다.
테이블 서비스에는 다음과 같은 구성 요소가 포함되어 있습니다.
테이블 엔터티:
테이블 엔터티는 테이블에 저장된 데이터의 단위를 나타내며 일반적인 관계형 데이터베이스 테이블의 행과 유사합니다. 각 엔터티는 속성 컬렉션을 정의합니다. 각 속성은 이름, 값 및 값의 데이터 형식으로 정의되는 키/값 쌍입니다. 엔터티는 다음 세 가지 시스템 속성을 속성 컬렉션의 일부로 정의해야 합니다.
- PartitionKey– PartitionKey 속성은 엔터티가 속한 파티션을 식별하는 문자열 값을 저장합니다. 즉, 동일한 PartitionKey 값을 가진 엔터티가 동일한 파티션에 속합니다. 나중에 설명하는 것처럼 파티션은 테이블의 확장성에 필수적입니다.
- RowKey– RowKey 속성은 각 파티션 내에서 엔터티를 고유하게 식별하는 문자열 값을 저장합니다.
- 타임스탬프– 타임스탬프 속성은 엔터티에 대한 추적 기능을 제공합니다. 타임스탬프는 엔터티가 마지막으로 수정된 시간을 알려주는 DateTime 값입니다. 타임스탬프는 엔터티의 버전이라고도 합니다. 타임스탬프에 대한 수정은 테이블 서비스가 모든 삽입 및 업데이트 작업 중에 이 속성의 값을 유지 관리하므로 무시됩니다.
디자인에서 PartitionKey, RowKey를 고려합니다. PartitionKey 및 RowKey를 기본 인덱스로 간주합니다.

테이블 파티션:
Azure 테이블은 효율적인 쿼리를 가능하게 하는 키를 사용하며, 테이블 서비스가 테이블을 여러 서버에 분산할 때라고 결정할 때 부하 분산을 위해 PartitionKey라는 키를 사용할 수 있습니다. 테이블에 지정된 스키마가 없습니다.
파티션은 동일한 PartitionKey 값을 가진 엔터티의 컬렉션을 나타냅니다. 파티션은 항상 하나의 파티션 서버에서 제공되며 각 파티션 서버는 하나 이상의 파티션을 제공할 수 있습니다.
Azure 테이블 저장소 처리
다른 NodeJS 패키지를 사용하여 Azure Table Storage를 처리할 수 있습니다. 이 게시물에서는 azure 및 azure-table-node 노드 패키지를 다룹니다.
- Microsoft Azure SDK for Node.js
Node.js용 공식 Microsoft Azure SDK입니다. 이 프로젝트는 Microsoft Azure 서비스를 쉽게 사용하고 관리할 수 있는 Node.js 패키지를 제공합니다.
아래 나열된 코드 조각은 Microsoft Azure SDK for Node.js를 사용하여 Azure 테이블 서비스를 관리하는 방법을 보여 줍니다.
Azure SDK는 먼저 환경 변수를 사용하여 자격 증명을 찾기 때문에 이 작업을 쉽게 수행할 수 있습니다. 마법의 환경 변수 이름은 and AZURE_STORAGE_ACCESS_KEY 입니다 AZURE_STORAGE_ACCOUNT.
- 테이블 서비스 만들기
환경 변수를 사용하여 자격 증명 설정
var azure = require('azure');
//using enviroment variables for credentials
var tableService = azure.createTableService(); // implicitly use env variables
tableService = azure.createTableService(
process.env.AZURE_STORAGE_ACCOUNT,
process.env.AZURE_STORAGE_ACCESS_KEY); // explicit
지역 변수를 사용하여 명시적으로 자격 증명 설정
var accessKey = '[accountKey]'; var storageAccount = '[accountName]'; var tableService = azure.createTableService(accessKey, storageAccount); // explicit
- Insert an entity
var tableService = azure.createTableService();
//insert an entity
var task1 = {
PartitionKey : 'myPartitionKey',
RowKey: '1',
Description: 'Row description',
DueDate: new Date(2011, 12, 14, 12)
};
tableService.insertEntity('tasktable', task1, function(error){
if(!error){
// Entity inserted
});
- 쿼리 엔터티
//query an entity
var tableService = azure.createTableService();
tableService.queryEntity('demotable', 'myPartitionKey', '1', function(error, serverEntity){
if(!error){
// Entity available in serverEntity variable
}
});
- azure-table-node:
다음을 지원하는 Node.js 위한 간소화된 Azure Table Storage 클라이언트 라이브러리입니다.
- 테이블 만들기, 삭제 및 나열
- 엔터티 만들기, 업데이트, 쿼리 및 삭제Createing, Updating, Query and Deleting entities
- 배치 작업 지원
- SAS(Shared Access Signature) 생성 및 인증에 사용
아래 코드 샘플은 azure-table-node 모듈을 사용하여 Azure Table Storage로 작업하는 방법을 보여 줍니다
- Set Azure Storage credentials
var azureTable = require('azure-table-node')
//set azure storage credentials
azureTable.setDefaultClient({
accountUrl: 'http://[accountName].table.core.windows.net/',
accountName: '[accountName]',
accountKey: '[accountKey]'
});
- Create an Azure Table
//create azure table
app.get("/createTable", function (req, res) {
var client = azureTable.getDefaultClient();
client.createTable('testtable', function (err, data) {
});
client.insertEntity('testtable', {
PartitionKey: 'tests',
RowKey: '1',
value1: 'ABCDEFG'
},
function (err, data) {
res.write("Got error :-( " + err);
});
res.end("Table created.");
});
- Azure 테이블 표시
//display an azure table
app.get("/displayTable", function (req, res) {
var client = azureTable.getDefaultClient();
client.queryEntities('testtable', {
query: azureTable.Query.create('PartitionKey', '==', 'tests')
},
function (err, data, continuation) {
if (err) {
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.write("Got error :-( " + err);
res.end("");
return;
}
var json = JSON.stringify(data);
res.writeHead(200, { 'Content-Type': 'text/plain' })
res.end("Table displayed: " + json);
});
});

- 모든 Azure 테이블 나열
//list all azure tables
app.get("/listTables", function (req, res) {
var client = azureTable.getDefaultClient();
client.listTables(function (err, data, continuation) {
if (err) {
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.write("Got error :-( " + err);
res.end("");
return;
}
res.writeHead(200, { 'Content-Type': 'text/plain' })
for (var i = 0; i < data.length; i++) {
res.write("Table[" + i + "]: " + data[i] + " " );
}
res.end("Tables listed." + data);
});
});

- Azure 테이블 삭제
//delete azure table
app.get("/deleteTable", function (req, res) {
var client = azureTable.getDefaultClient();
client.deleteTable('testtable', function (err, data) { });
res.end("Table testtable has been deleted.");
});

Azure Table 서비스 및 Node에 대해 자세히 알아볼 내용이 훨씬 더 많습니다. 테이블 스토리지의 특징과 기능은 계속 성장하고 있습니다. 이 게시물은 시작하는 방법을 소개하는 것으로, Azure Tables의 기본 사례 및 가장 인기 있는 Node.js 모듈을 다룹니다. Microsoft Azure에 대한 경험이 없는 JavaScript 개발자와 JavaScript 및/또는 Node.js에 대한 경험이 적은 Azure 개발자 모두에게 유용합니다.
Microsoft Azure 플랫폼의 개발자는 테이블 저장소의 작동 방식과 테이블 저장소가 익숙한 관계형 데이터베이스와 어떻게 다른지 잘 알고 있어야 합니다. 테이블 스토리지의 작동 방식을 알면 특정 요구 사항에 적합한지 확인하는 데 도움이 됩니다.
Git 저장소에서 소스 코드를 다운로드할 수 있습니다.

If you want more information about how to use Microsoft Azure Storage & Node.js feel free to contact me at mmateev@infragistics.com
Twitter에서 팔로우하고 Facebook@mihailmateev Google + LinkedIn 및 Infragistics Friends 사용자 그룹에서 연락을 유지하면 Node.js, Microsoft Azure 및 Azure Bootcamp Bulgaria와 같은 관련 이벤트에 대해 자세히 알아볼 수 Infragistics.