애플리케이션에서 사용한 코드 및 환경

Nest.js, TypeScript

 

app.servicr.ts

import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHealthCheck(): string {
    return 'Success Health Check';
  }
}

 

app.controller.ts

import { Controller, Get, HttpCode } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get('/health')
  @HttpCode(200)
  getHealthCheck(): string {
    return this.appService.getHealthCheck();
  }
}

ELB ?

어플리케이션에 들어오는 트래픽을 자동으로 여러 EC2 instance 에 균형있게 분배하여 주는 서비스다.

부가적인 기능으로 SSL/TLS 인증서도 제공한다.

 

ELB 를 도입하면 아래와 같은 방식으로 요청이 EC2 에 전달된다.

  • 사용자 -> ELB -> EC2

SSL/TLS ?

Secure Socket Layer/ Transport Layer Security

HTTP 를 HTTPS로 바꾸어주는 인증서

 

  • 필요한 이유
    • 웹 사이트 사용자 간에 신뢰 관계를 설정한다.
    • 클라이언트와 웹 서버만 전송된 데이터를 볼 수 있다.
    • HTTPS 인증을 받은 웹사이트가 백엔드 서버와 통신하려면, 백엔드 서버주소도 HTTPS 인증을 받아야 한다.
  • 이점
    • 개인 데이터 보호
    • 고객 신뢰 강화
<인프런 강의 정리>  비전공자도 이해할 수 있는 AWS 입문/실전

 

1. 왼쪽 상단에 첫번째로 있는 코드모양의 아이콘을 클릭 

 

2. 데이터베이스 종류 중에서 RDS 에서 데이터베이스를 만들 때 선택한 타입을 선택

 

3. 정보입력

  1. Server Host
    • RDS 에서 생성한 데이터베이스에 있는 엔드포인트(데이터 베이스 주소)를 입력 
  2. Username 과 Password
    • 설정한 마스터 사용자 이름과 암호를 입력
  3. 연결이 잘되는지 Test Connection 눌러서 확인

 

4. 생성된 항목에서 DataBases 폴더에 새로운 데이터 베이스 생성

  1. 정보입력
    • Database name : 원하는 이름을 입력
    • Charset: utf8mb4 
      • 문자 인코딩 스타일을 셋팅 하는 부분
      • utf8mb4은 이모지까지 인코딩 가능
    • Collection : utf8mb4_unicode_ci
      • 정렬을 하는 방식을 선택하는 부분
      • 선택한 방식을 사람들이 많이 사용

 

 

 

<인프런 강의 정리>  비전공자도 이해할 수 있는 AWS 입문/실전

RDS 에 접속

  1. 데이터베이스 생성
  2. 데이터 베이스 생성 방식 → 표준 생성
  3. 엔진 옵션 → MySQL 
  4. 템플릿 → 프리 티어
  5. DB 클러스터 식별자에 db 이름 설정
  6. 마스터 사용자 이름 설정
    • 로그인 아이디와 같은 역할
  7. 마스터 암호
    • 로그인 암호와 같은 역할
  8. 연결 메뉴에서 퍼블릭 액세스 “예” 선택

보안 그룹 설정

  1. EC2 로  이동 하여 보안그룹 메뉴 선택
  2. 보안 그룹 생성
  3. 보안 그룹 이름 및 설명 작성
  4. 인바운드 규칙 설정
    • 유형 : MYSQL/Aurora
    • 대상 : Anywhere- IP4
  5.  보안 그룹 생성
  6. RDS 로 이동하여 DB 인스턴스 클릭
  7. 생성한 데이터베이스를 클릭하고 수정
  8.  연결 - 보안그룹 에서 방금 생성한 보안 그룹만 선택하고 저장

파라미터 그룹 생성

  1. 자신이 사용하는 엔지유형 선택 ( MySQL Community )
  2. 파라미터 그룹 패밀리 (RDS 에서 데이터 베이스 생성시 적용된 버전 선택, mysql 8.0)
  3. 원하는 파라미터 그룹 이름을 작성후 생성
  4. 생성 된 파라미터 그룹 편집
    1. Charater -> utf8mb4  로 값을 설정하여 한글과 이모티콘등을 포함할 수 있도록 설정
      • 변경할 항목
        • character_set_client
        • character_set_connection
        • character_set_database
      • character_set_filesystem
    2. collation ->  문자를 정렬하는 규칙을 utf8mb4_unicode_ci 를 값으로 설정
      • 변경할 항목
        • collation_connection
        • collation_server
    3. time_zone -> 데이터를 저장할 때 우리나라시간으로 설정 Asia/Seoul
      • 변경할 항목
        • time_zone
  5. 설정한 값이 적용되도록 데이터베이스 재부팅

1. EC2 세팅하기 - 기본 설정

  1. 이름 및 태그 : 컴퓨터가 어떤 역할을 하는지 알 수 있게 작성
    • instagram-server
  2. Application and OS Images ( Amazon Machine Image)
    • Ubuntu 선택 - 프리 티어 선택가능한 버전으로
      • 선택이유 : 가장 가벼운 OS
  3. Instance 유형 : 컴퓨터 한대의 사양
    • 프리 티어에 해당하는 t2.micro를 사용
  4. 키 페어 (로그인)
    • 빌린 컴퓨터에 접속할 때 사용하는 비밀번호
      • 옵션 선택
        • 유형 : RSA
        • 프라이빗 키 파일 형식 : .pem
      • 설정 후 받은 파일은 접속할 때 필요하므로 꼭 보관

