Giter VIP home page Giter VIP logo

make.back.onboarding's Introduction

🧑‍💻 MAKE ONBOARDING for BACKEND

메이크 백엔드 신규 입사자 교육을 위한 레포지토리입니다.

🗃 우리 서비스는?


    +---- Front-end ----+    +--------+                                        +-- Auto Scaling Group (Blue)--+         +------+
    |     +-------+     |    |  Fire  |                                        |   +-- EC2 --+   +-- EC2 --+  |         |  S3  +<---+
    |     |  APP  +     +<-->+  Base  |                                   +--->+   | Docker  |   | Docker  |  +<---+    +---+--+    |
    |     +-------+     |    |  Auth  |  +---------+    +-------------+   |    |   +---------+   +---------+  |    |        |       |
    |     +------+      |    +--------+  |  Route  |    | Application |   |    +------------------------------+    |   +----+---+   |
    |     | MAKE |      |     +--------->+    53   +--->+    Load     +---+                                        +<--+  Code  |   |
    |     +------+      |     |  MAKE    |  (DNS)  |    |  Balancer   |   |    +-- Auto Scaling Group(Green)--+    |   | Deploy +<--+
    |    +---------+    |     |          +---------+    +-------------+   |    |   +-- EC2 --+   +-- EC2 --+  |    |   +--------+   |
    |    |  Block  |    |     |                                           +--->+   | Docker  |   | Docker  |  +<---+        Deploy! |
    |    |  Editor |    +---->+                                                |   +---------+   +---------+  |   +--make.functions-++
    |    |  (WEB)  |    |     |  Sales                                         +-------------------+----------+   |    Git Actions   +
    |    +---------+    |     |    +---------+                                                     ^              +------------------+
    |   +-----------+   |     |    |   API   |     +--------+     +--- RDS1 ---+        +--- RDS2 -+-+
    |   | Education |   |     +--->+ Gateway +<--->+ Lambda +<--->+ PostgreSQL |        | PostgreSQL |
    |   +-----------+   |          +---------+     +---+----+     +------------+        +------------+
    |     +-------+     |                      Deploy! |
    |     | Admin |     |                          +---+- sales.functions --+
    |     +-------+     |                          |       Git Actions      |
    +-------------------+                          +------------------------+

💡 본 미션을 진행하기전 IAM 계정을 발급받았는지 확인해주세요.

⚽️ MAKE Mission 1

간단한 서버를 올려보자

본사의 서비스는 AWS의 클라우드 인프라를 활용하여 구축하고 있습니다.
MAKE의 서버아키텍처를 직접 만들어볼까요?

Mission 1 아키텍처


+---------+    +-------------+    +----------+    +---EC2----+
|  Route  |    | Application |    |  Target  |    |          |
|    53   +--->+    Load     +--->+  groups  +--->+   App    |
|  (DNS)  |    |  Balancer   |    |          |    |          |
+---------+    +-------------+    +----------+    +----------+

📝 요구사항

[닉네임].make-api.co/hello 로 get 요청을 보내면 "Hello World"로 응답하는 간단한 서버 api를 만들어 봅시다.
최종적으로 위의 Mission 1 아키텍처가 완성됩니다.
  1. 서버 API를 개발합니다.
    1. 서버는 NestJS 또는 원하시는 프레임워크를 사용해도 무방합니다.
    2. /hello GET 요청을 보내면 "Hello World"로 응답하는 API를 개발합니다.
    3. healthy GET 요청을 보내면 200 상태 코드로 응답하는 Health check를 위한 API를 개발합니다.
  2. EC2 인스턴스를 생성하고 서버를 배포합니다.
    1. EC2 인스턴스 이미지는 Ubuntu Server 20.04 LTS를 사용합니다.
    2. 인스턴스 유형은 t2.nano를 사용합니다.
    3. VPC와 서브넷은 각각 make-server::vpcmake-server::public-subnet을 사용합니다.
    4. 보안 그룹은 직접 생성해서 사용합니다.
    5. 그 외 기타 설정은 기본값을 사용하되 필요에 따라 변경할 수 있습니다.
    6. 인스턴스 내부 셋팅은 "밑바닥부터 우분투 서버 셋팅하기"를 참고합니다.
  3. [닉네임].make-api.co 의 형태로 서브도메인을 구성합니다. (ex: danny.make-api.co)
    1. *.make-api.co 도메인에 이미 SSL 인증은 적용되어 있습니다.
    2. 대상그룹에서 위에서 배포한 EC2 인스턴스를 대상으로 등록합니다.
    3. 로드밸런서에서 대상그룹으로 라우팅하도록 설정합니다.
    4. 로드밸랜서를 사용해서 HTTP 요청을 HTTPS로 리디렉션 하도록 리스너 규칙을 설정합니다.

