데브허브 | DEVHUB | Hooking up my api with DynamoDB (with Terraform)Hooking up my api with DynamoDB (with Terraform)
- DynamoDB를 데이터베이스로 선택한 이유: RDS보다 쉽고 비용 효율적이기 때문입니다. 💰
- Terraform을 활용한 DynamoDB 테이블 배포: PK(Primary Key)와 SK(Sort Key)를 문자열로 정의하여 테이블을 생성합니다. 🏗️
- DynamoDB 빌링 모드: 자동 스케일링과 단순성을 위해 '요청당 지불(Pay per request)' 모드를 권장하지만, 일관된 트래픽에는 '프로비저닝된 용량(Provisioned concurrency)'이 비용 효율적일 수 있습니다. ⚖️
- 해시 키의 중요성: DynamoDB는 해시 키를 사용하여 데이터를 분산하고 빠른 읽기/쓰기 성능을 제공합니다. ⚡
- Lambda 함수 권한 설정: Lambda가 DynamoDB 테이블에 읽기/쓰기 접근할 수 있도록 필요한 IAM 권한을 부여합니다. 🔑
- 보안 강화:
scan 작업은 비효율적이고 비용이 많이 들 수 있으므로 Lambda 권한에서 제거하여 보안을 강화합니다. 🚫
- API 엔드포인트 리팩토링: 하드코딩된 응답 대신 DynamoDB에서 데이터를 읽고 쓰는 로직으로 API 엔드포인트를 업데이트합니다. 🔄
- AWS SDK v3 사용: DynamoDB 상호작용을 위해 최신 AWS SDK v3(
client-dynamodb, lib-dynamodb)를 사용하며, v2 사용을 지양합니다. 🚀
- 환경 변수를 통한 테이블 이름 전달: Terraform 출력에서 DynamoDB 테이블 이름을 가져와 Lambda 함수의 환경 변수로 전달합니다. ⚙️
- CRUD 작업 구현: API는 DynamoDB에서 단일 항목을 가져오고(GET) 저장하는(PUT) 기능을 구현합니다. 💾
- CORS 문제 해결: 프론트엔드와 API 간의 통신을 위해 Express 앱에 CORS 미들웨어를 추가하여 교차 출처 문제를 해결합니다. 🌐
- 프론트엔드 데이터 로딩 개선: API에서 노드 데이터를 가져오도록 프론트엔드를 리팩토링하고, 데이터 로딩 완료 후 로직이 실행되도록 수정합니다. 🖼️
- 로컬 개발의 어려움: DynamoDB 및 서버리스 Express 의존성으로 인해 로컬 환경에서 개발하기 어려운 점을 언급합니다. 🚧
- 성공적인 통합 및 향후 과제: DynamoDB 통합은 성공적이었으나, 애플리케이션의 버그 수정 및 로컬 개발 환경 개선이 필요합니다. ✅