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

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

Taewoo Kim
October 14, 2020

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

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

Taewoo Kim

October 14, 2020
Tweet

More Decks by Taewoo Kim

Other Decks in Programming

Transcript

  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 샘플 코드는 챙겨놓자