지금까지 만들어온 프로젝트의 REST API 를 AWS 를 통해 배포하여 로컬이 아닌 고정 IP 주소를 통하여 외부에서 해당 REST API 를 사용할 수 있도록 할 것이다.
또한, 테스트용 DB 인 H2 데이터베이스를 서버가 다운되어도 데이터가 초기화되지 않는 DB 인 MySQL 로 전환할 것이다.

프로젝트 구조는 위 사진과 같습니다.
데이터베이스의 배포는 AWS 의 관계형 데이터베이스 서비스인 RDS 를 사용하며,
데이터베이스 엔진은 MySQL 을 사용합니다.
REST API 를 사용하기 위한 Spring 프로젝트의 배포는 AWS 의 가상 서버 서비스인 EC2 를 사용하며,
EC2 의 OS 는 Ubuntu 18.04 를 사용합니다.
Client 는 EC2 의 Public IP 주소를 통하여 배포되어진 REST API 를 사용할 수 있게 합니다.

표준 생성 방식을 선택합니다.MySQL 을 선택합니다.
프리 티어를 선택합니다.

예 로 설정하여, Public IP 주소로 접속할 수 있도록 해줍니다.새로 생성 을 선택해줍니다.
초기 데이터베이스 이름을 설정하여, 초기 데이터베이스를 생성합니다.
생성하기 버튼을 클릭합니다.


VPC 보안그룹을 클릭하여 보안그룹 설정을 합니다.
보안 그룹 ID를 클릭하여 보안그룹 설정 창으로 이동합니다.
인바운드 규칙 편집을 클릭하여 인바운드 규칙 편집 창으로 이동합니다.

build.gradle 파일 내 dependencies 부분의 코드를 수정합니다.
기존 H2 데이터베이스 라이브러리에 대한 의존성을 제거합니다.
엔드포인트
Client(클라이언트)가 Database(데이터베이스)로 바로 접근하기 위한 Host(호스트) 정보
spring:
datasource:
url: jdbc:mysql://엔드포인트:포트번호/db이름
driver-class-name: com.mysql.cj.jdbc.Driver
username: 마스터 사용자 이름
password: 마스터 암호

Ubuntu Server 18.04 을 선택합니다.
키 페어 를 생성해줍니다.
키 페어 이름, 키 페어 유형, 프라이빗 키 파일 형식 을 아래와 같이 설정해줍니다.
편집 을 클릭하여, 보안그룹 이름을 설정해줍니다.
인스턴스 시작 을 통해 인스턴스를 생성해줍니다.

규칙 추가을 클릭합니다.

탄력적 IP (Elastic IP) 란 외부에서 인스턴스에 접근 가능한 고정 IP 입니다.
즉, EC2 인스턴스를 종료 후 재시작 하여도 변하지 않는 IP 입니다.
현재 (탄력적 IP를 설정하지 않은 상태)에는 EC2 인스턴스 요약 창에서 탄력적 IP 주소 창이 비어있는 것 을 확인할 수 있습니다.

탄력적 IP 메뉴를 찾아서 들어갑니다.탄력적 IP 주소 할당을 클릭합니다.
할당 을 클릭합니다.
탄력적 IP 탭에서, 방금 생성한 탄력적 IP를 선택하여 연결을 시도합니다.



연결 을 클릭합니다.

java jdk 11 을 설치해줍니다.sudo apt-get update
sudo apt-get install openjdk-11-jdk
java-version

git 을 설치해줍니다.sudo apt-get update
sudo apt-get install git
git --version


해당 프로젝트 폴더 경로로 이동합니다.
아래의 명령어로 build 를 수행합니다.
sudo ./gradlew build


build/libs 경로로 이동합니다.
아래의 명령어로 jar 파일을 백그라운드로 실행합니다.
nohup java -jar ***.jar & /dev/null
카드뉴스 댓글을 통해, nohup 명령어 대신에 screen 이라는 명령어 사용을 추천해주셨습니다.
nohup 명령어와 screen 명령어의 차이에 대해서 추후 블로그 글을 작성해보도록 하겠습니다.