Lambda 기반 애플리케이션용 데이터베이스 서비스 선택하기
Lambda 기반 애플리케이션용 데이터베이스 서비스 선택하기 (Select a database service for your Lambda-based applications)
많은 서버리스 애플리케이션은 데이터를 저장하고 검색해야 해요. AWS는 Lambda 함수와 함께 동작하는 여러 데이터베이스 옵션을 제공해요. 가장 널리 쓰이는 두 가지 선택지는 NoSQL 데이터베이스 서비스인 Amazon DynamoDB와 전통적인 관계형 데이터베이스 솔루션인 Amazon RDS예요. 다음 섹션은 Lambda와 함께 쓸 때 이 서비스들의 핵심 차이를 설명하고, 서버리스 애플리케이션에 맞는 데이터베이스 서비스를 선택하도록 도와줘요.
AWS가 제공하는 다른 데이터베이스 서비스와 그 사용 사례·절충점을 전반적으로 이해하려면 AWS 데이터베이스 서비스 선택하기를 참고하세요. 모든 AWS 데이터베이스 서비스가 Lambda와 호환되지만, 여러분의 특정 사용 사례에 적합하지 않을 수도 있어요.
Lambda와 함께 데이터베이스 서비스를 선택할 때 어떤 선택지가 있나요?
AWS는 여러 데이터베이스 서비스를 제공해요. 서버리스 애플리케이션에서 가장 널리 쓰이는 두 가지 선택지는 DynamoDB와 Amazon RDS예요.
- DynamoDB는 서버리스 애플리케이션에 최적화된 완전 관리형 NoSQL 데이터베이스 서비스예요. 어떤 규모에서든 원활한 확장과 일관된 한 자릿수 밀리초 성능을 제공해요.
- Amazon RDS는 MySQL과 PostgreSQL을 포함한 여러 데이터베이스 엔진을 지원하는 관리형 관계형 데이터베이스 서비스예요. 관리형 인프라와 함께 익숙한 SQL 기능을 제공해요.
요구 사항을 이미 알고 있다면
요구 사항이 이미 분명하다면 기본 권장 사항은 다음과 같아요.
일관된 낮은 지연 시간 성능, 자동 확장이 필요하고 복잡한 조인(join)이나 트랜잭션이 필요 없는 서버리스 애플리케이션에는 DynamoDB를 권장해요. 서버리스 특성 때문에 Lambda 기반 애플리케이션에 특히 잘 맞아요.
Amazon RDS는 복잡한 SQL 쿼리, 조인이 필요하거나 기존에 관계형 데이터베이스를 쓰는 애플리케이션이 있을 때 더 나은 선택이에요. 다만 Lambda 함수를 Amazon RDS에 연결하려면 추가 구성이 필요하고 콜드 스타트 시간에 영향을 줄 수 있다는 점을 알아두세요.
데이터베이스 서비스를 선택할 때 고려할 사항
Lambda 애플리케이션용으로 DynamoDB와 Amazon RDS 사이에서 선택할 때 다음 요소를 고려하세요.
- 연결 관리와 콜드 스타트
- 데이터 접근 패턴
- 쿼리 복잡성
- 데이터 일관성 요구 사항
- 확장 특성
- 비용 모델
이 요소들을 이해하면 여러분의 특정 사용 사례 요구를 가장 잘 충족하는 옵션을 선택할 수 있어요.
- DynamoDB는 모든 작업에 HTTP API를 사용해요. Lambda 함수는 연결을 유지하지 않고도 즉시 요청할 수 있어서 콜드 스타트 성능이 더 좋아요. 각 요청은 연결 오버헤드 없이 AWS 자격 증명으로 인증돼요.
- Amazon RDS는 전통적인 데이터베이스 연결을 사용하므로 연결 풀(pool) 관리를 요구해요. 새 Lambda 인스턴스가 연결을 설정해야 하므로 콜드 스타트에 영향을 줄 수 있죠. 연결 풀링 전략을 구현하고, 연결을 효과적으로 관리하려면 Amazon RDS Proxy를 사용해야 할 수도 있어요. Amazon RDS Proxy 사용에는 추가 비용이 들어요.
- DynamoDB는 알려진 접근 패턴과 단일 테이블 설계에 가장 잘 맞아요. 기본 키나 보조 인덱스를 기반으로 데이터에 일관된 낮은 지연 시간 접근이 필요한 Lambda 애플리케이션에 이상적이에요.
- Amazon RDS는 복잡한 쿼리와 변화하는 접근 패턴에 유연성을 제공해요. Lambda 함수가 고유하고 맞춤화된 쿼리나 여러 테이블에 걸친 복잡한 조인을 수행해야 할 때 더 적합해요.
- DynamoDB는 단순한 키 기반 작업과 미리 정의된 접근 패턴에서 뛰어나요. 복잡한 쿼리는 인덱스 구조를 중심으로 설계해야 하고, 조인은 애플리케이션 코드에서 처리해야 해요.
- Amazon RDS는 조인, 하위 쿼리, 집계가 있는 복잡한 SQL 쿼리를 지원해요. 복잡한 데이터 작업이 필요할 때 Lambda 함수 코드를 단순화할 수 있어요.
- DynamoDB는 eventual consistency와 strong consistency 옵션을 모두 제공하며, 단일 항목 읽기에서 strong consistency를 사용할 수 있어요. 트랜잭션도 지원하지만 일부 제한이 있어요.
- Amazon RDS는 완전한 ACID(원자성, 일관성, 격리성, 내구성) 준수와 복잡한 트랜잭션 지원을 제공해요. Lambda 함수가 여러 레코드에 걸친 복잡한 트랜잭션 또는 strong consistency가 필요하다면 Amazon RDS가 더 적합할 수 있어요.
- DynamoDB는 워크로드에 맞춰 자동으로 확장해요. 사전 프로비저닝 없이 Lambda 함수의 갑작스러운 트래픽 급증을 처리할 수 있죠. 온디맨드 용량 모드를 사용하면 사용한 만큼만 비용을 내는데, Lambda의 확장 모델과 완벽하게 맞아요.
- Amazon RDS는 선택한 인스턴스 크기에 기반한 고정 용량이 있어요. 여러 Lambda 함수가 동시에 연결하려 하면 연결 할당량을 초과할 수 있어요. 연결 풀을 신중하게 관리하고 잠재적으로 재시도 로직을 구현해야 해요.
- DynamoDB의 가격은 서버리스 애플리케이션과 잘 맞아요. 온디맨드 용량에서는 Lambda 함수가 실제로 수행한 읽기·쓰기에 대해서만 비용을 내요. 유휴 시간에는 요금이 없어요.
- Amazon RDS는 사용 여부와 관계없이 실행 중인 인스턴스에 대해 요금을 부과해요. 서버리스 애플리케이션에서 흔할 수 있는 간헐적인 워크로드에는 비용 효율이 떨어질 수 있어요. 다만 사용량이 일관된 높은 처리량 워크로드에는 더 경제적일 수 있어요.
선택한 데이터베이스 서비스 시작하기
DynamoDB와 Amazon RDS 사이의 선택 기준과 핵심 차이를 읽었으니, 이제 요구 사항에 가장 잘 맞는 옵션을 선택하고 다음 리소스로 시작할 수 있어요.
DynamoDB
다음 리소스로 DynamoDB를 시작해 보세요.
- DynamoDB 서비스 소개는 Amazon DynamoDB Developer Guide의 What is DynamoDB?를 읽어 보세요.
- 튜토리얼 Lambda를 API Gateway와 함께 사용하기를 따라 API 요청에 응답해서 DynamoDB 테이블에 CRUD 작업을 수행하는 Lambda 함수 사용 예시를 보세요.
- AWS SDK 중 하나로 Lambda 함수 안에서 DynamoDB에 접근하는 방법은 Amazon DynamoDB Developer Guide의 Programming with DynamoDB and the AWS SDKs를 읽어 보세요.
Amazon RDS
다음 리소스로 Amazon RDS를 시작해 보세요.
- Amazon RDS 서비스 소개는 Amazon Relational Database Service User Guide의 What is Amazon Relational Database Service (Amazon RDS)?를 읽어 보세요.
- Amazon Relational Database Service User Guide의 튜토리얼 Lambda 함수로 Amazon RDS 데이터베이스 접근하기를 따라 보세요.
- AWS Lambda를 Amazon RDS와 함께 사용하기를 읽고 Lambda를 Amazon RDS와 함께 쓰는 방법을 자세히 알아보세요.