re:invent2018에서 들었던 세션들의 간단한 후기와 re:invent를 더 잘 즐기는 방법에 대해 적어보았습니다.
-
-
Save yebonkim/279cfe7ad85d6ba01b75526104063620 to your computer and use it in GitHub Desktop.
Serverless Application에서 적합한 Database를 고르는 방법에 대한 ChalkTalk를 듣고 왔습니다.
- Horizontal Scailing (서버 부하에 따라 Horizontal Scailing 가능)
- Ephemeral Execution (임시 실행 즉 Event 발생 시 해당 동작이 수행되고 끝나는 것)
- Event-Driven (Event 발생 시 실행)
아래는 각 기능을 수행하기 위해 사용될 수 있는 AWS의 서비스들과 그 서비스들의 특징입니다. ChalkTalk는 주로 Serverless Application에서 요즘 강세인 NoSQL을 쓸 것이냐 아니면 Relational DB를 쓸 것이냐고 주요 주제였던 것 같습니다.
- NoSQL Key-Value Store
- API-Driven
- AWS Lambda와 연동 가능
- VPC 내장
- Text Searching and analytics
- AWS Identity and Access Management(IAM)와 연동 가능
- 스트리밍 데이터 수집을 위한 Amazon Kinesis Firehose 와 연동 가능
- Dynamo DB가 Text Search에 대한 기능 제공이 없으니 Amazon Elasticsearch Service와의 연동이 가능
- 큰 사이즈의 데이터일 경우 5TB까지
- Parallerism 가능
- AWS Lambda와 연동 가능
- 보안을 위해 IAM과 연동 가능, rest & in 전송을 암호화
- AWS Glue Data Catalog와의 즉각 통합가능
- 관계형 DB 모델 설계 가능
- Transactional Consistency
- Stateful Connections
- VPC 설정 필요
- MySQL, PostgreSQL 사용가능
- Data API Beta버전 사용가능
- Redis와 Memcached와 호환
- Server based scailing
- VPC 설정 필요
위와 같이 Database 설계시 사용할 수 있는 AWS들의 서비스들을 간략하게 소개하고 본격적인 ChalkTalk로 넘어갔습니다. 다음은 Discussion에서 들었던 추가 내용들입니다.
- 50billion access 감당이 필요한 경우 어떤 DB를 써야하는 가 - dynamo handle가능한데 비쌀 것
- aurora쓰면 proxy가 어떤 db들어갈지 선택함
- 데이터 연속적으로 주고받으려면 kinesis 서비스 이용
Amazon Web Service를 이용하여 더 좋은 어플리케이션을 만드는 방법을 배우는 세션이었습니다. 이전까지는 앱을 개발하면서 생각하지 못했던 Offline Data Access(Cache) 등에 대해서 생각해 볼 수 있었습니다.
- Data Security
- Performant and Responsive UX
- Personalization
- Fast Data Access
- Offline Data Access
- Data Security
- Data Availablity
- User Behavior
- User Adoption(사용자가 이전 시스템에서 더 빠르고, 더 효율적인 시스템을 채택하는 것)
- 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 등이 있습니다.
이전까지는 Push 알림 구현시에 Firebase, SMS 메시지 구현에서는 Twilio를 사용해 왔었는데 이를 한 번에 관리할 수 있는 PinPoint 서비스를 방학 내에 사용해 볼 예정입니다.
AWS AppSync를 사용하면 여러 데이터 원본에 걸쳐 온라인 및 오프라인 데이터 액세스, 데이터 동기화, 데이터 조작 등을 관리해주는 서비스입니다. AWS AppSync는 GraphQL을 사용합니다.
Amazon Cognito를 사용하면 보안 관리 뿐만 아니라 Facebook, Google 등 다른 소셜 계정 연동까지 가능합니다.
위에 소개한 3가지 서비스는 모두 이전에 어플리케이션을 개발하면서 애를 먹었던 부분으로 과연 서비스들이 얼마나 빠르고 편리하게 문제점들을 해결해주는지 궁금합니다. 얼른 사용해보고 싶습니다 ㅎㅎ
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 구조입니다.
또 아래 쿼리는 GraphQL로 news를 가져오는 쿼리입니다.
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 설정)
자세한 소스코드는 발표자료 링크에서 확인할 수 있습니다.