주요 요점
DynamoDB는 최적의 성능, 내구성, 신뢰성을 유지하면서 상당한 양의 다양한 정보를 효율적으로 관리할 수 있는 강력하고 확장 가능한 NoSQL 데이터베이스 솔루션을 제공하는 Amazon Web Services(AWS) 제품입니다.
Node.js 애플리케이션 내에서 DynamoDB로 알려진 Amazon의 NoSQL 데이터베이스 서비스를 활용하기 위해서는 먼저 AWS SDK 라이브러리에서 클라이언트-dynamodb 모듈을 확보하고 통합해야 합니다. 또한 이 통합 프로세스에서는 서비스에 대한 안전한 액세스를 위해 적절한 자격 증명 인증 조치를 구현해야 합니다.
DynamoDB는 사용자 친화적인 클라이언트 메서드와 사용자 정의 가능한 옵션을 통해 테이블 생성, 데이터 쓰기 및 읽기 수행, 기존 레코드 업데이트, 특정 항목 삭제에 대한 간단한 접근 방식을 제공합니다. 이 다재다능하고 확장 가능한 솔루션을 통해 개발자는 최적의 성능을 유지하면서 애플리케이션을 효율적으로 구축할 수 있습니다.
강력한 프로그래밍 언어와 효율적인 데이터베이스 관리 시스템의 조합을 활용하는 것은 많은 최신 애플리케이션을 성공적으로 개발하는 데 매우 중요합니다.
Amazon Web Services는 조직이 데이터를 관리하는 방식을 변화시킬 수 있는 잠재력을 가진 혁신적인 솔루션인 DynamoDB를 제공합니다. 상당한 양의 다양한 정보를 처리할 수 있는 데이터베이스를 신속하게 프로비저닝할 수 있는 이 강력한 도구를 통해 사용자는 데이터 관리 프로세스를 간소화하고 최적화할 수 있습니다.
DynamoDB란?
Amazon Web Services는 전통적인 관계형 데이터베이스를 위해 설계된 Amazon 관계형 데이터베이스 서비스(RDS)와 MongoDB와 유사한 문서 데이터베이스를 지원하는 Amazon DocumentDB 등 다양한 요구 사항을 충족할 수 있는 다양한 데이터베이스 솔루션을 제공합니다. 또한, 비관계형 또는 NoSQL 데이터베이스의 예로 저장된 각 항목과 연관된 고유 키를 기반으로 데이터를 구성하고 검색하는 데 최적화된 DynamoDB가 있습니다.
DynamoDB는 최적의 성능, 내구성, 신뢰성을 유지하면서 분산된 네트워크에 분산된 상당한 양의 정보를 효율적으로 관리하도록 설계되었습니다. 적응형 아키텍처를 통해 정형 및 비정형 데이터를 손쉽게 저장하고 검색할 수 있습니다.
DynamoDB는 AWS 웹 콘솔을 통한 직접 액세스와 웹 개발 프레임워크 내의 AWS CLI 및 SDK를 통한 프로그래밍 기능을 통해 다양한 애플리케이션을 위한 다용도 옵션으로 사용할 수 있습니다.
Node.js에서 DynamoDB 시작하기
Node.js는 백엔드 API 개발을 용이하게 하는 다양한 프레임워크와 라이브러리를 제공하여 개발자가 API 내에서 사용할 데이터베이스를 선택할 수 있도록 합니다. 또한 Node.js는 AWS DynamoDB와 같은 외부 서비스와의 통합을 지원하여 해당 기능에 대한 원활한 액세스를 제공합니다.
Node 애플리케이션 내에서 Amazon Web Services(AWS) 서비스를 활용하기 위해서는 해당 특정 서비스에 대한 AWS SDK의 해당 클라이언트 패키지만 있으면 됩니다. 예를 들어, DynamoDB와 상호 작용하기 위해서는 AWS SDK의 일부를 구성하는 클라이언트-dynamodb 모듈을 설치해야 합니다.
프로젝트의 특정 작업 공간 내에서 특정 명령을 실행하려면 터미널 또는 명령 프롬프트를 사용하여 지정된 디렉토리로 이동할 수 있습니다. 해당 디렉토리에서 관련 명령어를 입력하면 원하는 패키지의 설치 프로세스를 쉽게 진행할 수 있습니다.
npm install @aws-sdk/client-dynamodb
`aws-sdk/client-dynamodb` 패키지를 설치한 Node.js 프로젝트 내에서 DynamoDB 테이블을 활용하려면, 상호 작용을 시도하기 전에 해당 지역을 구성 설정에 통합하여 테이블의 지리적 위치를 지정해야 합니다. 이 프로세스는 DynamoDB 클라이언트의 초기화 단계에서 수행할 수 있습니다.
AWS CLI를 사용하려면 컴퓨팅 시스템 내에서 AWS 자격 증명을 선제적으로 설정해야 합니다. 이 프로세스는 환경 매개변수에서 필요한 정보를 직접 검색하는 소프트웨어 개발 키트(SDK)에 내장된 자동 구성 메커니즘을 통해 용이하게 이루어집니다.
아직 설정하지 않은 경우, 콘솔 내에서 Amazon Web Services(AWS) IAM(Identity Access Management) 플랫폼을 방문하여 새 사용자 계정을 설정할 수 있습니다. 그러면 액세스 키 식별자와 해당 비밀 키가 제공되며, 이 두 가지 모두 고유 인증 자격 증명으로 사용됩니다.
이러한 인증을 워크스페이스에 통합하기 위해 운영 체제에서 앞서 언급한 명령줄 지침을 실행할 수 있습니다. 이러한 명령은 특정 플랫폼에 필요한 구성 요소를 쉽게 설치할 수 있도록 도와줍니다.
명령줄 인터페이스(CLI)는 시스템 관리, 자동화 및 스크립팅을 비롯한 다양한 작업을 수행하기 위해 Unix, Linux 및 macOS와 같은 다양한 운영 체제에서 사용할 수 있습니다.
export AWS_ACCESS_KEY_ID='your access key ID'
export AWS_SECRET_ACCESS_KEY='you secret access key'
Windows 운영 체제에서 명령 프롬프트에 액세스하려면 시작 메뉴의 액세서리 폴더에 있는 명령 프롬프트 애플리케이션을 사용할 수 있습니다.또는 Ctrl + Alt + Del 키 조합을 누른 다음 표시되는 옵션 목록에서 ‘명령 프롬프트’를 선택하면 명령줄 인터페이스를 열 수도 있습니다. 명령 프롬프트를 실행하는 또 다른 방법은 관리자 권한을 사용하여 실행 대화 상자에 “cmd”를 입력하거나 시작 메뉴 검색 창에서 cmd를 검색하는 것입니다.
set AWS_ACCESS_KEY_ID='your access key ID'
set AWS_SECRET_ACCESS_KEY='you secret access key'
Windows(PowerShell)에서 다음 명령어를 사용하여 다음 파일을 확인할 수 있습니다. “`mathematica Get-WinEvent -FilterHashtable @{LogName=’Application’; StartTime=(Get-Date).AddHours(-7)} | Select-Object -First 10 EventId, TimeCreated, Source, Details “` 이 명령은 최근 1주일 동안의 이전 10개의 애플리케이션 이벤트를 반환합니다. 더 많은 이벤트를 확인하려면 `Select-Object` 구문 중 `-Last` 매개 변수를 필요한 위치에 설정하세요.
$env:AWS_ACCESS_KEY_ID='your access key ID'
$env:AWS_SECRET_ACCESS_KEY='you secret access key'
Node.js 애플리케이션에서 새로 생성된 ‘dynamodb.js’라는 파일 내에 JavaScript용 AWS SDK의 `DynamoDB` 클래스 인스턴스를 인스턴스화하여 Amazon Web Services의 DynamoDB에 연결을 설정합니다. 이 작업을 수행하기 위한 관련 코드는 다음과 같습니다:
const { DynamoDB } = require('@aws-sdk/client-dynamodb')
const region = "us-east-1" // your preferred region
const client = new DynamoDB({ region })
물론입니다! Amazon Web Services(AWS)는 애플리케이션의 소스 코드 내에 이러한 데이터를 인코딩하여 민감한 보안 정보를 적절히 보호할 수 있도록 세심한 주의를 기울이고 있습니다. 제공된 예제는 지정된 클라이언트와 연결을 설정하려고 시도하면서 이 개념을 보여줍니다. 그러나 그 전에 필요한 액세스 키와 비밀 키는 주변 환경으로부터 안전하게 획득합니다.
최근에 설정된 클라이언트를 활용하여 테이블 구조 생성, 정보 검색 및 업데이트와 같은 작업을 수행하기 위해 다양한 기능에 액세스할 수 있습니다.
다른 NoSQL 데이터베이스와 마찬가지로 스키마가 없는 특성으로 인해 DynamoDB는 언제든지 테이블에 새로운 속성이나 필드를 추가할 수 있습니다. 따라서 DynamoDB 테이블을 생성하는 과정에서 가능한 모든 기본 키 속성을 지정할 필요는 없으며, 초기 정의를 기본 키로 작동하도록 의도된 속성으로 제한해야 합니다.
다음은 Node.js 및 DynamoDB에서 JavaScript용 AWS SDK를 사용하여 “Customer”라는 새 테이블을 생성하는 방법의 예입니다: ”’자바스크립트 const AWS = require(‘aws-sdk’); AWS.config.update({ region: ‘us-east-1’, credentials: { accessKeyId: ‘
const createCustomerTable = async () => {
const params = {
TableName: "Customer",
AttributeDefinitions: [
{
AttributeName: "Email",
AttributeType: "S"
},
],
KeySchema: [
{
AttributeName: "Email",
KeyType: "HASH"
}
],
ProvisionedThroughput: {
ReadCapacityUnits: 5,
WriteCapacityUnits: 5
}
};
client.createTable(params, (err, data) => {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
}
createCustomerTable();
테이블 스키마의 AttributeDefinitions 섹션에서는 테이블의 주요 속성을 각각의 데이터 유형과 함께 지정합니다.이 경우 이메일 속성은 해당 필드에 문자열 값을 입력해야 함을 나타내는 ‘S’ 유형으로 지정되어 있습니다. 이러한 필드를 정의하는 데 사용할 수 있는 속성 유형에는 문자열의 경우 ‘S’, 숫자의 경우 ‘N’, 이진 데이터 저장의 경우 ‘B’가 있습니다.
DynamoDB 테이블 내에서 데이터를 효율적으로 찾고 정렬하기 위해서는 KeySchemas를 사용하여 기본 키를 설정하는 것이 필수적입니다. DynamoDB에서 새 테이블을 구성할 때 시스템은 추가된 속성이 이 특정 인스턴스의 기본 키로 지정된 이메일과 같은 핵심 속성으로 사용될 것으로 예상합니다. 이 역할을 수행하려면 이메일 속성을 KeySchema에 포함하면서 해당 KeyType을 지정해야 하며, 이 키 유형은 HASH로 설정해야 합니다.
Amazon의 DynamoDB에서 제공하는 또 다른 대체 옵션은 “정렬 키”를 활용하여 정렬 메커니즘으로 사용하도록 특별히 지정된 “KeyType” 변수를 사용하는 것입니다. 이 기능은 단일 테이블 내에 동일한 “해시” 키를 가진 여러 데이터 조각이 있는 상황을 처리할 때 특히 유용합니다. 이러한 경우 날짜 또는 색조와 같은 추가 정보를 “범위” 키로 포함하면 이러한 추가 정보를 기반으로 해당 데이터를 쉽게 그룹화하고 구성할 수 있습니다.
앞서 언급한 코드에서 또 다른 중요한 측면은 처리량 프로비저닝으로, 주어진 시간 프레임 내에 테이블에서 수행될 수 있는 읽기 및 쓰기 작업의 최대 수를 결정합니다.
앞서 언급한 코드를 실행하면 예상되는 결과 출력은 다음과 유사한 형식으로 표시됩니다:
웹 콘솔의 DynamoDB 테이블 대시보드로 이동하면 테이블이 프로비저닝 프로세스가 진행 중이거나 활성 상태가 부여된 것을 확인할 수 있습니다.
ReadCapacityUnits 및 WriteCapacityUnits의 적절한 값을 결정할 때는 애플리케이션의 요구 사항을 신중하게 고려해야 합니다. 그렇지 않으면 성능이 최적화되지 않거나 AWS 계정에 예기치 않게 높은 요금이 부과될 수 있습니다.
테이블이 활성화되었음을 확인하면 해당 테이블에 대해 생성, 읽기, 업데이트 및 삭제(CRUD)를 포함한 다양한 작업을 수행할 수 있습니다.
다음은 ADO.NET을 사용하여 Customer 테이블에 데이터를 쓰는 예제입니다: “`csharp 사용 (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); using (SqlCommand command = new SqlCommand(“INSERT INTO Customers (Name, Address) VALUES (@name, @address)”, connection)) { command.Parameters.AddWithValue(“@name”, “John Smith”); command.Parameters.AddWithValue(“@주소”, “123 Main St.”); command.ExecuteNonQuery(); } } “` 다음은 ADO.NET을 사용하여 Customer 테이블에서 데이터를 읽는 예제입니다: “`csharp 사용 (SqlConnection connection = new SqlConnection(connectionString)) { connection.
⭐ 테이블에 데이터를 추가합니다. 테이블에 데이터를 쓰려면 클라이언트’의 putItem 메서드가 필요합니다. 아래 코드는 DynamoDB의 Customer 테이블에 새 고객을 추가합니다.
const createCustomer = async (customer) => {
const params = {
TableName: "Customer",
Item: customer
}
client.putItem(params, (err, data) => {
if (err) {
console.error(err)
} else {
console.log(data)
}
})
}
const customerData = {
Name: { "S": "Timilehin O." },
Email: { "S": "[email protected]" },
Age: { "N": "18"},
Country: { "S": "Nigeria" }
}
createCustomer(customerData)
매개변수 객체에는 쓰고자 하는 테이블인 TableName과 특정 유형으로 추가할 데이터를 포함하는 Item 필드가 포함되어 있습니다. 처음에 테이블에 없던 새로운 필드가 추가된 것을 볼 수 있는데, 이것이 바로 DynamoDB가 유연하게 작동하는 방식입니다. 콘솔에서 데이터베이스의 데이터를 다음과 같이 볼 수 있습니다:
DynamoDB는 전체 테이블을 스캔하고 지정된 속성을 기반으로 개별 항목을 가져오는 등 데이터를 검색하는 여러 가지 방법을 제공합니다. SDK의 `scan` 함수는 테이블의 모든 레코드를 읽는 반면, `getItem`은 특정 레코드를 검색하는 데 사용됩니다. 제공된 예제에서 볼 수 있듯이 첫 번째 코드는 모든 고객 정보를 추출하고, 두 번째 예제는 이메일 주소로 식별되는 특정 사용자에 대한 세부 정보를 가져옵니다.
테이블 내의 데이터를 업데이트하는 프로세스는 제공된 SDK에 있는 updateItem 함수를 활용하여 용이하게 수행할 수 있습니다. 이 프로세스의 예는 고유 식별자
const updateCustomerLocation = async (email, age) => {
const params = {
TableName: "Customer",
Key: {
Email: { "S": email }
},
UpdateExpression: "SET Age = :newAge",
ExpressionAttributeValues: {
':newAge': { "N": age }
},
ReturnValues: "ALL_NEW"
}
const updatedCustomer = await client.updateItem(params)
console.log(updatedCustomer.Attributes)
}
로 표시된 특정 레코드를 참조하여 아래에 설명되어 있습니다. 또한, 데이터 조작과 관련된 모든 개별 요구 사항을 수용하기 위해 DynamoDB가 제공하는 다양성을 활용하여 원하는 수정 기준에 따라 동적 업데이트 표현식을 구성할 수도 있습니다.
‘삭제 항목’ 메서드를 사용하여 DynamoDB 데이터베이스에서 항목을 제거하려면 먼저 삭제하려는 특정 레코드와 관련된 고유 식별자(또는 “키”)를 얻어야 합니다. 이 프로세스는 다음과 같이 실행할 수 있습니다:
DynamoDB로 효율적인 애플리케이션 구축
Amazon Web Services는 효율성과 보안을 모두 보장하면서 간소화되고 강력한 디지털 서비스를 제공할 수 있는 사용자 친화적인 플랫폼을 제공하며 번영을 거듭하고 있습니다.인프라 및 보안에 대한 걱정이 없는 번거로움이 없는 데이터베이스 솔루션이 필요하다면 DynamoDB가 이상적인 옵션이 될 수 있습니다.
지금까지 배운 지식을 바탕으로 Node.js 프로젝트 내에서 DynamoDB를 활용할 준비가 완료되었으며, 향후 작업을 위한 옵션으로 확신을 가지고 접근할 수 있습니다.