6 프로덕션 배포

6.1 서비스 아키텍처

6.1.1 EC2 (Elastic Compute Cloud)

  • 컴퓨터

6.1.2 라우트 53 - DNS

  • DNS

    • 도메인 이름과 주소를 매핑해 놓은 시스템

one of many DNS is Route 53

  • ISP (Internet Service Provider)

6.1.3 애플리케이션 로드 밸런서

  • 로드밸런서

    • 연결된 여러 서버의 트래픽을 균형있게 처리하도록 도와줌

    • 즉 트래픽을 서버에 적절히 분배

6.1.4 오토 스케일링 그룹

  • 오토 스케일링 그룹 (ASG)

    • 자동으로 스케일 해 줌

    • ASG에 min, max, desired 인스턴스 수 정할 수 있음

    • 트래픽 변동에 따라 자동으로 스케일 인 또는 스케일 아웃 해줌

6.1.5 VPC와 서브넷

  • VPC

    • 독립된 가상의 네트워크

    • 특별한 설정을 하지 않는 이상 이 네트워크 안에서 생성되는 EC2는 외부에서 접근 못함

    • VPC 안에는 서브넷이라는 여러 개로 쪼개진 네트워크가 존재

      • 우리는 VPC의 한 서브넷 내에 EC2 서버를 생성할 거임

6.1.6 일라스틱 빈스톡

  • 일라스틱 빈스톡

    • 환경 구축을 대신 해주는 서비스

    • 일라스틱 빈스톡에게 필요한 리소르들을 말해주면 일라스틱 빈스톡이 알아서 구축하고 실행해줌

IaC (Infrastructure as Code) : 파일에 코드로 인프라를 묘사하고 서비스가 이를 반영해 인프라를 구축하는 것

6.2 AWS와 EB CLI 설치

6.2.1 AWS 계정 생성

  • AWS 리소스에 접근하는 방법

    • [x] AWS 콘솔

    • [x] AWS DLI

    • [ ] AWS SDK

6.2.2 파이썬 설치

6.2.3 AWS CLI 설치

6.2.4 AWS CLI 설정

6.3.5 pip를 이용해 EB CLI 설치

6.2.6 윈도우 사용자를 위한 환경 변수 설정

6.3 AWS의 일라스틱 빈스톡을 이용한 백엔드 배포

6.3.1 일라스틱 빈스톡이란 ?

6.3.2 eb init 을 이용해 애플리케이션 생성

6.3.3 백엔드 애플리케이션 설정

application-prod.yaml

build.gradle

HealthCheck API

target jar 설정

./elasticbeanstalk/config.yml 설정

6.3.4 eb create를 이용해 AWS에 환경 생성

6.3.5 애플리케이션 배포

6.3.6 환경 구성

6.3.7 엔드포인트 테스팅

6.3.8 프론트엔드 통합 테스팅

6.4 AWS의 일라스틱 빈스톡을 이용한 프론트엔드 배포

6.4.1 eb init을 이용해 애플리케이션 생성

6.4.2 eb create를 이용한 애플리케이션 배포

6.4.3 크로스-오리진 문제

6.5 Route 53 도메인 설정

인증과 인가를 구현할 때 JWT는 반드시 HTTPS와 사용해야 한다.

HTTPS 인증서를 받기 이전에 도메인을 구입해야 하는데, 인증서는 자기 자신이 소유한 도메인에 대해서만 추가할 수 있기 때문이다.

6.5.1 도메인 구매

  • Route 53

    • 도메인과 호스팅 관리를 도와주는 서비스

  1. AWS console → Route 53

  2. 도메인 등록

  3. 도메인 구매

6.5.2 호스팅 영역 생성

  1. AWS console → Route 53 → 왼쩍 탭에서 호스팅 영역 추가

  2. 구매한 도메인 이름 기입하고 호스팅 영역 생성 버튼 클릭

호스트 영역

  • DNS 영역 파일

  • DNS 영역이란 DNS spdlatmvpdltm wmr, <도메인 이름>이 관리할 영역

  • DNS 영역을 생성하는 이유는 여러 개의 레코드를 한 곳에서 관리하기 위해서임

레코드

  • 이름과 IP를 연결해 놓은 파일 혹은 엔트리

  • 여러 종류가 존재

  • 호스트 영역을 생성하면 SOA와 NS가 각각 하나씩 자도 ㅇ생성

    • SOA (Start of Aututhority) 레코드 : 이 영역을 관리하는 관리자의 정보를 가지고 있음

    • NS (Name Server) 레코드 : 해당 도메인

    • A 레코드 : 해당 도메인으로 프론트엔드 도메인 혹은 백엔드 도메인을 특정 IP 또는 다른 도메인(로드 밸런서의 도메인)으로 연결하는 레코드

서브 도메인 추가 (프론트, 백)

  • 레코드 생성

  • 단순 라우팅 선택

로드 밸런서의 이름은 AWS 콘솔 → EC2 → 로드밸런서에서 확인

6.5.3 백엔드 재배포

  • http://<도메인>, https://<도메인> 추가하연 CORS 문제 해결

6.5.4 프론트엔드 재배포

  • http://<도메인>, https://<도메인> 추가하연 CORS 문제 해결 (프론트, 백)

6.6 백엔드/프론트엔드 AWS Certificate Manager 를 이용한 https설정

6.6.1 인증서 요청

  • AWS console → Certificate Manager

    • 인증서 프로비저닝의 시작하기 또는 인증서 요청

    • 공인 인증서 요청

    • *.<도메인이름> 기입

    • DNS 검증

    • 확인 및 요청

이후 테이블에 검증 보류 상태의 도메인 이름이 추가 된다. 이 레코드를 검증하려면 Route 53에서 레코드를 생성해야 한다.

  • Route 53에서 레코드 생성 버튼을 클릭

6.6.2 백엔드 애플리케이션 HTTPS 설정

  • AWS console → Elastic Beanstalk

  • 환경창 → 백엔드 애플리케이션 → 구성

  • 로드 밸런서 → 편집 → 리스너 추가

  • HTTPS가 있으니 HTTP, 즉 80포트를 비활성화

  • 적용 클릭

6.6.3 프론트엔드 애플리케이션 HTTPS 설정

  • AWS console → Elastic Beanstalk

  • 환경창 → 프론트엔드 애플리케이션 → 구성

  • 로드 밸런서 → 편집 → 리스너 추가

  • HTTPS가 있으니 HTTP, 즉 80포트를 비활성화

  • 적용 클릭

여기까지 ACM으로 SSL 인증서를 만들고 인증서를 로드 밸런서에 추가하였다.

이제 백엔드와 프론트엔드 API 모두 HTTPS로만 접근할 수 있으며, JWT를 네트워크 중간에 누가 가로채로 암호화됐기 때문에 토큰을 사용할 수 없다

Last updated