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

Acb6390b6c4b5192f40e10601b63dafc?s=47 Taewoo Kim
October 14, 2020

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

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

Acb6390b6c4b5192f40e10601b63dafc?s=128

Taewoo Kim

October 14, 2020
Tweet

Transcript

  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/
  3. 스포일러 주의! 본 발표는 좌측 블로그의 내용과 매우 유사한 내용을

    다룹니다
  4. 스포일러 주의! 본 발표는 좌측 블로그의 내용과 매우 유사한 내용을

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

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

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

    대한 자세한 설명 • AWS Step Functions 에 대한 자세한 설명 • GraphQL 개념 및 AWS AppSync 에 대한 자세한 설명 • AWS Amplify 에 대한 자세한 설명 • AWS Lambda 에 대한 자세한 설명 • Amazon DynamoDB 에 대한 자세한 설명
  8. 서버리스 분산 트랜잭션 처리방법

  9. 트랜잭션이란? 여행갈 때 TODO 리스트 - 항공권 예약 - 호텔

    예약 - 렌트카 예약
  10. 트랜잭션이란? 여행 취소 TODO 리스트 - 항공권 취소 - 호텔

    취소 - 렌트카 취소
  11. 트랜잭션이란? • 모든 태스크가 전부 성공하던지 • 모든 태스크가 전부

    실패하던지 • 그 외의 상태는 용납하지 않음
  12. 트랜잭션 처리 • 모놀리식 아키텍쳐에서는 데이터베이스 레벨에서 트랜잭션 제어 •

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

    평소에는 문제가 없다가도 예기치 못한 순간이나 트래픽이 몰리는 순간에 서비스가 정상적으로 작동하지 않으면 트랜잭션은 성립하지 않음 • MSA 상에서 분산 트랜잭션 처리를 위한 다양한 방법들이 고안됨 트랜잭션 처리 • MSA 에서는 서비스 레벨에서 트랜잭션 제어 • 평소에는 문제가 없다가도 예기치 못한 순간이나 트래픽이 몰리는 순간에 서비스가 정상적으로 작동하지 않으면 트랜잭션은 성립하지 않음 • MSA 상에서 분산 트랜잭션 처리를 위한 다양한 방법들이 고안됨
  14. Distributed Sagas Distributed Sagas: A Protocol for Coordinating Microservices -

    Caitie McCaffrey - JOTB17
  15. Distributed Sagas • 마이크로서비스 간의 조율을 위한 프로토콜 (구현체가 아님)

    • Saga Execution Coordinator (SEC) 와 Saga Log 가 구현의 핵심
  16. Distributed Sagas Excepted from Distributed Sagas: A Protocol for Coordinating

    Microservices - Caitie McCaffrey - JOTB17
  17. 데모에서 사용된 AWS 서비스

  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 까지 지원
  22. 데모 프로젝트 소개

  23. 데모 시연

  24. 데모 프로젝트 아키텍쳐

  25. 데모 프로젝트 아키텍쳐

  26. 데모 흐름 설명

  27. 데모 흐름 설명 : Ionic 앱

  28. 데모 흐름 설명 : 어드민

  29. Step Functions 트랜잭션 처리

  30. 주문 성공 / 트랜잭션 성공 주문 트랜잭션 완료 (주문 성공)

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

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

    어떠한 이유로 이벤트 처리 실패 주문 트랜잭션 완료 (주문 실패) 결제 취소 + 배송 요청 취소 + 주문 취소
  33. 트랜잭션이 실패한다면?

  34. 트랜잭션이 실패한다면?

  35. 트랜잭션이 실패한다면? Step Functions 의 상태 변화를 모니터링해서 실패한 트랜잭션이

    발생 시 즉시 대응할 수 있도록 구성하는 것이 중요!
  36. 데모 코드

  37. Github Repository https://github.com/twkiiim/aws-community-day-2020-demo

  38. 발표 내용 정리

  39. 정리: 오늘 이야기한 것들 • Step Functions 를 활용한 분산

    트랜잭션 처리도 고려해보자 • AppSync 와 Direct Lambda Resolver 조합을 눈여겨보자 • 데모 프로젝트의 AWS CDK 샘플 코드는 챙겨놓자
  40. 발표에서 다룬 서비스들에 대해 더 자세히 알아보고 싶으신 분들께

  41. None
  42. None
  43. None
  44. None
  45. None
  46. 감사합니다