2. EC2 세팅하기 - 보안그룹 설정

  1. 네트워크 설정
    • 편집 → Firewall (security groups)을 설정
      • 외부와 내부에서 발생하는 트랙픽에서 어떤 트래픽을 허용할지 설정하는 것
  2. Inbound traffic ( 외부 → EC2 instance로 접근하는 트래픽)
    • 규칙 1 : ssh - 22번 포트 - 위치무관
      • ssh는 원격 접속을 위한 용도
      • 위치무관이라는 것은 모든 요청을 보내는 ip를 허용한다는 것
    • 규칙 2 : HTTP - 80번 포트 - 위치무관
    • 규칙 3: HTTPS - 433번 포트 - 위치무관
    • 규칙 3: custom TCP - 3000번 포트 - 위치무관

3. EC2 세팅 하기 - 스토리지 구성

  1. 스토리지 구성 - volume
    • EBS (Elastic Block Storage) : EC2 안에 부착되어 있는 일종의 하드디스크
  2. 셋팅
    • 30 GiB - gp3 : 가성비 및 프리 티어에서 제공해 주는 용량 선택
      • 추후에 증가 가능
    1. EC2 접속하기
    • 생성된 인스턴스 정보 해석
      • 퍼블릭 IPv4 주소 ( EC2 인스턴스가 생성되면서 부여받은 IP 주소)
        • EC2 인스턴스에 접근하기 위한 IP 주소
      • 인스턴스 상태 ( 현재 컴퓨터의 상태 설명)
        • 컴퓨터 켜짐 : 실행 중
        • 주의 : 종료 - 해당 EC2 인스턴스를 삭제한다는 의미, 취소 불가능
    • EC2에 접속하기
      • 인스턴스에 연결 - EC2 instance Connect을 사용하여 연결 선택

4. ssh 클라이언트로 EC2 접속하기

ssh -i "생성한-key-pair-파일.pem" ubuntu@ec2-3-36-70-252.ap-northeast-2.compute.amazonaws.com
  • 위 명령어는 생성한 key pair이 있는 곳에서 실행 
  • -i : 'identity file'을 의미
    • 사용자가 서버에 접속할 때 사용할 특정한 개인 키 파일을 지정하는 데 사용
  • 파라메터 : "ddota-key-pair.pem"
  • 접속위치 : ubuntu@ec2-3-36-70-252.ap-northeast-2.compute.amazonaws.com
  • 의미:
    • 원격으로 파라메터에 있는 파일을 이용하여서 접속위치에 접속을 한다.
      • 파마메터: 비밀번호
      • 접속위치: 리눅스 컴퓨터

5. 탄력적 IP 연결하기

  • 탄력적(Elastic) IP : EC2 인스턴스를 잠시 중지시키고 다시 실행시켜도 IP 가 변하지 않도록 하는 기능
    • ip의 부족현상으로 인해 만들어진 시스템
    • 인스턴스를 중지시키면 이전에 할당받은 ip가 삭제되므로 탄력적 ip를 이용하여 고정 ip 주소를 획득
  • 연결방법
    • Elastic IPs 메뉴 선택 
    • 할당받은 ip 주소를 클릭  -> Associate Elastic IP address 클릭 -> 원하는 Instance 선택

6. Express 서버를 EC2에 배포하기

  • node.js 설치 : 만든 앱에서 적용된 node.js 버전에 맞게 설치
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - &&\sudo apt-get install -y nodejs

 

  • Github으로 해당 레포지토리 clone 하기
$ git clone 깃허브-레포지토리-HTTPs주소 
$ cd 복사된-레포지토리-폴더이름
$ npm i

 

         npm i 의미 → package.json 에 있는 라이브러리를 설치!!

  • pm2 설치해서 서버 실행시키기
$ sudo npm i -g pm2 
$ sudo pm2 start app.js

 

7. Nest.js로 만든 애플리케이션 배포하기

  • git hub에서  해당 레포지토리 클론
  • node.js 설치
  • pm2 설치
  • nest.js 설치
$ sudo npm i -g @nestjs/cli
  • ( 레포지토리가 복사된 폴더로 이동)
    • pacakge.json 에 있는 라이브러리 설치
    • 애플리케이션 bulild
$ npm i
$ npm run build

    - Clone 한 폴더에 dist라는 폴더가 생성된다.

 

  •  추가로 필요한 .env.prod 파일을 생성
    • 애플리케이션 작성 시 설정했던 정보를 Production 모드에 맞게 입력.

 

추가 정보

  • 현재 주소 확인 명령어 : curl ifconfig.me
  • pm2 명령어
pm2 list //실행중인 앱 리스트 확인
pm2 logs 0 // id 0 앱에 관련된 로그 확인
pm2 stop 0 // id 0 앱 중지
pm2 delete 0 // id 0 앱 삭제
pm2 kill  //  pm2 를 종료

 

+ Recent posts