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 방식을 사용해 많은 데이터를 저장할 수 있도록 한다.
window.resize throttle 설정
window.resize throttle 설정window.resize 이벤트에 리스너를 걸게되면 사이즈가 바뀌는 매순간 이벤트가 발생하기 때문에 성능 저하가 발생할 수 있다. 이것을 막기 위해 취하는 해결방법에 debounce와 throttle이 있다. 이전에 정리 포스팅을 올린 것 같은데 아무리 찾아도 없다..ㅠㅠ? resize 이벤트에 걸린 핸들러를 이벤트가 종료된 시점에 한 번만 호출 되도록 하기위해 throttle을 사용했다. 이는 MDN 사이트에서 찾은 방식이다. 검색을 해보면 정말 다양한 방식으로 구현할 수 있는데, (Stackoverflow - How to wait for the ‘end’ of ‘resize’ event and only then perform an action?) MDN에 올라온 방식이 가장 깔끔한 것 같다. throttlethrottle은 간단히 말해서 일정 timer를 걸어두고 그 시간 내에는 이벤트를 활성화 시키지 않는 것이다. 예를들어...