핵심 요약
- DynamoDB는 AWS에서 제공하는 강력한 NoSQL 데이터베이스로, 뛰어난 성능과 내구성, 안정성을 유지하면서 방대한 양의 다양한 데이터를 처리할 수 있습니다.
- Node.js 환경에서 DynamoDB를 사용하려면 aws-sdk 라이브러리의 client-dynamodb 패키지를 설치하고, 적절한 자격 증명을 구성해야 합니다.
- DynamoDB는 클라이언트의 메서드와 매개변수를 활용하여 테이블 생성, 데이터 읽기/쓰기, 레코드 업데이트 및 삭제를 손쉽게 수행할 수 있도록 지원하여 효율적인 애플리케이션 개발을 위한 유연성과 확장성을 제공합니다.
최신 애플리케이션 개발에서는 강력한 프로그래밍 언어와 견고한 데이터베이스 시스템의 결합이 매우 중요합니다.
Amazon Web Services(AWS)에서 제공하는 DynamoDB는 데이터 관리를 혁신할 수 있는 잠재력을 지닌 도구입니다. 이를 통해 다양한 종류의 대량 데이터를 처리할 수 있는 데이터베이스를 빠르게 구축할 수 있습니다.
DynamoDB란 무엇인가?
AWS는 관계형 데이터베이스를 위한 Amazon RDS, MongoDB와 같은 문서 데이터베이스를 위한 DocumentDB 등 다양한 데이터베이스 요구에 맞는 서비스를 제공합니다. DynamoDB는 키-값 형식으로 데이터를 저장하는 NoSQL 데이터베이스입니다.
DynamoDB는 분산된 인프라 환경에서 성능 저하나 내구성 및 안정성 문제 없이 대량의 데이터를 처리할 수 있습니다. 유연한 데이터 모델을 제공하여 구조화된 데이터와 구조화되지 않은 데이터를 모두 쉽게 저장하고 쿼리할 수 있습니다.
DynamoDB는 여러 유형의 애플리케이션에서 데이터베이스로 활용될 수 있으며, AWS 웹 콘솔을 통해 직접 접근하거나 AWS-CLI를 통해 프로그래밍 방식으로 접근할 수도 있고, AWS-SDK를 이용해 웹 애플리케이션 내에서 접근할 수도 있습니다.
Node.js에서 DynamoDB 시작하기
Node.js는 백엔드 API 구축을 위한 다양한 도구를 제공하며, 이러한 도구를 사용할 때 API의 데이터베이스를 자유롭게 선택할 수 있습니다. Node.js는 AWS DynamoDB를 비롯한 여러 외부 서비스에 대한 광범위한 지원을 제공합니다.
Node 애플리케이션에서 AWS 서비스를 사용하려면 해당 서비스에 대한 클라이언트 역할을 하는 aws-sdk 패키지만 있으면 됩니다. 예를 들어, DynamoDB에 접근하려면 aws-sdk의 client-dynamodb 패키지를 설치해야 합니다.
패키지를 설치하려면 프로젝트 디렉터리에서 아래 명령을 실행하십시오.
npm install @aws-sdk/client-dynamodb
Node.js 프로젝트에 aws-sdk/client-dynamodb를 설치한 후, DynamoDB 테이블과 상호 작용하기 전에 해당 영역을 설정해야 합니다. 이는 DynamoDB 클라이언트를 초기화할 때 수행됩니다.
컴퓨터에 AWS-CLI를 이미 설치하고 사용해 본 경험이 있다면, AWS 자격 증명이 환경에 이미 설정되어 있을 가능성이 높으며, SDK는 해당 환경에서 자동으로 값을 가져옵니다.
하지만 그렇지 않은 경우, AWS IAM(ID 액세스 관리) 콘솔에서 서비스를 제공하고 새 사용자를 생성해야 합니다. 사용자를 생성한 후 액세스 키 ID와 비밀 키라는 개인 자격 증명을 얻을 수 있습니다.
다음 터미널 명령을 실행하여 환경에 해당 자격 증명을 추가합니다.
Unix, Linux 또는 macOS의 경우:
export AWS_ACCESS_KEY_ID='your access key ID'
export AWS_SECRET_ACCESS_KEY='you secret access key'
Windows(CMD)의 경우:
set AWS_ACCESS_KEY_ID='your access key ID'
set AWS_SECRET_ACCESS_KEY='you secret access key'
Windows(PowerShell)의 경우:
$env:AWS_ACCESS_KEY_ID='your access key ID'
$env:AWS_SECRET_ACCESS_KEY='you secret access key'
이제 Node.js 프로젝트로 돌아와 새로운 파일을 만들고 이름을 dynamodb.js로 지정합니다. 이 파일에서 아래 코드를 사용하여 새로운 AWS DynamoDB 클라이언트를 인스턴스화합니다.
const { DynamoDB } = require('@aws-sdk/client-dynamodb')const region = "us-east-1"
const client = new DynamoDB({ region })
매우 간단합니다! AWS는 코드에 보안 자격 증명이 노출되지 않도록 하기 때문에, 위 코드가 클라이언트 생성을 시도하는 동안 환경에서 액세스 키와 비밀 키를 먼저 읽어옵니다.
새로 생성된 클라이언트를 사용하면 테이블 생성, 데이터 읽기/쓰기 등 다양한 작업을 수행할 수 있습니다.
DynamoDB는 다른 NoSQL 데이터베이스처럼 스키마가 없으므로 언제든지 테이블에 새로운 속성(필드)을 추가할 수 있습니다. 이러한 이유로 DynamoDB 테이블을 생성할 때 기본 키 역할을 할 속성만 추가하면 됩니다.
DynamoDB에서 새로운 테이블(고객)을 생성하는 다음 코드를 확인해 보십시오.
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 필드는 테이블의 주요 속성과 해당 속성의 유형을 정의하는 부분입니다. 여기에서는 Email 속성의 유형을 ‘S’로 지정했습니다. 이는 해당 필드가 문자열 값을 받을 것으로 예상함을 의미합니다. 사용 가능한 속성 유형으로는 S, N, B (문자열, 숫자, 이진수) 세 가지가 있습니다.
항목을 빠르게 찾아 구성하는 데 도움이 되는 기본 키를 정의하려면 KeySchema가 필요합니다. DynamoDB는 테이블 생성 시 추가하는 속성을 주요 속성으로 간주하므로, 여기에서는 이메일이 기본 키가 됩니다. 따라서 KeySchema에 추가하고 KeyType을 HASH로 지정해야 합니다.
사용 가능한 다른 KeyType 값으로는 정렬 키에 사용되는 RANGE가 있습니다. 정렬 키는 테이블에 동일한 HASH 키를 가진 데이터가 있고, 날짜나 색상과 같은 추가 데이터에 따라 그룹화하려는 경우에 유용합니다. 이러한 추가 데이터를 RANGE 키로 만들 수 있습니다.
위 코드에서 세 번째로 중요한 매개변수는 ProvisionedThroughput입니다. 여기서 DynamoDB가 초당 테이블에서 허용할 읽기 및 쓰기 수를 정의합니다.
위 코드를 실행하면 다음과 유사한 출력이 표시됩니다.
웹 콘솔에서 DynamoDB 테이블 대시보드를 확인하면 테이블이 아직 프로비저닝 중이거나 이미 활성 상태인 것을 확인할 수 있습니다.
ReadCapacityUnits 및 WriteCapacityUnits를 설정할 때는 항상 애플리케이션의 요구 사항을 고려해야 합니다. 부적절한 값은 성능 문제나 계정 청구 비용 증가로 이어질 수 있습니다.
테이블이 활성화되었다고 확신하면 해당 테이블에서 CRUD 작업을 수행할 수 있습니다.
다음은 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)
params 객체에는 데이터를 작성할 테이블인 TableName과, 특정 유형으로 추가할 데이터가 포함된 Item 필드가 포함되어 있습니다. 테이블에 없었던 새로운 필드가 추가된 것을 볼 수 있습니다. 이것이 바로 DynamoDB가 유연하게 작동하는 방식입니다. 데이터베이스의 데이터를 콘솔에서 다음과 같이 확인할 수 있습니다:
const getAllCustomers = async () => {
const params = {
TableName: "Customer"
}const customers = await client.scan(params)
console.log(customers)
}
다음 코드는 이메일 값을 사용하여 특정 사용자를 가져옵니다.
const getCustomerByEmail = async (email) => {
const params = {
TableName: "Customer",
Key: {
Email: { "S": email }
}
}const customer = await client.getItem(params)
console.log(customer)
}getCustomerByEmail("[email protected]")
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의 유연성 덕분에 필요에 따라 다양한 작업을 처리할 수 있습니다.
const deleteCustomer = async (email) => {
const params = {
TableName: "Customer",
Key: {
Email: { "S": email }
}
}client.deleteItem(params, (err, data) => {
if (err) {
console.error(err)
} else {
console.log("Customer deleted successfully")
}
})
}deleteCustomer("[email protected]")
DynamoDB를 사용하여 효율적인 애플리케이션 구축
Amazon Web Services는 지속적으로 성장하고 있으며, 효율적이고 안전한 디지털 솔루션을 제공하는 데 활용할 수 있는 플랫폼을 제공합니다. 인프라나 보안 문제에 대한 걱정 없이 실행할 데이터베이스를 찾고 있다면, DynamoDB는 훌륭한 선택입니다.
이제 Node.js에서 DynamoDB를 시작하는 데 필요한 모든 기능을 갖추었으므로, 다음 Node.js 애플리케이션을 위해 자신 있게 DynamoDB를 선택할 수 있습니다.