Upgrade to Pro — share decks privately, control downloads, hide ads and more …

온라인 주문 서비스를 서버리스 아키텍쳐로 ᄀ...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Taewoo Kim
October 14, 2020

온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기

AWS Community Day Online 2020 에서 발표한 내용입니다.

Taewoo Kim

October 14, 2020

Transcript

46 slides
  1. 발표자 소개 • 일본 도쿄 거주 (2020년 10월 현재) •

    Developers.IO 에서 AWS 기술 블로그 작성 • AWS 12x Certified Engineer • 2020 APN AWS Top Engineers (by AWS Japan) 한국어 & 일본어 기술블로그. https://dev.classmethod.jp/author/kim-taewoo/
  2. 스포일러 주의! 본 발표는 좌측 블로그의 내용과 매우 유사한 내용을

    다룹니다 BUT!! 아키텍쳐의 전제에 몇가지 변화를 주어 아키텍쳐 및 데모코드를 상당부분 변경하였으니 이미 포스팅을 읽으셨던 분들도 재밌게 시청하실 수 있을거라 기대합니다 :)
  3. 한가지 더 주의! 본 발표의 데모 아키텍쳐는 서버리스 상에서 분산

    트랜잭션 처리를 위한 “아이디어” 를 제시하기 위한 용도로 제안하였으며, 실제 서비스에 적용하기 위해서는 반드시 다양한 관점에서 검토를 선행할 것을 적극 권장합니다.
  4. 본 발표가 끝나면 얻어갈 수 있는 것 • 서버리스 환경에서

    분산 트랜잭션 처리는 어떻게 할 수 있을까요? • 서버리스 환경에서 쉽게 실시간 통신을 구현할 수 있는 방법은 없을까요? • AWS CDK 가 좋다던데 샘플 코드가 너무 부족한 것 같은데요
  5. 본 발표에서 다루지 않는 것 • 분산 트랜잭션의 일반적인 처리기법에

    대한 자세한 설명 • AWS Step Functions 에 대한 자세한 설명 • GraphQL 개념 및 AWS AppSync 에 대한 자세한 설명 • AWS Amplify 에 대한 자세한 설명 • AWS Lambda 에 대한 자세한 설명 • Amazon DynamoDB 에 대한 자세한 설명
  6. 트랜잭션 처리 • 모놀리식 아키텍쳐에서는 데이터베이스 레벨에서 트랜잭션 제어 •

    session.flush() 및 session.commit() 등을 통해 비교적 간단히 트랜잭션 구현이 가능했음
  7. 트랜잭션 처리 • MSA 에서는 서비스 레벨에서 트랜잭션 제어 •

    평소에는 문제가 없다가도 예기치 못한 순간이나 트래픽이 몰리는 순간에 서비스가 정상적으로 작동하지 않으면 트랜잭션은 성립하지 않음 • MSA 상에서 분산 트랜잭션 처리를 위한 다양한 방법들이 고안됨 트랜잭션 처리 • MSA 에서는 서비스 레벨에서 트랜잭션 제어 • 평소에는 문제가 없다가도 예기치 못한 순간이나 트래픽이 몰리는 순간에 서비스가 정상적으로 작동하지 않으면 트랜잭션은 성립하지 않음 • MSA 상에서 분산 트랜잭션 처리를 위한 다양한 방법들이 고안됨
  8. Distributed Sagas • 마이크로서비스 간의 조율을 위한 프로토콜 (구현체가 아님)

    • Saga Execution Coordinator (SEC) 와 Saga Log 가 구현의 핵심
  9. AWS Step Functions • 서버리스 워크플로우 관리 서비스 • SEC

    와 Saga Log 의 기능으로도 활용 가능 • 단, State 변경횟수로 과금되므로 비용 대비 효과를 잘 고려하여 사용할 것을 권장
  10. AWS AppSync • 서버리스 GraphQL 서비스 • 최근에 서포트된 Direct

    Lambda Resolver 로 인해 앞으로 많이 활용될 서비스로 예상 • GraphQL 의 실시간 업데이트를 위한 Subscription 기능 지원
  11. AWS Amplify • 클라이언트 개발자가 쉽고 빠르고 효과적으로 AWS 환경을

    구축 및 개발, 활용할 수 있도록 도와주는 SDK, CLI 및 콘솔환경을 제공 • 본 데모에서는 amplify codegen 을 통해 AppSync API 코드를 생성 및 생성된 코드를 활용
  12. AWS CDK • AWS 리소스를 범용 프로그래밍 언어로 작성, 배포,

    관리할 수 있도록 해주는 도구 • AWS Cloud Development Kit 의 약자로, AWS 뿐만 아니라 GCP 나 Azure, 그리고 Kubernetes 까지 지원
  13. 주문 성공 / 트랜잭션 성공 주문 트랜잭션 완료 (주문 성공)

    결제처리가 완료되었다는 이벤트 수신 주문을 확정하고 배송 요청
  14. 주문 실패 / 트랜잭션 성공 결제처리가 완료되었다는 이벤트 수신 주문

    트랜잭션 완료 (주문 실패) 결제 취소 + 배송 요청 취소 + 주문 취소 주문을 확정하고 배송 요청하려다… But 어떤 태스크에서 실패
  15. 결제처리 실패 / 트랜잭션 성공 결제처리가 완료되었다는 이벤트 수신 But

    어떠한 이유로 이벤트 처리 실패 주문 트랜잭션 완료 (주문 실패) 결제 취소 + 배송 요청 취소 + 주문 취소
  16. 정리: 오늘 이야기한 것들 • Step Functions 를 활용한 분산

    트랜잭션 처리도 고려해보자 • AppSync 와 Direct Lambda Resolver 조합을 눈여겨보자 • 데모 프로젝트의 AWS CDK 샘플 코드는 챙겨놓자

More Decks by Taewoo Kim

Other Decks in Programming