Skip to content

Instantly share code, notes, and snippets.

@yebonkim
Last active May 14, 2019 16:30
Show Gist options
  • Save yebonkim/279cfe7ad85d6ba01b75526104063620 to your computer and use it in GitHub Desktop.
Save yebonkim/279cfe7ad85d6ba01b75526104063620 to your computer and use it in GitHub Desktop.

Which Database is right for your serverless Application

serverless_application

발표자료 링크

Serverless Application에서 적합한 Database를 고르는 방법에 대한 ChalkTalk를 듣고 왔습니다.

Serveless의 특징

- Horizontal Scailing (서버 부하에 따라 Horizontal Scailing 가능)
- Ephemeral Execution (임시 실행 즉 Event 발생 시 해당 동작이 수행되고 끝나는 것)
- Event-Driven (Event 발생 시 실행)

아래는 각 기능을 수행하기 위해 사용될 수 있는 AWS의 서비스들과 그 서비스들의 특징입니다. ChalkTalk는 주로 Serverless Application에서 요즘 강세인 NoSQL을 쓸 것이냐 아니면 Relational DB를 쓸 것이냐고 주요 주제였던 것 같습니다.

NoSQL을 위한 AWS 서비스 : Amazon Dynamo DB

Dynamo DB

- NoSQL Key-Value Store
- API-Driven
- AWS Lambda와 연동 가능
- VPC 내장

Text Indexing과 Search를 위한 AWS 서비스 : Amazon Elasticsearch Service

Amazon Elasticsearch Service

- Text Searching and analytics 
- AWS Identity and Access Management(IAM)와 연동 가능
- 스트리밍 데이터 수집을 위한 Amazon Kinesis Firehose 와 연동 가능
- Dynamo DB가 Text Search에 대한 기능 제공이 없으니 Amazon Elasticsearch Service와의 연동이 가능

대용량 정보 저장을 위한 : Key-value object storage : S3

Amazon S3

- 큰 사이즈의 데이터일 경우 5TB까지
- Parallerism 가능
- AWS Lambda와 연동 가능

Serverless interactive query service를 위한 Amazon Athena

Amazon Athena

- 보안을 위해 IAM과 연동 가능, rest & in 전송을 암호화 
- AWS Glue Data Catalog와의 즉각 통합가능 

Relational DB 위한 AWS 서비스 : Amazon RDS

Amazon RDS

- 관계형 DB 모델 설계 가능 
- Transactional Consistency
- Stateful Connections
- VPC 설정 필요 

Serverless용 Relational Database : Amazon Aurora

Amazon Aurora

- MySQL, PostgreSQL 사용가능 
- Data API Beta버전 사용가능

Cache 기능을 위한 : Amazon ElastiCache

Amazon ElastiCache

- Redis와 Memcached와 호환
- Server based scailing
- VPC 설정 필요 

위와 같이 Database 설계시 사용할 수 있는 AWS들의 서비스들을 간략하게 소개하고 본격적인 ChalkTalk로 넘어갔습니다. 다음은 Discussion에서 들었던 추가 내용들입니다.

- 50billion access 감당이 필요한 경우 어떤 DB를 써야하는 가 - dynamo handle가능한데 비쌀 것
- aurora쓰면 proxy가 어떤 db들어갈지 선택함 
- 데이터 연속적으로 주고받으려면 kinesis 서비스 이용 

Developing Well Architected iOS Apps with AWS

iOS

발표자료 링크

Amazon Web Service를 이용하여 더 좋은 어플리케이션을 만드는 방법을 배우는 세션이었습니다. 이전까지는 앱을 개발하면서 생각하지 못했던 Offline Data Access(Cache) 등에 대해서 생각해 볼 수 있었습니다.

End User Requirement

- Data Security
- Performant and Responsive UX
- Personalization
- Fast Data Access
- Offline Data Access

Business Requirement

- Data Security
- Data Availablity
- User Behavior
- User Adoption(사용자가 이전 시스템에서 더 빠르고, 더 효율적인 시스템을 채택하는 것)

iOS 개발에서 특히 중요한 것

- Authorization workflow
- Network Management
- Caching
- Real Time Data