🗝 미션 클리어를 위한 선수지식

  • NestJs (TypeScript)
  • EC2
  • Route53 (DNS)
  • AWS Certificate Manager
  • Elastic Load Balancing (ALB)

🏀️ MAKE Mission 2

무중단 배포와 오토스케일링을 위한 환경을 구성해보자

본사의 서비스는 무중단 배포 자동화와, CPU 사용량에 따른 오토스케일링이 적용되어 있습니다.
원활환 서비스 제공을 위한 환경조성이 목적인데요. 직접 이 환경을 구성해봅시다.

Make Missoin 2-1

Missoin 2-1 아키텍처


                                              +-----------+
                            +-------------->  | S3 bucket |
                            |                 +-----------+
                            |                       |
                            |                       v
   +--------+       +----------------+       +-----------------+        +--------EC2--------+
   | GitHub | ----> | GitHub Actions | ----> | AWS Code Deploy | ---->  | Code Deploy Agent |
   +--------+       +----------------+       +-----------------+        +-------------------+

📝 요구사항

Github Actions와 AWS CodeDeploy를 사용하여 자동 배포를 환경을 구축합니다.
  1. Code Deploy 배포 그룹 설정
    1. Code Deploy에서 onboarding 애플리케이션을 사용합니다. CodeDeploy > Application > onboarding
    2. 서비스 역할은 make-server-codeDeploy-role을 사용합니다.
    3. 배포 유형은 현재 위치를 사용합니다.
    4. 환경 구성은 Missoin 1에서 작업한 EC2 인스턴스를 사용합니다.
    5. 그 외 설정은 기본값을 사용합니다.
  2. Github Action Config
    1. S3 bucket은 make-server-ci-cd 를 사용합니다.
    2. 소스 파일을 배포할 S3의 위치는 s3://make-server-ci-cd/onboarding/ 입니다.
  3. Code Deploy Agent 설치
    1. aws configure 설정은 본인의 IAM 계정을 사용합니다. (권한 요청해주세요.)
  4. Code Deploy 설정 완료
    1. appspec.yml 파일을 작성해 주세요.

Make Missoin 2-2

Missoin 2-2 아키텍처


   +-- Auto Scaling Group (Blue)--+          +------+
   |   +-- EC2 --+   +-- EC2 --+  |          |  S3  +<---+
   +   |         |   |         |  + <---+    +---+--+    |
   |   +---------+   +---------+  |     |        |       |
   +------------------------------+     |   +----+---+   |
                                        +<--+  Code  |   |
   +-- Auto Scaling Group (Green)-+     |   | Deploy +<--+
   |   +-- EC2 --+   +-- EC2 --+  |     |   +--------+   |
   +   |         |   |         |  + <---+                |
   |   +---------+   +---------+  |    +-----------------++
   +------------------------------+    |    Git Actions   +
                                       +------------------+

📝 요구사항

CPU 사용량이 70프로 이상 유지될 경우 오토스케일링을 시작합니다.
AWS CodeDeploy와 오토스케일링을 사용하여 무중단 블루/그린 배포를 환경을 구축합니다.
  1. 오토 스케일링 그룹 생성
    1. Mission 1에서 만든 EC2 인스턴스로 AMI 이미지를 생성합니다.
    2. 시작 템플릿을 생성합니다.
    3. 오토 스케일링 그룹의 네트워크 설정은 Missoin 1과 동일합니다.
    4. 그룹 크기 설정은 최대 용량은 2, 원하는 용량, 최소 용량1로 설정합니다.
    5. 동적 크기 조정 정책을 평균 CPU 사용률 70으로 설정합니다.
  2. Code Deploy 배포 그룹 설정 변경
    1. 배포 유형을 블루/그린 으로 수정 합니다.
    2. 환경 구성은 Amazon EC2 Auto Scaling 그룹 자동 복사를 선택하고 위에서 생성한 오토 스케일링 그룹을 선택합니다.
    3. 배포 설정에서 원본 인스턴스 종료 시간은 5분으로 설정합니다.
    4. 로드 밸런서는 Mission 1에서 설정한 값을 사용합니다.
    5. 그 외 설정은 기본값을 사용합니다.

