본문 바로가기

Back-End/AWS

[AWS] AWS EC2 에 스프링 부트 프로젝트 배포하기 (feat. MySQL)

728x90

현재 스프링 부트 프로젝트를 하고 있는데, AWS EC2 에 배포하려고 합니다. AWS 에 계정을 만들어놓은 상태이고, 스프링 부트 프로젝트를 AWS 서버에 올려보겠습니다.

 

1.  EC2 인스턴스 생성하기

1) EC2 인스턴스를 생성해보겠습니다. AWS 에 접속하여 로그인 후, EC2 대시보드로 들어갑니다.

AWS EC2 대시보드 접속

 

2) 인스턴스 탭을 클릭한 후, 우측의 인스턴스 시작 버튼을 클릭합니다. 

인스턴스 > 인스턴스 시작 클릭

 

3) 이름을 입력하고, 필자의 경우 Amazon Linux2 AMI (HVM), SSD Volume Type 인스턴스를 선택했습니다.

인스턴스 선택

 

3) 인스턴스 유형은 아래와 같이 선택하였습니다.

인스턴스 유형 선택

 

4) 키 페어 (key_pair) 생성하기 위해, 새 키 페어 생성 을 클릭합니다. 키 페어는 SSH 터미널로 인스턴스에 접근할 때 반드시 필요한 파일이기 때문에 잘 저장해두어야 합니다.

  • 새 키 페어 생성 클릭
  • 키 페어 이름 작성
  • 키 페어 다운로드 (.pem 파일)

새 키 페어 생성

 

5) 키 페어를 생성한 후, 해당 키페어로 설정해줍니다.

6) 네트워크 설정은 아래와 같이 해주었습니다. 필자의 경우, 외부에서 작업하는 경우가 많으므로 ip 제한을 위치 무관으로 설정하였습니다. 이 설정은 추후에 보안 그룹 탭에서 변경 가능합니다.

네트워크 설정

 

7) 프리티어는 최대 30GB 까지 지원해주므로 다음과 같이 변경해주고, 볼륨 유형은 SSD 로 선택해줍니다.

스토리지 구성

 

 

2.  탄력적 IP 설정하기

AWS EC2 인스턴스는 서버를 중지하고 다시 실행시키면 퍼블릭 IP 가 변경되기 때문에 고정 IP 를 사용하기 위해서 탄력적 IP 를 설정해주겠습니다.

1) 네트워크 및 보안 > 탄력적 IP 를 클릭한 후, 우측 상단에 있는 탄력적 IP 주소 할당 버튼을 클릭합니다.

네트워크 및 보완 > 탄력적 IP > 탄력적 IP 주소 할당

 

2) 우측 하단에 할당 버튼을 클릭하여 탄력적 IP 를 생성해줍니다.

할당 버튼 클릭

 

3) 작업 > 탄력적 IP 주소 연결 을 클릭하여 앞에서 생성한 탄력적 IP 를 현재 인스턴스에 연결해줍니다.

작업 > 탄력적 IP 주소 연결

 

4) 현재 인스턴스와 프라이빗 IP 주소를 선택하고, 연결 버튼을 클릭하여 탄려적 IP 주소를 연결해줍니다.

인스턴스, 프라이빗 IP 주소 선택

 

 

3.  보안 그룹 설정하기

이제 생성한 인스턴스의 보안 그룹을 수정해보도록 하겠습니다. 이 경우, 인바운드 규칙만 설정해주면 됩니다.

  • 인바운드 규칙 : 외부에서 EC2 나 RDS 등의 내부로 접근할 때 사용되는 방화벽 규칙
  • 아웃바운드 규칙 : EC2 나 RDS 등의 내부에서 외부로 접근할 때 사용되는 방화벽 규칙

 

1) EC2 메뉴에서 네트워크 및 보안 탭의 보안 그룹으로 들어갑니다.

네트워크 및 보안 > 보안 그룹

 

2) 우측 상단의 보안 그룹 생성 버튼을 클릭하여 새로운 보안 그룹을 생성해줍니다. 아래와 같은 화면에서 보안 그룹 이름과 설명을 입력해줍니다.

보안 그룹 이름, 설명 입력

 

3) 인바운드 규칙 섹션에서 규칙 추가 를 클릭하여 방화벽 설정을 해줍니다.

  1. 스프링 부트 프로젝트의 서버이므로 사용자 지정 TCP 의 포트 범위를 8080 으로 설정해줍니다. url 을 아는 누구나 접속할 수 있도록 Anywhere-IPv4 로 설정해줍니다.
  2. SSH 설정은 원격 EC2 인스턴스에 접속할 시 사용되는 ssh 관련 방화벽으로, 외부에서 접속할 때가 많기 때문에 고정 IP 가 아닌 Anywhere-IPv4 로 설정하였습니다. (ssh 기본 포트는 22번 포트입니다.)
  3. HTTP, HTTPS 설정도 고정 IP 가 아닌 Anywhere-IPv4 로 설정하였습니다.

