AWS - DynamoDB4
DynammoDB 요금 정책요금 정책에는 두 가지가 있다. 온디맨드 용량 모드 요금 해당 APP이 테이블에서 수행하는 데이터 READ/WRITE에 대해 요금이 부과된다. 워크로드의 확장/축소를 DB가 알아서 처리하기 때문에 읽기 및 쓰기 처리량을 지정할 필요가 없다. APP의 트래픽 처리량을 예측하기 힘든 경우 적합 프로비저닝 용량 모드 요금 초당 읽기 및 쓰기 수를 지정해 사용하는 정책이다. 자동 조정을 사용하면 지정한 사용률에 따라 테이블의 용량을 자동 조정하여 APP의 성능은 보장하고 비용은 절감할 수 있다. 트래픽이 예측 가능하거나 트래픽이 일관되거나 점진적 변화가 일어나는 앱에 적합하다. RDMS에서 DynamoDB로 마이그레이션Near zero downtime migration from mysql to dynamodb 방법은 크게 두가지가 있다. AWS DMS 사용 : AWS DMS는 DynamoDB를 타겟으로 마이그레이션을 지원하는...
AWS - DynamoDB3
Dynamodb + Lambda주의할 점이전에는 event, context, callback 을 사용했지만 세번째 인자 callback은 더이상 잘 사용되지 않는다고 한다. 현재는 status code를 포함한 response 구조를 가진 객체를 return 하면 된다. Dynamodb로 작업하기fetch data데이터를 가져오는 방법은 두가지가 있다. scan : 전체 테이블 조회 query : 조건부 테이블 조회 특정 속성을 사용해 검색하고 싶은 경우 query를 사용하게 된다. 이때 검색에 사용하고자 하는 속성은 Index로 설정되어있어야 사용이 가능하다. 로직 DB에 저장된 데이터들의 UUID를 스캔한다. 1234567891011121314151617const ddbScanData = await ddb.scan(scanParams).promise();const scanParams = { TableName:...
AWS - DynamoDB
DynamoDBAWS의 종합 관리형 NoSQL DB 서비스이다. 원활한 확장성과 성능을 제공한다. NoSQL vs RDBMS RDBMS : 데이터를 유연하게 쿼리할 수 있지만, 쿼리 비용이 상대적으로 높아 트래픽이 많은 상황에서는 확장성이 떨어진다. 유연성을 목표로 설계하는 것이 중요하고 정규화가 중요하다. NoSQL : 일반적으로 쿼리 비용이 높고 속도가 느리지만 몇 가지 방법으로 데이터를 효율적으로 쿼리할 수 있다. 가장 중요하고 범용적인 쿼리를 가능한 빠르고 저렴하게 수행할 수 있는 스키마를 설계하는 것이 중요하다. 가능한 적은 수의 테이블을 유지하는게 좋다. NoSQL을 사용하면 좋은 경우 READ는 자주하지만 UPDATE는 자주 하지 않는 경우 수평적으로 확장되어야 하는 DB를 다루는 경우. 즉, 막대한 양의 데이터를 다루는 경우 조인과 같은 복잡한 쿼리가 필요하지 않은 환경 즉, DynamoDB는 NoSQL이므로 비관계형 데이터가 포함된 작업에서 최고의 성능을...
AWS - DynamoDB2
DynamoDB 활용가능성DynamoDB를 사용할 수 있는지 계속해서 활용방안을 생각해보고있다. 현 상황재생량을 전송하는 작업에서 uuid로 구분되는 MySQL(RDBMS) 로그 데이터 테이블에 insert와 update가 빈번하게 발생하고 있다. 이를 개선시키고자 한다. 이슈 재생량 전송 처리 서버를 분리한다 (API 추출) 데이터를 쌓는 과정과 조회 과정이 동시에 일어남에 따라 조회 지연이 길다. 해결방안 AWS DynamoDB(NoSQL)을 도입한다. 기본키의 구성을 바꾼다. 데이터 삽입 방법과 조회 방법을 바꾼다. 메세지 큐를 사용해 주기적으로 데이터를 정해진 곳으로 전송하도록 한다. DynamoDB 사용해보기 API Gateway로 재생량 전송 서버를 분리하여 api를 만든다. Lambda를 사용해 DynamoDB에 데이터를 저장한다. 현재 사용중인 log data insert 작업은 기본키인 uuid의 데이터를 계속해서 갱신하는 방식으로, INSERT INTO...
Node.js + Lambda + APIGateway + DynamoDB
Lambda람다는 서버리스 코드 실행 컴퓨팅 서비스이다. 항상 가동되는 것이 아니라 필요 시에만 코드를 실행하기 때문에 경제적이다. 또한 사용자는 컴퓨터 자원에 대해서는 고려하지 않아도 되며 오로지 코드에만 책임을 가지기 때문에 상황에 따라 아주 효율적으로 사용될 수 있다. 람다는 다양한 언어로 사용할 수 있다. Node.js, Python, Java, Go 등 대부분의 언어를 지원하고 있다. 그 중 Node.js로 작성하는 방법을 알아봤다. 핸들러1234exports.handler = async function (event, context, callback) { console.log("EVENT: \n" + JSON.stringify(event, null, 2)); return context.logStreamName;}; event : 호출자로부터의 정보가 포함된 객체. JSON 형식 문자열로 전달하고, 런타임은 이를 객체로...
CodeCommit
CodeCommitAWS CodeCommit은 클라우드에서 asset을 비공개로 저장하여 관리할 수 있도록 AWS에서 호스팅되는 버전 관리 서비스이다. Git의 표준 기능을 지원하므로 기존 Git 기반 도구와도 원활하게 연동된다. CodeCommit이 지원하는 기능들 AWS가 호스팅하여 종합 관리 서비스를 제공함 암호화된 안전한 코드 저장 코드 공동 작업 다른 AWS 및 타사 서비스와 통합됨 시작하기자격증명우측 상단의 계정을 클릭하면 ‘내 보안 자격 증명’ 이라는 메뉴가 보인다. 클릭시 IAM 화면으로 넘어온다. 여기서 두번째 탭에 있는 AWS CodeCommit 자격 증명을 선택한다. 아래에 보이는 AWS CodeCommit에 대한 HTTPS Git 자격증명의 자격증명 생성을 선택한다.자격증명을 생성하면 사용자 이름과 비밀번호가 나온다. csv 파일로 내보내 관리하는 것이 좋다. git으로 코드 clone코드를 클론할 레파지토리로 이동한다. 없다면 하나 새로...
AWS Node.js SDK로 S3 사용해보기 & multer-S3
설치1npm i aws-sdk --save 1const AWS = require("aws-sdk"); 자격증명global credential file을 통해 자격증명을 할 수도 있고 다양한 방법이 있다. 나는 간단하게 config.json파일을 생성하여 사용했다. (IAM 사용자 생성 후 sdk 사용을 위한 키-밸류 값들은 받아놓은 상태) config.json 12345{ "accessKeyId": "", "secretAccessKey": "", "region": ""} 파일은 다음과 같이 불러올 수 있다. 1AWS.config.loadFromPath("./config.json"); S3 생성 및 리스팅12345678//create S3 service objects3 = new AWS.S3();...
Github page AWS Route53 custom domain으로 서비스하기
Route53은 AWS의 클라우드 DNS 웹 서비스이다. DNS 서비스를 제공하는 다른 서비스들도 많지만 Route53을 사용할 경우 EC2 또는 CloudFront 등 AWS에서 실행되는 인프라에 효과적으로 연결된다. 이번에는 Route53에서 도메인을 사서 github page로 연결시켜보았다. 다른 더 저렴한 namecheap 같은 사이트에서 구매해도 되지만 Route53으로 서비스할 것이기 때문에 Route53에서 도메인을 구입하는 것이 절차를 조금 간단하게 할 수 있는 방법이다. 도메인 구입 구입을 눌러서 마음에 드는 도메인을 살 수 있다. 나는 가장 저렴한 8$의 .be 도메인을 구입했다. 구입시에 모든 등록 정보는 영어로 입력해야 한다. 제대로 등록이 되었다면 얼마 지나지 않아 바로 도메인 등록이 완료된다. 오래 걸릴수도 있다는 알림이 떠있지만 사실 바로 등록이 안되면, 대부분의 경우 뭔가 잘못된 것이다. 도메인 등록에 문제가 생기면 생성이 취소 된다. 이...
S3 & CloudFront 연동
AWS CloudFront 공식문서 CloudFronthtml, css, js 및 이미지 파일과 같은 정적 & 동적 웹 컨텐츠를 사용자에게 더 빨리 배포하도록 지원하는 AWS의 웹 서비스이다.전세계의 엣지 로케이션을 통해 뛰어난 전송 능력을 가지고있다. 파일의 사본이 여러 위치에 보관되므로 안정성과 가용성도 향상된다. CloudFront는 ‘배포’를 생성해 컨텐츠를 전송한다. 원본 파일을 가지고 있는 ‘오리진 서버’와 연동하여 사용한다. 구성하는 방법 오리진 서버를 지정한다.( Amazon S3 버킷 또는 고유 HTTP 서버) 오리진 서버는 객체(파일)의 원본 버전을 저장하고있다. 웹 사이트나 애플리케이션을 통해 사용자가 파일을 요청할 경우 CloudFront에 어떤 오리진 서버에서 파일을 가져올지 알려주는 CloudFront 배포를 만든다. CloudFront는 새 배포에 도메인 이름을 할당하고 이는 API 요청 등과 같은 request에 대항 response로...
S3
Amazon Simple Storage Service 인터넷 스토리지 서비스를 위한 AWS 서비스 구성요소 bucket : container와 같은 개념. 파일이 저장될 프로젝트를 말한다. Data Object : 저장되는 파일. 객체 형식으로 저장된다. 실제 ‘파일’과 파일을 설명하는 ‘메타데이터’로 구성된다. 장점 사용하기 쉽다. AWS Management Console과 다양한 SDK 사용가능. 세부적인 보안 설정이 가능하다. Object 별로 접근권한을 설정할 수 있다. ObjectS3는 object store 방식으로 데이터를 저장한다. key-value 방식을 사용해 많은 데이터를 저장할 수 있도록 한다.