Backend를 관리하는 방법

- 하지 않는다.
- 보안과 scalability를 위해 Serverless를 채택한다.
- AWS Amplify를 사용한다.

Amplify는 Auth, Analytics, Storage, APIs, Caching 기능을 제공하여 사용자 가입/로그인, MFA, 추적 또는 지표 분석, 콘텐츠 관리 또는 서버리스 API 통합과 같은 기능을 빠르게 추가할 수 있습니다.

Amplify뿐만 아니라 아래 Application 구조를 보면 Mobile Application을 개발할 때 유용히 쓸 수 있는 PinPoint, AppSync 등이 있습니다.

iOS_Architecture

Push 및 이메일 SMS 메시지 등 전송을 위한 서비스 : Amazon PinPoint

이전까지는 Push 알림 구현시에 Firebase, SMS 메시지 구현에서는 Twilio를 사용해 왔었는데 이를 한 번에 관리할 수 있는 PinPoint 서비스를 방학 내에 사용해 볼 예정입니다.

데이터 실시간 저장 동기화를 위한 서비스 : AWS AppSync

AWS AppSync를 사용하면 여러 데이터 원본에 걸쳐 온라인 및 오프라인 데이터 액세스, 데이터 동기화, 데이터 조작 등을 관리해주는 서비스입니다. AWS AppSync는 GraphQL을 사용합니다.

사용자 가입, 로그인 및 액세스 제어 기능을 추가할 수 있는 서비스 : Amazon Cognito

Amazon Cognito를 사용하면 보안 관리 뿐만 아니라 Facebook, Google 등 다른 소셜 계정 연동까지 가능합니다.

위에 소개한 3가지 서비스는 모두 이전에 어플리케이션을 개발하면서 애를 먹었던 부분으로 과연 서비스들이 얼마나 빠르고 편리하게 문제점들을 해결해주는지 궁금합니다. 얼른 사용해보고 싶습니다 ㅎㅎ

Developing Well Architected Android Apps with AWS

Android

발표자료 링크

Android Session은 iOS Session과 비슷하였지만 좀 더 AppSync과 Amplify의 실제 사용 예제를 보여주는 세션이었습니다.

Session에서 예제로 보여준 데모는 로그인을 하여 뉴스 기사를 만들고 댓글을 다는 등의 기능을 할 수 있는 어플리케이션이었습니다.

또 이 앱이 목표로 하는 요구 사항은 아래와 같았습니다.

- Responsive
- Cache for speed and offline
- Efficient network usage
- Data-driven UI updates

위에서 주목해야 할 것은 Cache와 Data-driven UI update가 있겠습니다.

아래는 각각 App 내 구조와 Cloud 구조입니다.

Android_App_Architecture Cloud_Architecture

또 아래 쿼리는 GraphQL로 news를 가져오는 쿼리입니다.

GraphQL

iOS 글에서 AWS AppSync에 대해 간단히 살펴보았는데 더 자세히 살펴보면 아래와 같습니다.

 - Serverless GraphQL Service
 - 계정을 통해 Data Source에 연결함
 - Data sync와 real-time & offline도 수용가능
 - GraphQL
 - 클라우드 내에서 Conflict 감지 및 해결
 - IAM, Amazon Cognito 등 보안 관리 가능
 - 꼭 사용자에게 필요한 데이터 만을 받을 수 있음
 - 하나의 request로 여러 데이터를 가져올 수 있음
 - Self Documentation
 - React Native, Android, iOS, WEB 등 다양한 곳에 사용 가능
 - 어플리케이션이 재시작해도 데이터가 유지됨
 - Write-through Mutation

다음으로 AWS Amplify CLI를 통해 AppSync, Cognito, PinPoint 등 다양한 서비스들을 설정할 수 있습니다. 아래의 명령어들을 사용하면 res/raw/awsconfiguration.json 파일이 생성되며 설정을 관리할 수 있습니다.

- amplify add auth(cognito 설정)
- amplify add analytics(pinpoint 설정)
- amplify add api(AppSync 설정)

자세한 소스코드는 발표자료 링크에서 확인할 수 있습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment