지금까지 만들어온 프로젝트의 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 명령어의 차이에 대해서 추후 블로그 글을 작성해보도록 하겠습니다.