MSA 프로젝트 -3

박형석·2022년 5월 5일
0

프로젝트

목록 보기
4/4
post-thumbnail

Git


step-1-factory-api-doc

목표: 공장 api REST API 문서 배포를 자동화 하기

openapi.yamlredoc-cli로 빌드해서 EC2로 배포를 해보자. 근데 변경사항이 생길 때 마다 수동으로 배포를 하면 효율성이 많이 떨어지게 된다. 그래서 쉘 스크립트로 배포를 자동화 해보자.

1. EC2생성

  1. ubuntu 18 LTS 이미지를 사용하여 EC2를 생성하였다.

  2. 보안그룹 인바운드 규칙에 HTTP를 추가하자.

  3. 이제 접속하여 환경구축을 해주자(컨테이너를 이용해 공장 API를 배포할 계획)

  • ssh -i "hengsgg-naver.pem" ubuntu@ec2-13-125-148-94.ap-northeast-2.compute.amazonaws.com .pem키가 있는 위치에서 명령어를 실행시켜준다.
  • 접속이 되었으면 sudo apt update, sudo apt install docker.io를 실행시켜 도커를 설치한다.
  • 그리고 docker라는 이름의 디렉토리를 하나 생성하여 준다.mkdir docker

2. index.html 생성

openapi.yaml을 빌드하기 위해서 redoc-cli를 실행한다.
1. npm i -g redoc-cli
2. redoc-cli build openapi.yaml
3. mv redoc-static.html index.html

이제 배포 할 index.html파일이 생성되었다.

3. script 작성

#!/bin/sh

redoc-cli build openapi.yaml

rm -rf index.html

mv redoc-static.html index.html

# 여기까지 로컬에서 실행되는 스크립트

scp -i "/Users/baghyeongseog/keypair/hengsgg-naver.pem" index.html ubuntu@ec2-13-125-148-94.ap-northeast-2.compute.amazonaws.com:~/docker

scp -i "/Users/baghyeongseog/keypair/hengsgg-naver.pem" Dockerfile ubuntu@ec2-13-125-148-94.ap-northeast-2.compute.amazonaws.com:~/docker

ssh -i "/Users/baghyeongseog/keypair/hengsgg-naver.pem" ubuntu@ec2-13-125-148-94.ap-northeast-2.compute.amazonaws.com 'sudo docker build ~/docker -t server'

ssh -i "/Users/baghyeongseog/keypair/hengsgg-naver.pem" ubuntu@ec2-13-125-148-94.ap-northeast-2.compute.amazonaws.com 'sudo docker rm -f server'

ssh -i "/Users/baghyeongseog/keypair/hengsgg-naver.pem" ubuntu@ec2-13-125-148-94.ap-northeast-2.compute.amazonaws.com 'sudo docker run -d -p 80:80 --name server server'

# 여기까지 EC2에서 실행되는 스크립트

EC2에 접속할 때 ssh -i "hengsgg-naver.pem" ubuntu@ec2-13-125-148-94.ap-northeast-2.compute.amazonaws.com와 같은 ssh명령어를 입력하면 접속이 되는데 로컬에서 실행 결과만알고 싶을 때는 앞에 명령어 뒤에 '실행할 명령어'를 붙히면 실행 결과만 가져올 수 있다.

이제 저 스크립트를 실행시키면 다음과 같은 결과가 나온다.

잘 배포가 되었는지 확인해 보자.

잘 배포가 되었다.

하지만 중요한건 로컬에서 변경한 파일이 작 적용되는지가 중요하기 때문에 Factory-api 버전을 1.1.1로 변경하여보자


잘 변경된다!!


step-2-new-product-event

목표: 공장서버의 콜백 메시지를 받아 재고를 추가하는 람다를 구현하기

이제 api도 생겼고 데이터베이스와 람다까지 있으니 공장에서 생성된 재고를 데이터베이스에 추가하는 과정을 만들 것이다.

service: aws-node-stock-add
frameworkVersion: '3'

provider:
  name: aws
  runtime: nodejs14.x
  region: ap-northeast-2

  environment:
    PASSWORD: dxx_user_secret
    HOST_RDS: project3-db-for-xxxxxxx.xxxxxxx7ewnt.ap-northeast-2.rds.amazonaws.com
    USER_RDS: dob_uxxx_c-3
    DATABASE_RDS: xxxxxxxx-3

functions:
  api:
    handler: index.handler
    events:
      - httpApi:
          method: post
          path: /send
          

plugins:
  - serverless-lift

serverless.yaml로 배포를 하면 트리거httpApi: post인 함수가 배포가 된다.

배포된 함수가 실행된 결과는 다음과 같다.

이 함수가 실행되는 과정은

  1. 구매자가 구매요청을 하면 API GATEWAY를 통해 aws-node-sell-request 함수가 실행된다.
  2. 람다함수는 Database에서 재고를 조회하여 재고가 있다면 구매자에게 판매를 하고 만약 없다면 SNS로 알림을 보내게 된다.
  3. SNS를 구독하고 있는 SQS에게 큐가 생성되면 aws-node-post-stockEmpty함수가 실행된다. 만약 람다함수에게 전달되지 못하면 SQS-DLQ로 큐가 이동하여 관리자가 조회하여 처리하게 된다.
  4. aws-node-post-stockEmpty함수가 실행이 된다면 공장API로 요청이 전송된다.
  5. 요청을 받고 공장에서 생산을 하게 되면 aws-node-stock-add함수가 실행이 된다.
  6. 람다함수가 데이터베이스에 생산된 수량을 추가한다.
  7. 구매자는 다시 구매가 가능하다.

글로보면 무슨말인지 나도 몰라보겠다..

하지만 우리에겐 다이어그램이 있기 때문에 한 눈에 이해가 될 것이다.

서비스 추가

만약 위의 서비스에 다른 서비스를 추가하고 싶다면 다른 SQS를 이용하여 메시지 큐에 기반한 마케팅, 광고 등등 다양한 서비스를 추가할 수 있다.

하지만 위와같은 서비스가 하나의 코드 즉, 모놀리식 아키텍쳐였다면 서비스를 추가하는게 정말 어려운 일 일것이다. 마이크로서비스를 구성해 봄으로써 느슨한 연결과 서비스의 확장에 관한 영향을 잘 알게 되었다. 기업들이 MSA에 열광하는 이유가 이런 점 때문이 아닐까?

마무으리

프로젝트를 진행하면서 '나' 혼자 진행한 것은 아니다. 하지만 '모두'가 이 시스템을 구성하는 것을 이해하고 잘 배포를 해보아야 하기 때문에 각자의 인프라에 구성을 하였다. 구성하는 과정에서 나도 이해가 잘 안되고 어려운 부분이 있어서 잘 따라오지 못하는 팀원에게 도움을 많이 주지 못해서 아쉬운 마음이 들었다.
일일이 알려주기에는 시간이 부족하여 어쩔 수 없었지만 나의 실력이 늘면 그만큼 여유가 생거 다른사람에게 도움을 줄 수 있는 사람이 되지 않을까 기대해본다..

profile
Better Than Yesterday

0개의 댓글