인바운드 규칙 설정

 

4) 우측 하단에 보안 그룹 생성 을 클릭하여 보안 그룹을 생성해주고, 생성된 보안그룹을 EC2 에 설정해줍니다. 좌측 메뉴에서 인스턴스 에 들어간 후, 앞에서 만든 인스턴스를 선택하여 아래와 같이 작업 > 보안 > 보안그룹 변경 에 들어갑니다.

작업 > 보안 > 보안 그룹 변경

 

5) 기존에 설정되어 있는 보안 그룹은 제거해주고, 새로 생성한 보안 그룹을 추가한 후 저장합니다.

새로 생성한 보안 그룹 추가

 

AWS EC2 에서 해야 할 모든 설정이 마무리되었습니다. 이제 터미널에서 AWS EC2 에 접속해보겠습니다.

4.  터미널에서 AWS EC2 에 접속하기

EC2 대시보드에서 해당 인스턴스를 클릭해 우측 상단에 나오는 연결 버튼을 클릭하여 EC2 서버에 접속할 수도 있고, 맥북 터미널에서 접속할 수도 있습니다. 아래는 맥북 터미널에서 접속하는 방법입니다.

1) 터미널에서 아까 다운로드했던 키 페어 파일(.pem) 을 이용해 ssh 접속을 합니다.

# 권한 부여
chmod 600 {키 페어 이름}.pem

# ssh 접속
ssh -i {키 페어 이름}.pem ec2-user@{ec2 IP 주소}

터미널에서 EC2 서버에 접속

 

2) 애플리케이션을 배포할 때 필요한 패키지들을 설치해줍니다.

    1. git 설치

$ sudo yum install -y git
$ git --version

 

    2. java 설치

$ sudo amazon-linux-extras install java-openjdk11
$ java --version

 

    3. MySQL 설치

필자의 경우, 스프링 부트 프로젝트에서 MySQL 을 사용했으므로 다음 명령어를 통해 설치해주었습니다.

$ sudo yum yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
$ sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
$ sudo yum update
$ sudo yum install mysql-community-server

 

3) 설치를 완료했으면, 깃허브에 올려둔 프로젝트를 소스를 EC2 인스턴스로 clone 해야 합니다. 해당 주소를 깃허브에서 복사하고 다음과 같이 터미널에서 작업해줍니다.

$ mkdir server
$ cd server
$ git clone {복사해온 url 주소}

 

4) 새로 만든 server 폴더에 들어가면 clone 해 온 폴더를 확인할 수 있습니다. 프로젝트를 빌드해주기 위해, clone 해 온 폴더로 이동하여 다음과 같이 권한을 수정해준 후 빌드합니다.

$ cd Back-End
$ sudo chmod 777 ./gradlew
$ ./gradlew build

 

빌드하면 아래와 같은 에러가 발생합니다.

 

EC2 서버에서 MySQL 과 관련된 설정을 해주지 않아 발생한 에러이므로, MySQL 과 관련된 설정을 해주겠습니다.

 

5.  MySQL 설정하기

1) MySQL 서버는 초기에 root 계정만 존재하고, 임시 비밀번호가 발급이 됩니다. 아래 명령어를 입력하여 임시 비밀번호를 확인합니다.

$ sudo grep 'temporary password' /var/log/mysqld.log

임시 비밀번호 확인

 

2) 다음 명령어를 입려하여, 임시 비밀번호를 입력하여 MySQL 에 접속합니다.

$ mysql -u root -p

 

3) 비밀번호를 설정해주기 위해, 아래 명령어를 입력해줍니다. 스프링 부트 프로젝트의 application.properties 파일에서도 MySQL 과 관련된 설정 (비밀번호 등) 을 맞게 수정해줍니다. 수정한 경우, 깃허브에 push 해줍니다.

ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '{설정할 비밀번호}';

 

4) 다음 명령어를 입력하여 권한을 반영해줍니다.

FLUSH PRIVILEGES;

 

5) 스프링 부트 프로젝트에서 사용하는 데이터베이스를 EC2 서버의 MySQL 에 새 데이터베이스로 만들어줍니다.

create database {데이터베이스 이름} default character set utf8

 

6) 새로 만든 데이터베이스로 이동합니다.

use {데이터베이스 이름};

 

7) 'exit' 를 입력해 MySQL 에서 나온 후, 스프링 부트 프로젝트를 빌드해줍니다.

# 최신 버전 pull
$ git pull

# 해당 프로젝트 디렉토리로 이동
$ cd server/Back-End 

# 빌드
$ ./gradlew build

빌드 성공

 

5) Spring Boot 는 톰캣 서버가 내장되어 있으므로, 빌드된 jar 파일만 실행해주면 서버가 가동됩니다.

$ cd /build/libs
$ java -jar {jar 파일}

728x90