🗝 미션 클리어를 위한 선수지식

  • Target groups
  • EC2 AMI, 시작 템플릿
  • Auto Scaling
  • CodeDeploy

⚾ MAKE Mission 3

docker를 적용한 환경을 구성해보자

📝 요구사항

🗝 미션 클리어를 위한 선수지식

🏐 MAKE Mission 4

Nestjs로 딴딴한 백엔드 구현하기

📝 요구사항

  • 카일의 NestJS 강의 섹션 4 - 1강 요구사항에 해당하는 프로젝트 개발합니다.

    • DB 또는 ORM은 자유롭게 선택해도 무방합니다.
    • 필요시에 섹션 4 ~ 섹션 6 수강합니다.
    • 프론트엔드 코드는 해당 강의 공지사항을 확인해주세요.

🗝 미션 클리어를 위한 선수지식

  • Typescript

  • NestJS 기본 지식, 웹 레이어 패턴들, DB 기본

🎱️ Bonus Mission

1. Lambda에 API 서버를 올려보자

📝 요구사항

CEO Monday는 개발팀의 고충을 알기 위해 직접 웹사이트를 만들었지만, 사람들이 방문하는지 알 수 없었습니다.
그래서 자신의 사이트에 누군가가 접속을 하면 DB에 기록되는 API가 필요하다고 생각하고 이를 신입 개발자에게 맡기기로 합니다.
  1. nodejs 기반의 serverless framework 템플릿을 구성하고 기본 환경을 배포합니다.
    1. 텝플릿은 aws node js 템플릿을 사용하며, ts로 변경하여 사용해도 됩니다.
    2. 서비스 명은 back-onboarding-[닉네임]으로 지정합니다.
    3. 레포지토리를 따로 마련하여 'develop', 'master' 브랜치를 구성하고, gitflow를 준수합니다.
    4. 오프라인에서 해당 서비스를 실행해보고 정상동작이 될 경우 deploy 합니다.
  2. /connect GET 요청이 들어올 경우 Request 정보를 저장하는 API를 구축합니다.
    1. 템플릿 초기 설정시 만들어진 핸들러를 참고하여 해당 API를 구축해봅니다.
    2. AWS 콘솔은 VPC, Subnet, EIP 등의 생성을 위해서만 사용하고, 서버리스에 관한 세부 설정은 코드에서 처리하도록 합니다.
    3. 환경 변수는 .env, .env.dev, .env.prod 로 분할하여 구성하며, 절대 레포지토리에 업로드 하지 않습니다.
    4. DB는 sales DB의 onboarding-[닉네임]을 사용합니다.
    5. DB 스키마의 형태는 자유롭게 설정합니다.
  3. GitActions 를 이용하여 CD를 구축합니다.
    1. .env파일을 CD 스크립트로 구성합니다.
    2. 환경 변수들은 secrets를 이용하여 저장합니다.
    3. develop 은 dev 스테이지에 master 는 prod 스테이지에 올라가도록 합니다.

2. Lambda에 스케줄러를 올려보자

"오늘 하실건가요?" "뭘요?" 오늘도 Jack은 '금알못(금요일을 알차게 보내는 건 못참지)'을 기억하지 못했습니다.
이쁨을 받고 싶었던 신입개발자는 저번 미션을 기반으로 '금알못'알림이를 만들려고 합니다.
금알못은 매주 금요일 오후 7시에 시작하는 사내 모임입니다. 슬랙으로 10분전에 알림을 주도록 해봅시다.

📝 요구사항

  1. 매주 금요일 KST 오후 6시 50분에 슬랙에 알림이 가는 스케쥴러를 구현합니다.
    1. AWS 콘솔은 배포가 되었는지 확인하는 용도로 사용하고, 세부 설정은 코드상에서 해결하도록 합니다.
    2. 슬랙 알림의 형태는 자유롭게 설정합니다.
  2. 기존에 진행했던 레포지토리에 이어서 핸들러를 구현합니다.
    1. 같은 레포에 구성하되 환경변수는 핸들러에 따라 구분하여 배포하도록 설정합니다.

🗝 미션 클리어를 위한 선수지식

make.back.onboarding's People

Contributors

moosongsong avatar jiwook00 avatar amamov avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.