[AWS] Part8. 배포부터 서비스구성까지

MINJI·2024년 10월 29일

☁️ AWS 클라우드

목록 보기
8/14
post-thumbnail

⭐ SpringBoot 구성

1. SpringBoot란?

자바 기반의 프레임워크인 Spring Framework를 간편하게 사용할 수 있도록 돕는 도구
복잡한 Spring 설정을 자동화하고, 신속하게 독립형 애플리케이션을 개발할 수 있음

2. 종합실습

전체적인 구성도

개발 항목 및 순서

1) 백엔드 모듈 구성
2) Elasticbeanstalk 구성
3) s3 구성
4) React 구성(가볍게)
5) RDS 구성
6) VPC 구성
7) 도메인 구성
8) SSL 구성
9) CI/CD 구성

Gradle을 사용하여 Java 파일 만들기

https://velog.io/@tengury5/Gradle-설치-프로젝트-생성-Java-파일-추가


⭐ VPC 구성

1. VPC 란?

Amazon VPC (Virtual Private Cloud)
AWS에서 사용자가 가상 네트워크를 구성하여 자원을 안전하게 배포할 수 있도록 제공하는 서비스

2. 새 프로젝트만을 위한 VPC 생성

  • VPC 생성 -> VPC 등 선택 -> 이름 설정, 가용영역 설정(2개, a랑 c로 하는걸 추천)

  • 퍼블릭2개, 프라이빗2개, NAT게이트웨이 1개의 AZ에서 -> VPC 생성


⭐ Elastic Beanstalk 구성

1. Elastic Beanstalk이란?

애플리케이션을 쉽게 배포, 관리 및 확장할 수 있도록 돕는 AWS의 관리형 서비스
애플리케이션에 필요한 인프라(서버, 데이터베이스, 네트워킹 등)를 자동으로 설정하고 관리

2. Elastic Beanstalk 환경 생성

  • Elastic Beanstalk 대시보드 -> 환경 -> 환경 생성 클릭 -> 환경 구성 설정하기


  • 인스턴스 퍼블릭 활성화, private 서브넷 2개 선택

  • 데이터베이스 private 서브넷 2개 선택

  • 루트 볼륨 범용3 선택 후 환경 생성

3. EC2 인스턴스 생성

Amazon EC2 (Elastic Compute Cloud)
AWS에서 제공하는 클라우드 기반의 가상 서버 서비스

  • 인스턴스 이름 입력(bastonhost)

  • vpc, 서브넷(퍼블릭), 퍼블릭 활성화 -> 생성


⭐ 콘솔접속

1. 기본 개념

  • Baston Host : 퍼블릭 서브넷에 위치하며 외부에서 접속할 수 있는 인스턴스
  • Citron 인스턴스 : 프라이빗 서브넷에 위치해 직접 외부 접속이 불가능합니다. 배스천 호스트를 경유해 접근해야 함
  • SSH 프록시를 이용해 배스천 호스트를 경유하여 프라이빗 인스턴스에 접근

2. 실습

1) EC2 인스턴스에서 만들어진 인스턴스를 클릭하면 AMI 이름을 알 수 있음.

  • Amazon Linux / Amazon Linux 2 : ec2-user
  • Ubuntu : ubuntu
  • CentOS : centos
  • Debia : admin 또는 debian
  • RHEL (Red Hat Enterprise Linux) : ec2-user 또는 root
  • SUSE Linux : ec2-user 또는 root

2) SSH를 사용해 EC2 인스턴스에 접근

ssh -i [키 이름] [기본 사용자 계정]@[인스턴스의 퍼블릭 IP]

ssh -i minji-test-key.pem ec2-user@3.35.17.209
  • bastonhost 인스턴스의 퍼블릭 IP
  • Citron 인스턴스의 프라이빗 IP (프라이빗이기 때문에 접속할 수 없는 상태->bastonhost의 퍼블릭을 통해서 여기에 접속할 수가 있음)
  • bastonhost 퍼블릭 IP에 접속해서 해당 순서로 진행하면, bastonhost를 통해 프라이빗에 접속할 수 있는 키가 생성되었음(minji-test-key.pem). 중간에 vi minji-test-key.pem에 원래 minji-test-key.pem 에 있던 키내용을 복사해서 해당 단계에 붙여넣기하고 :q! 명령어로 빠져나오면 됨

3) 키를 통해 프라이빗 서브넷 안에 있는 Beanstalk 접속하기

  • Elastic Beanstalk -> 환경 -> Citron 환경 클릭
  • 구성 -> 서비스 액세스 편집
  • 역할, 키 적용
  • citron 환경에 키 업데이트 완료

4) citron 인스턴스의 프라이빗 IP 복사

5) 프라이빗 서브넷 안에 있는 Beanstalk에 접속 성공!


⭐ RDS 구성

1. RDS란?

Amazon RDS (Relational Database Service)
AWS에서 제공하는 관리형 관계형 데이터베이스 서비스

2. 서브넷 그룹 생성

  • RDS 대시보드에서 서브넷 그룹 탭 클릭 -> DB 서브넷 그룹 생성 버튼 클릭

3. 데이터베이스 생성

  • RDS 대시보드에서 데이터베이스 생성 버튼 클릭

  • 엔진 옵션 : MySQL

  • DB 인스턴스 식별자, 마스터 이름, 마스터 암호 설정

  • VPC, DB 서브넷 그룹, 퍼블릭 액세스( ), 기존 VPC 보안 그룹 선택 -> 데이터베이스 생성 버튼 클릭

