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. 온라인 주문 서비스를 서버리스
    아키텍쳐로 구축하기
    김태우 / Solutions Architect, Classmethod

    View full-size slide

  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/

    View full-size slide

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

    View full-size slide

  4. 스포일러 주의!
    본 발표는 좌측
    블로그의 내용과
    매우 유사한 내용을
    다룹니다
    BUT!!
    아키텍쳐의 전제에 몇가지 변화를 주어
    아키텍쳐 및 데모코드를 상당부분 변경하였으니
    이미 포스팅을 읽으셨던 분들도
    재밌게 시청하실 수 있을거라 기대합니다 :)

    View full-size slide

  5. 한가지 더 주의!
    본 발표의 데모 아키텍쳐는 서버리스 상에서
    분산 트랜잭션 처리를 위한 “아이디어” 를
    제시하기 위한 용도로 제안하였으며, 실제
    서비스에 적용하기 위해서는 반드시 다양한
    관점에서 검토를 선행할 것을 적극 권장합니다.

    View full-size slide

  6. 본 발표가 끝나면 얻어갈 수 있는 것
    • 서버리스 환경에서 분산 트랜잭션 처리는 어떻게
    할 수 있을까요?
    • 서버리스 환경에서 쉽게 실시간 통신을 구현할 수
    있는 방법은 없을까요?
    • AWS CDK 가 좋다던데 샘플 코드가 너무 부족한
    것 같은데요

    View full-size slide

  7. 본 발표에서 다루지 않는 것
    • 분산 트랜잭션의 일반적인 처리기법에 대한 자세한 설명
    • AWS Step Functions 에 대한 자세한 설명
    • GraphQL 개념 및 AWS AppSync 에 대한 자세한 설명
    • AWS Amplify 에 대한 자세한 설명
    • AWS Lambda 에 대한 자세한 설명
    • Amazon DynamoDB 에 대한 자세한 설명

    View full-size slide

  8. 서버리스 분산 트랜잭션 처리방법

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  11. 트랜잭션이란?

    모든 태스크가 전부 성공하던지

    모든 태스크가 전부 실패하던지

    그 외의 상태는 용납하지 않음

    View full-size slide

  12. 트랜잭션 처리
    • 모놀리식 아키텍쳐에서는
    데이터베이스 레벨에서 트랜잭션
    제어
    • session.flush() 및 session.commit()
    등을 통해 비교적 간단히 트랜잭션
    구현이 가능했음

    View full-size slide

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

    View full-size slide

  14. Distributed Sagas
    Distributed Sagas: A Protocol for Coordinating
    Microservices - Caitie McCaffrey - JOTB17

    View full-size slide

  15. Distributed Sagas

    마이크로서비스 간의 조율을 위한
    프로토콜 (구현체가 아님)

    Saga Execution Coordinator (SEC)
    와 Saga Log 가 구현의 핵심

    View full-size slide

  16. Distributed Sagas
    Excepted from Distributed Sagas: A Protocol for Coordinating Microservices - Caitie McCaffrey - JOTB17

    View full-size slide

  17. 데모에서 사용된 AWS 서비스

    View full-size slide

  18. AWS Step Functions

    서버리스 워크플로우 관리 서비스

    SEC 와 Saga Log 의 기능으로도 활용 가능

    단, State 변경횟수로 과금되므로 비용 대비
    효과를 잘 고려하여 사용할 것을 권장

    View full-size slide

  19. AWS AppSync

    서버리스 GraphQL 서비스

    최근에 서포트된 Direct Lambda Resolver
    로 인해 앞으로 많이 활용될 서비스로 예상

    GraphQL 의 실시간 업데이트를 위한
    Subscription 기능 지원

    View full-size slide

  20. AWS Amplify
    • 클라이언트 개발자가 쉽고 빠르고 효과적으로
    AWS 환경을 구축 및 개발, 활용할 수 있도록
    도와주는 SDK, CLI 및 콘솔환경을 제공
    • 본 데모에서는 amplify codegen 을 통해 AppSync
    API 코드를 생성 및 생성된 코드를 활용

    View full-size slide

  21. AWS CDK

    AWS 리소스를 범용 프로그래밍 언어로
    작성, 배포, 관리할 수 있도록 해주는 도구

    AWS Cloud Development Kit 의 약자로,
    AWS 뿐만 아니라 GCP 나 Azure, 그리고
    Kubernetes 까지 지원

    View full-size slide

  22. 데모 프로젝트 소개

    View full-size slide

  23. 데모 시연

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  26. 데모 흐름 설명

    View full-size slide

  27. 데모 흐름 설명 : Ionic 앱

    View full-size slide

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

    View full-size slide

  29. Step Functions 트랜잭션 처리

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  32. 결제처리 실패 / 트랜잭션 성공
    결제처리가 완료되었다는 이벤트 수신
    But 어떠한 이유로 이벤트 처리 실패
    주문 트랜잭션 완료 (주문 실패)
    결제 취소 + 배송 요청 취소 + 주문 취소

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  35. 트랜잭션이 실패한다면?
    Step Functions 의 상태 변화를 모니터링해서
    실패한 트랜잭션이 발생 시 즉시 대응할 수 있도록 구성하는 것이 중요!

    View full-size slide

  36. 데모 코드

    View full-size slide

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

    View full-size slide

  38. 발표 내용 정리

    View full-size slide

  39. 정리: 오늘 이야기한 것들
    • Step Functions 를 활용한 분산 트랜잭션 처리도
    고려해보자
    • AppSync 와 Direct Lambda Resolver 조합을
    눈여겨보자
    • 데모 프로젝트의 AWS CDK 샘플 코드는 챙겨놓자

    View full-size slide

  40. 발표에서 다룬 서비스들에 대해
    더 자세히 알아보고 싶으신 분들께

    View full-size slide

  41. 감사합니다

    View full-size slide