프로젝트 회고

58일차~61일차 프로젝트3

김영재0412 2022. 7. 13. 13:39

Project - Step 1, 2, 3, 4

 

목표

  • 메시지 큐의 Pub/Sub 패턴과 Producer/Consumer 패턴의 차이를 이해한다
  • DB와 서버와의 통신이 가능하도록 연결한다
  • 특정 상황에서 SNS, SQS로 메세지가 전달되도록 시스템을 구성한다
  • SQS에 들어온 메세지를 레거시 시스템(Factory API)으로 전달하는 시스템을 구성한다
  • 레거시 시스템(Factory API)의 콜백 대상이되는 리소스를 생성해 데이터베이스에 접근 할 수 있게 한다

 

user가 lambda server로 구매 api를 보내면 재고가 있을 시 db에서 주문한 재고만큼 차감 시키고 만약 재고가 없을 시 sns와 sqs를 걸쳐 stock-lambda에 들어가고 stock lambda는 외부의 공장서버에 재고 증가 요청을 보낸다. 외부의 공장서버에서 재고를 만든 후 stock-lambda increase를 통해 재고가 추가되고 db에 들어가게 된다.

 

먼저, serverless를 통해 sales-api를 배포했다.

 

sales-api 코드는 다 제공이 되었으며 디비 또한 제공이 되었다. 배포하게 되면 api gateway와 이어져있는 sales-api-lambda가 만들어지고 저 엔드포인트로 curl을 보내면 get,post가 잘 보내지는 것을 확인할 수 있었다. 그 후 콘솔로 sns-sqs-sqs(dlq)를 만들었고 stock-lambda는 직접 코드를 만들었다.

 

이벤트로 들어온 값에 Record 1번째를 짜르고 제이슨 형태로 파싱해서 해당 값들에 넣어줬다. 콜백 url은 stock-increase 람다이다.

 

저 정보가 담겨져 req로 들어가고 req의 바디의 messageattributeproductcnt가 요청 수량이기에 위에 처럼 코드를 짰다.(일부만)

그럼 디비에 재고가 잘 들어가는 것을 볼 수 있다.

 

위 다이어그램은 우리가 만든 것 + 추가 요청사항을 다이어그램으로 만든 것이다.

 

a. 광고 중단 요청 진행 시나리오

재고가 없는 상황에서도 광고가 계속 진행되고 있습니다. 광고 비용 절감과 고객불만을 낮추기 위한 조치가 필요합니다. 메세지가 유실되는 상황을 막기 위해 내구성을 갖춘 시스템이 필요합니다.

  • 요구사항
    • 재고를 채우기 위한 과정이 진행 될 때 광고 담당자에게 광고 중단 요청 내용을 담은 이메일이 전송되어야합니다.
    • 메세지에 대한 내구성을 강화하기 위해 메세지 Queue가 사용되어야합니다.
    • AWS SES 서비스를 이용해서 이메일을 전송해야합니다.

b. VIP 고객관리 프로세스 추가 시나리오

모니터링 결과 대량 주문을 하는 일부 고객들이 확인되었습니다. 대량 구매 고객들의 사용자 정보를 식별할 수 있어야합니다. 고객정보는 별도의 서버(EC2)와 데이터베이스(RDS)에서 관리되고 있습니다. 데이터베이스 기록과 외부 마케팅 시스템으로의 연결과정의 오류를 대비하기 위한 내구성 갖춘 시스템이 필요합니다.

  • 요구사항
    • 100개 이상 구매가 발생 시 해당 유저의 타입이 normal 에서 Vip로 변경되어야합니다.
    • 메세지에 대한 내구성을 강화하기 위해 메세지 Queue가 사용되어야합니다.
    • 고객관리는 별도의 데이터베이스(RDS)로 관리되고 있기 때문에 해당 데이터베이스에 접근해서 정보를 수정해야합니다.

 

먼저, 광고 중단 요청 진행은 재고가 없을 시 sns에서 광고중단 sqs로 이벤트를 넣고 ses는 큐를 소모할 수 없기에 따로 람다를 붙여 큐를 소모하게 해줬다. 그럼 ses는 광고담당자에게 이메일을 보낸다.

 

다음. vip 고객관리 프로세스는 등급만 normal에서 vip로 바꾸는 것이며 100개 이상 구매요청이 들어올 시 sqs를 이용해 람다에 보내고 람다랑 rds는 잇지 못하기에 ec2를 붙여 rds을 연결해준다. 그럼 rds에 고객정보가 들어가있을거고 ec2를 통해 접속해 고객등급을 바꾼다.

 

 

 

이제 위에 추가요구사항을 뺀 나머지를 테라폼으로 구현해봤다.

 

api gateway.tf
lambda.tf
lambda role.tf  // main.tf
s3.tf
sqs.tf // sns.tf

'프로젝트 회고' 카테고리의 다른 글

6일차~9일차 풀스택 프로젝트 회고  (0) 2022.11.18
프로젝트3 회고록  (0) 2022.07.13
프로젝트2 회고록  (0) 2022.06.15
프로젝트2  (0) 2022.06.15
프로젝트 1 api  (0) 2022.05.16