프로젝트3

(1) 프로젝트 3: 마이크로서비스 개요

FYE 2023. 2. 18. 19:26

 

Achievement Goals

  • AWS 클라우드 환경을 기반으로 하는 느슨하게 연결된(loosely coupled) 애플리케이션 아키택처에 대한 이해

Bare minimum

  • Serverless 를 이용한 메세지 대기열 활용 이해 및 구현
  • 요구사항에 따른 애플리케이션과 인프라 구현
  • 문제사항 해결을 위한 추가 리소스 생성 → DLQ, Legacy 시스템 성능문제 해결, SES
  • 아키택처 다이어그램 제작

Advanced

  • 인프라 관리와 재사용성을 위한 IaC 활용 → Terraform을 통한 리소스생성

 

 

 

<자동 재고 확보 시스템>을 위한 MSA

시나리오

<도넛-스테이츠>는 온라인으로 도너츠를 판매합니다. 웹사이트를 통해서 주문 버튼을 누르는 것으로 구매(Sales API)가 가능합니다. 창고에 재고가 있다면 재고가 감소하고 구매가 완료됩니다. 유튜브스타 hoyong.LEE가 도넛-스테이츠의 도너츠가 맛있다고 영상을 올렸습니다. 그를 따르는 데브옵스 수강생들이 몰려듭니다. 주문이 급등합니다. 창고에 재고가 없기 때문에 구매가 불가능한 경우가 발생합니다. 창고의 도너츠 재고가 다 떨어지면 제조 공장에 알려서 다시 창고를 채우는 시스템을 구축해야합니다. 제조 공장인 <팩토리-스테이츠>에 주문을 요청(Leagcy Factory API)할 수 있습니다. 주문이 요청되면 일정 시간이 지난 후 창고에 재고가 증가합니다.

 

 

 

구성 요소

1. Sales API

2. Factory API

3. 프론트엔드(웹사이트) : cURL / postman / k6 등을 통한 API 호출로만 구현

  • Sales API를 통해 백엔드에 요청

4. 백엔드(서버) : 구매 시 창고에서 재고 확인 후 재고 감소 로직 구현

  • 재고가 부족할 경우 Factory API를 통해 재고 확보 요청

데이터베이스(창고) : RDS에 mysql db 구성

  • 요청에 따른 재고 상태 변경

 

 

 

상황

비효율적인 레거시 시스템 때문에 고객의 불만사항이 접수되고 있습니다. 제품별 재고부족 요청이 빈번하게 발생되고 있지만 전달 과정에서 지연과 누락 등 문제 상황이 발생하고 있습니다. 안정적으로 요청이 전달 될 수 있도록 시스템을 개선해야합니다. 비정상적으로 처리된 요청의 경우 운영팀에 상황을 알려야합니다.

 

 

 

 

요구사항 1 : 재고부족으로 인한 구매실패에 대한 조치

  1. Sales API 를 통해 요청을 받은 서버가 데이터베이스에서 재고 상황을 확인합니다.
  2. 재고가 있다면 감소시키고 응답으로 판매완료 내용을 전달합니다.
  3. 재고가 없는 경우 공장에 주문을 진행합니다
  4. 재고가 없다는 내용을 담은 메세지 페이로드가 주제별로 생성됩니다.
  5. 메세지가 느슨하게 연결된 시스템을 통해 처리될 수 있도록 따로 보관됩니다.

요구사항 2 : 메세지 누락 상황에 대한 조치

  1. 빈번한 요청으로 메세지 누락이 발생합니다.
  2. 메세지가 처리되지 않은 경우 메세지들을 체계적으로 관리할 다른 처리 공간을 생성해야합니다.
  3. 메시지 처리 보관 리소스와 처리되지 않은 메세지 처리 리소스가 연결되어야합니다.

요구사항 3 : Legacy 시스템(Factory → Warehouse) 성능문제에 대한 조치

  1. 안정적으로 이벤트가 전달 될 수 있는 시스템을 구축해야합니다.
  2. 메세지를 소비하는 리소스를 통해 Factory API가 호출됩니다.
  3. 수신된 메세지에 의해 트리거가 된 컴퓨팅 리소스가 상품 재고를 증가시킵니다.