온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020
1. 온라인 주문 서비스를 서버리스
아키텍쳐로 구축하기
김태우 / Solutions Architect, Classmethod
2. 발표자 소개
• 일본 도쿄 거주 (2020년 10월 현재)
• Developers.IO 에서 AWS 기술 블로그 작성
• AWS 12x Certified Engineer
• 2020 APN AWS Top Engineers (by AWS Japan)
한국어 & 일본어 기술블로그. https://dev.classmethod.jp/author/kim-taewoo/
4. 스포일러 주의!
본 발표는 좌측
블로그의 내용과
매우 유사한 내용을
다룹니다
BUT!!
아키텍쳐의 전제에 몇가지 변화를 주어
아키텍쳐 및 데모코드를 상당부분 변경하였으니
이미 포스팅을 읽으셨던 분들도
재밌게 시청하실 수 있을거라 기대합니다 :)
5. 한가지 더 주의!
본 발표의 데모 아키텍쳐는 서버리스 상에서
분산 트랜잭션 처리를 위한 “아이디어” 를
제시하기 위한 용도로 제안하였으며, 실제
서비스에 적용하기 위해서는 반드시 다양한
관점에서 검토를 선행할 것을 적극 권장합니다.
6. 본 발표가 끝나면 얻어갈 수 있는 것
• 서버리스 환경에서 분산 트랜잭션 처리는 어떻게
할 수 있을까요?
• 서버리스 환경에서 쉽게 실시간 통신을 구현할 수
있는 방법은 없을까요?
• AWS CDK 가 좋다던데 샘플 코드가 너무 부족한
것 같은데요
7. 본 발표에서 다루지 않는 것
• 분산 트랜잭션의 일반적인 처리기법에 대한 자세한 설명
• AWS Step Functions 에 대한 자세한 설명
• GraphQL 개념 및 AWS AppSync 에 대한 자세한 설명
• AWS Amplify 에 대한 자세한 설명
• AWS Lambda 에 대한 자세한 설명
• Amazon DynamoDB 에 대한 자세한 설명
12. 트랜잭션 처리
• 모놀리식 아키텍쳐에서는
데이터베이스 레벨에서 트랜잭션
제어
• session.flush() 및 session.commit()
등을 통해 비교적 간단히 트랜잭션
구현이 가능했음
13. 트랜잭션 처리
• MSA 에서는 서비스 레벨에서 트랜잭션 제어
• 평소에는 문제가 없다가도 예기치 못한
순간이나 트래픽이 몰리는 순간에 서비스가
정상적으로 작동하지 않으면 트랜잭션은
성립하지 않음
• MSA 상에서 분산 트랜잭션 처리를 위한
다양한 방법들이 고안됨
트랜잭션 처리
• MSA 에서는 서비스 레벨에서 트랜잭션 제어
• 평소에는 문제가 없다가도 예기치 못한
순간이나 트래픽이 몰리는 순간에 서비스가
정상적으로 작동하지 않으면 트랜잭션은
성립하지 않음
• MSA 상에서 분산 트랜잭션 처리를 위한
다양한 방법들이 고안됨
18. AWS Step Functions
• 서버리스 워크플로우 관리 서비스
• SEC 와 Saga Log 의 기능으로도 활용 가능
• 단, State 변경횟수로 과금되므로 비용 대비
효과를 잘 고려하여 사용할 것을 권장
19. AWS AppSync
• 서버리스 GraphQL 서비스
• 최근에 서포트된 Direct Lambda Resolver
로 인해 앞으로 많이 활용될 서비스로 예상
• GraphQL 의 실시간 업데이트를 위한
Subscription 기능 지원
20. AWS Amplify
• 클라이언트 개발자가 쉽고 빠르고 효과적으로
AWS 환경을 구축 및 개발, 활용할 수 있도록
도와주는 SDK, CLI 및 콘솔환경을 제공
• 본 데모에서는 amplify codegen 을 통해 AppSync
API 코드를 생성 및 생성된 코드를 활용
21. AWS CDK
• AWS 리소스를 범용 프로그래밍 언어로
작성, 배포, 관리할 수 있도록 해주는 도구
• AWS Cloud Development Kit 의 약자로,
AWS 뿐만 아니라 GCP 나 Azure, 그리고
Kubernetes 까지 지원