4. 데이터베이스 연결

IntelliJ에 데이터베이스 연결 기능 추가하는법
https://velog.io/@tengury5/IntelliJ-IDEA무료버전에서-데이터베이스-연결-기능-사용하는법-feat.-JDBC-드라이버

  • IntelliJ Database Navigator 로 데이터 연결

  • 하지만, 해당 db가 프라이빗이기 때문에 처음엔 연결 오류가 남

  • bastonhost 통해서 연결해야 함(SSH)

  • DB 연결 성공!

⭐ Front 구성

1. Front란?

일반적으로 "프론트엔드"는 웹사이트나 애플리케이션의 사용자가 직접 보는 부분, 즉 사용자 인터페이스(UI)와 관련된 모든 요소를 포함

2. Node.js 설치

https://nodejs.org/en/ 접속하여 LTS 버전 설치 (current 버전도 상관없으나 LTS 권고)

3. Npx 설치

  • Node.js 가 설치된 상태에서 아래 명령어로 npx 설치
npm install npx -g

4. S3 버킷 생성

  • S3 대시보드에서 버킷 생성 버튼 클릭
  • 해당 버킷 -> 속성 -> 정적 웹 사이트 호스팅 편집

5. 간단한 front 작업 올리기

cd <프로젝트 이름>
  • 프로젝트 디렉토리에서 npm start 명령어 입력해 실행
npm start
  • local에서 작동하는 모습

build 생성

  • build를 만들어준다 (이 build 자체를 s3에 올릴 예정)
npm run build

  • serve 패키지 설치 후 실행

    serve : 정적 파일을 간단히 서버에서 제공하기 위해 사용하는 npm 패키지

npm install -g serve
serve -s build
  • 만약 설치가 안되면 로컬 설치하는 방법으로 시도
npm install serve
npx serve -s build
  • 그래도 안되면 수동설치
    1. serve 패키지 페이지로 이동 https://www.npmjs.com/package/serve
    2. 원하는 버전의 GitHub 페이지로 이동하여 소스코드 .zip 다운로드 https://github.com/vercel/serve
    3. 프로젝트 디렉토리에 압축해제해서 package.json 파일이 있으면 완료
    4. 해당 폴더에서 npm install serve -> serve -s build -> 빌드 성공!

S3에 build 올리기

  • S3 대시보드에서 생성했던 버킷업로드 버튼 클릭

  • build 폴더 안의 모든 객체를 드래그앤드롭하여 추가해주고 업로드

  • 해당 버킷에서 권한 탭 클릭 -> 퍼블릭 액세스 차단 체크 해제

  • 퍼블릭 액세스 차단(비활성화) 확인 후 아래에 버킷 정책 편집하기

  • S3 버킷에 대한 정책 생성하여 복사하기

  • 버킷 정책 붙여넣고 저장

  • 속성 탭 맨 하단의 정적 웹 사이트 호스팅 엔드포인트 주소 클릭하여 페이지가 열리는지 확인

    • S3 통해서 열린 React 프로젝트

    • 로컬에서 열린 React 프로젝트

⭐ CI/CD 구성

1. 파이프라인 생성

  • CodePipeline 대시보드에서 파이프라인 생성 버튼 클릭 -> 파이프라인 이름 설정

  • 소스 스테이지 추가

  • 빌드 스테이지 추가 (codebuild 에서 빌드 만든 후 해당 프로젝트 선택)

  • 배포 그룹 생성 (서비스 역할도 없다면 IAM에서 codedeploy에 대한 역할 추가 해줘야함, 로드밸런서(ELB)와 연동 되도록 대상 그룹도 생성해줘야함)

  • 배포 스테이지 추가 (미리 codedeploy 에서 배포, 배포 그룹 만들어둬야 함) -> 파이프라인 생성 버튼 클릭

    퍼블릭에 있다면 beanstalk으로 하면 되는데 프라이빗 안에 있는 것을 연동하는 경우, codedeploy를 별도로 만들어서 elb에 묶어서 배포할 예정

  • 파이프라인 완성

⭐ Route 53

1. 도메인 구입하기

AWS에서 구입하는 경우

  • Route 53 대시보드에서 도메인 등록 섹션에 원하는 도메인 이름을 적고 검색 버튼 클릭
  • 검색했을때 사용가능한 도메인이면 구입해서 쓰면되고 이미 사용중이거나 사용 불가능하면 다른 도메인을 사용해야 함

다른 웹호스팅 업체에서 구입한 경우

  • 다른 곳에서 이미 도메인을 구입했으면 호스팅 영역 생성 버튼 클릭

  • 구매한 도메인 이름 입력 -> 호스팅 영역 생성 버튼 클릭

  • 구매한 도메인의 NS(네임서버) '값/트래픽 라우팅 대상' 으로 바꿔주면됨

2. 서비스 연동

CloudFront

  • CloudFront 대시보드에서 배포 생성 버튼 클릭

  • 만들어둔 S3 버킷 선택

  • CloudFront 배포 완료

도메인에 연결

  • Route 53에 생성한 호스팅 영역에서 레코드 생성 버튼 클릭

  • 라우팅 정책 선택

  • 단순 레코드 정의 버튼 클릭

  • 배포된 CloudFront or Beanstalk 등 라우팅 대상을 선택해주고 단순 레코드 정의를 해주면 검색창에 복잡한 엔드포인트를 입력하지 않아도 내가 산 도메인을 검색하면 빠르고 간단하게 접속이 가능해짐

0개의 댓글