[AWS] EC2와 RDS 설정 및 프로젝트 배포

2024. 6. 12. 11:56Back-End

AWS EC2와 RDS 인스턴스를 설정하고, GitHub에서 프로젝트를 클론하여 빌드하고 배포하는 방법을 단계별로 안내하고자 한다.

또한, S3를 이용한 빌드 및 배포 방법도 소개할 것이다.

1. AWS EC2 인스턴스 설정

1.1. EC2 인스턴스 생성

  1. AWS 콘솔에 로그인하고 EC2 대시보드로 이동한다.
  2. 인스턴스 시작 버튼을 클릭한다.
  3. **Amazon Machine Image (AMI)**에서 원하는 OS를 선택한다. (예: Amazon Linux 2)
  4. 인스턴스 유형을 선택한다. (예: t2.micro)
  5. 인스턴스 세부 정보 구성, 스토리지 추가태그 추가 단계를 기본값으로 둔다.
  6. 보안 그룹 구성 단계에서, 새로운 보안 그룹을 생성하고 HTTP(80) 및 SSH(22) 포트를 허용한다.
  7. 검토 및 시작 버튼을 클릭한 후 시작 버튼을 클릭한다.
  8. 새로운 키 페어를 생성하거나 기존 키 페어를 선택하여 다운로드한다.

1.2. EC2 인스턴스에 접속

터미널이나 CMD를 열고, 인스턴스 생성 시 다운로드한 키 페어를 사용하여 SSH로 접속한다:

chmod 400 your-key-pair.pem 
ssh -i "your-key-pair.pem" ec2-user@your-ec2-public-ip

1.3. 시스템 업데이트 및 필수 패키지 설치

EC2 인스턴스에 접속한 후, 시스템을 업데이트하고 필요한 패키지를 설치한다:

yum list installed
sudo yum update

sudo yum install git
git config --global user.name "(git 이름)"
git config --global user.email "(git 이메일)"
sudo yum install -y java-21-amazon-corretto-devel

1.4. AWS CLI 설치 및 aws configure 설정

1.4.1. AWS CLI(AWS Command Line Interface) 설치

ec2는 리눅스 기반이므로 아래의 명령어를 진행하여 설치한다

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

 

1.4.2.aws configure 설정

aws configure

AWS Access Key ID [None]: 해당 사용자의 accessKey의 Id를 입력
AWS Secret Access Key [None]: 해당 사용자의 Secret access key를 입력
Default region name [None]: ap-northeast-2
Default output format [None]: json

2. AWS RDS 인스턴스 설정

2.1. RDS 인스턴스 생성

  1. AWS 콘솔에 로그인하고 RDS 대시보드로 이동한다.
  2. 데이터베이스 생성 버튼을 클릭한다.
  3. 표준 생성을 선택한다.
  4. 데이터베이스 엔진으로 MySQL을 선택한다.
  5. 템플릿을 선택한다. (예: 프리 티어)  다른거 쓰면 과금.....
  6. 데이터베이스 인스턴스 식별자, 마스터 사용자 이름 및 비밀번호를 설정한다.
  7. DB 인스턴스 크기스토리지 설정을 완료한다.
  8. 연결 설정에서 기존 VPC를 선택하고, 퍼블릭 액세스를 허용한다.
  9. 보안 그룹을 설정하여 EC2 인스턴스에서 MySQL 포트(3306)에 접근할 수 있도록 허용한다.
  10. 데이터베이스 생성 버튼을 클릭하여 RDS 인스턴스를 생성한다.

2.2. RDS 보안 그룹 설정

  1. EC2 대시보드로 이동하여 보안 그룹을 클릭한다.
  2. RDS 인스턴스와 연결된 보안 그룹을 선택한다.
  3. 인바운드 규칙 편집을 클릭하여, 규칙 추가 버튼을 누른다.
  4. 유형: MySQL/Aurora, 프로토콜: TCP, 포트 범위: 3306, 소스: 내 IP 또는 EC2 인스턴스에서 MySQL 포트(3306)에 접근할 수 있도록 VPC의 IPv4 CIDR 등록해준다
  5. 저장 버튼을 클릭하여 변경 사항을 저장한다.

3. 프로젝트 설정 및 배포

3.1. 로컬 컴퓨터에서 S3로 빌드 및 배포

3.1.1. Git 리포지토리 클론 및 빌드

로컬 컴퓨터에서 GitHub 프로젝트를 클론하고 빌드한다

git clone https://github.com/your-username/your-repository.git
cd your-repository
./gradlew build
 

빌드가 완료되면, build/libs 디렉토리에 JAR 파일이 생성된다.

 

3.1.2. S3 버킷 생성 및 JAR 파일 업로드

1. S3 버킷 생성:

aws s3 mb s3://your-unique-bucket-name

 

 

2. JAR 파일 업로드

aws s3 cp ./build/libs/your-application.jar s3://your-unique-bucket-name

 

3.1.3. EC2에서 JAR 파일 다운로드 및 실행

EC2 인스턴스에서 S3로부터 JAR 파일을 다운로드하고 실행한다

aws s3 cp s3://your-unique-bucket-name/your-application.jar .
java -jar your-application.jar
 

3.2. EC2에서 바로 클론 및 빌드

3.2.1. Git 리포지토리 클론 및 빌드

EC2 인스턴스에서 GitHub 프로젝트를 클론하고 빌드한다

git clone https://github.com/your-username/your-repository.git
cd your-repository
./gradlew build
 

3.2.2. 애플리케이션 실행

빌드가 완료되면, build/libs 디렉토리에 JAR 파일이 생성된다. 이 파일을 실행한다

java -jar build/libs/your-application.jar

4. application.yml 설정

EC2 인스턴스에서 application.yml 파일을 설정하여 RDS에 연결한다

(뒤늦게 작성되어있지만 프로젝트를 클론하고 빌드하기 전에 미리 다 설정을 해놔야 된다!!!)

spring:
  datasource:
    url: jdbc:mysql://your-rds-endpoint:3306/your-database-name
    username: ${DB_USERNAME}
    password: ${DB_PASSWORD}
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    database-platform: org.hibernate.dialect.MySQL5Dialect

your-rds-endpoint, your-database-name, your-rds-username, your-rds-password를 실제 RDS 인스턴스의 정보로 교체한다.

위는 username과, password를 환경변수로 지정하였다.(보안을 위해서 환경변수로 지정하는 것이 바람직함)

환경변수를 로컬이나 ec2 인스턴스에서 사용하기 위해서는 해당하는 이름으로 값을 지정해줘야한다.

//vi 편집기를 통해 zsh파일을 열어준다
vi ~/.zshrc

//맨 아래에
export USERNAME=DB 유저 이름
export PASSWORD=DB 유저 비밀번호
 

 

AWS EC2와 RDS를 설정하고, GitHub에서 프로젝트를 클론하여 배포하는 방법을 정리하였음.

ec2에서 바로 클론해서 빌드 하는 방식이랑 로컬에서 클론하고 빌드한 후 s3에 업로드한 후 ec2에서 다운받아서 빌드하고 배포하는 과정 두가지를 나누어 정리했음!!

application.yml은 클론하고 빌드하기 전에 미리 작성해두자!!

 

* 자바스크립트 파일에 XMLHttpRequest를 열 때 url을 작성해야되는데 인스턴스를 중지시켰다가 다시 실행시키면 공개ip가 변경되므로 꼭 자바스크립트에서도 변경을 해주고 위의 과정을 실행시키자!!