IT STUDY LOG

[SECTION3] <마이크로서비스> 프로젝트 개요 본문

devops bootcamp 4/project log

[SECTION3] <마이크로서비스> 프로젝트 개요

roheerumi 2023. 5. 24. 16:54

# 프로젝트 개요

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를 통해 재고 확보 요청
  5. 데이터베이스(창고) : RDS에 mysql db 구성
    • 요청에 따른 재고 상태 변경


상황

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

 

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

  1. Sales API 를 통해 요청을 받은 서버가 데이터베이스에서 재고 상황을 확인합니다.
  2. 재고가 있다면 감소시키고 응답으로 판매완료 내용을 전달합니다.
  3. 재고가 없는 경우 공장에 주문을 진행합니다
  4. 재고가 없다는 내용을 담은 메세지 페이로드와 함께 SNS topic이 생성됩니다.
  5. 메시지가 SQS로 구현된 stock_queue에 수신됩니다.

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

  1. 빈번한 요청으로 메시지 누락이 발생합니다.
  2. SQS에서 처리완료되지 않은 메시지들을 체계적으로 관리할 dead_letter_queue를 생성해야합니다.
  3. stock_queue와 dead_letter_queue를 연결합니다.

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

  1. 안정적으로 이벤트가 전달 될 수 있는 시스템을 구축해야합니다.
  2. stock_queue 의 메시지를 소비하는 stock_lambda에 의해 Factory API가 호출됩니다.
  3. Factory의 생산 완료 메시지를 수신한 stock_inc_lambda가 DB에 상품 재고를 증가시킵니다.
 
Comments