10월 17일 AWS Community Day Online - 앱 현대화 특집에 참여하였다. 그리고 그중에서 시간이 맞았던 4개의 웨비나를 들었는데, 블로그에 정리하지 않으면 들었던 내용이라도 머릿속에서 증발되기 때문에 다시 떠올리며 내용을 정리해보려고 한다.
Community Day는 AWS한국사용자모임 - AWSKRUG에서 진행하는 웨비나이다. 웨비나를 들으며 중간중간 퀴즈를 풀 수 있는데 선착순으로 맞추면 쿠폰을 받을 수 있는 행사도 진행한다. 이번 행사에서는 오전에는 배달의 민족 쿠폰과 오후를 위한 aws서적이 있었는데 오전에 문제를 맞추어서 배달의 민족 쿠폰을 받을 수 있었다 :)
트랜잭션이란 ?
결과적으로 모든 태스크가 전부 성공하던지, 모든 태스크가 전부 실패하던지 그 외의 상태는 용납하지 않음
ex. 항공권을 구매하지 못해서 여행 계획 취소된 사례 -> 호텔 예약, 렌트카 예약 취소해야함
트랜잭션 처리
모놀리식 아키텍쳐에서는 데이터베이스 레벨에서 트랜잭션 제어, session.flush() 및 session.commit()등을 통해 비교적 간단히 트랜잭션 구현이 가능했음.
MSA에서는 서비스 레벨에서 트랜잭션 제어 (분산 트랜잭션)
평소에는 문제가 없다가도 예기치 못한 순간이나 트래픽이 몰리는 순간에 서비스가 정상적으로 작동하지 않으면 트랜잭션은 성립하지 않음.
MSA상에서 분산 트랜잭션 처리를 위한 다양한 방법이 고안됨
Distributed Sagas
마이크로서비스 간의 조율을 위한 프로토콜(구현체가 아님)
Saga Execution Coordinator(SEC)와 Saga Log가 구현의 핵심
: Saga Log에는 태스크가 어디까지 처리가 되고 있는지 스토리지에 저장, SEC는 태스크를 하기 전과 후에 Saga Log에 기록(문제가 생겼을 때 어디까지 수행했지 파악 가능)
실패한 경우 실행된 태스크에 대해서 Roll back을 해주어야 하는데 이를 Compensation task(보상태스크)라고 부름.
Sagas 원리 : 각각의 태스크를 수행을 하고 성공을 하면 완료, 어떤 태스크가 실패한다면 이미 수행된 태스크를 무효처리 할 수 있는 보상태스크를 시행함으로써 전체를 Roll back.
Demo에 활용된 aws서비스
1) Step functions
: 서버리스 워크플로우 관리 서비스
: SEC와 Saga Log의 기능으로 활용 가능
: State 변경횟수로 과금되므로 남용 잘 고려해야
-> 주문, 결제 등 비즈니스 크리티컬한 시나리오에서 활용하면 좋을듯
2) AWS AppSync
: 서버리스 GraphQL 서비스
: 최근에 서포트 된 Direct Lambda Resolver로 인해 앞으로 많이 활용될 서비스로 예상
: GraphQL의 실시간 업데이트를 위한 Subscription 기능 지원
3) AWS Amplify
: 클라이언트 개발자가 쉽고 빠르고 효과적으로 AWS 환경을 구축 및 개발, 활용할 수 있도록 도와주는 SDK, CLI 및 콘솔환경을 제공
본 데모에서는 amplify codegen을 통해 AppSync API 코드를 생성 및 생성된 코드를 활용
4) AWS CDK
AWS 리소스를 범용 프로그래밍언어로 작성, 배포, 관리할 수 있도록 해주는 도구
AWS Cloud Development Kit의 약자로 AWS뿐 아니라 GCP나 Azure, Kubernetes까지 지원