GDSC web - AWS 를 통한 배포

이유석·2023년 1월 4일
1

gdsc

목록 보기
6/6
post-thumbnail

카드뉴스

지금까지 만들어온 프로젝트의 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 를 사용할 수 있게 합니다.

RDS 인스턴스 생성 및 설정

AWS RDS 생성

  • AWS RDS 서비스에 접속하여 데이터베이스를 먼저 생성합니다.

  • 데이터베이스 생성 방식은 표준 생성 방식을 선택합니다.
  • 데이터베이스 엔진은 MySQL 을 선택합니다.

  • 비용 과금을 막기 위하여 템플릿은 프리 티어를 선택합니다.

  • 설정 탭에서 데이터베이스를 사용할 때, 알아보기 위한 식별자와 접속하기 위한마스터 사용자 이름, 암호를 설정합니다.

  • 연결 탭에서 데이터베이스에 접속하기 위한 설정을 해줍니다.
  • 퍼블릭 액세스를 로 설정하여, Public IP 주소로 접속할 수 있도록 해줍니다.
  • 보안그룹을 새로 생성해줄 것이기 때문에 새로 생성 을 선택해줍니다.

  • 추가 구성 탭에서, MySQL DBMS 내의 초기 데이터베이스를 생성하기 위한 설정을 해줍니다.
  • 초기 데이터베이스 이름을 설정하여, 초기 데이터베이스를 생성합니다.

  • 모든 생성 설정이 끝났다면, 생성하기 버튼을 클릭합니다.
  • 그럼 아래와 같이 새 데이터베이스가 생성된 것을 볼 수 있습니다.

  • 생성된 데이터베이스를 클릭하면 데이터베이스에 대한 다양한 설정 값을 볼 수 있습니다.

RDS 보안그룹 설정

  • VPC 보안그룹을 클릭하여 보안그룹 설정을 합니다.

  • 보안 그룹 ID를 클릭하여 보안그룹 설정 창으로 이동합니다.

  • 인바운드 규칙 편집을 클릭하여 인바운드 규칙 편집 창으로 이동합니다.

  • 위치 무관으로 어느 누구나 3306 포트에 접근할 수 있게 열어줍니다.
  • 연습하는 단계이기 때문에 이렇게 설정해도 무관합니다.

Spring 프로젝트, RDS - MySQL 연결

Spring 프로젝트 의존성 설정

  • build.gradle 파일 내 dependencies 부분의 코드를 수정합니다.

  • 기존 H2 데이터베이스 라이브러리에 대한 의존성을 제거합니다.

  • MySQL 라이브러리에 대한 의존성을 추가합니다.

Spring 프로젝트 연결

  • MySQL 에 접속하기 위해서는 RDS 데이터베이스의 엔드포인트와 포트번호가 필요합니다.

    엔드포인트
    Client(클라이언트)가 Database(데이터베이스)로 바로 접근하기 위한 Host(호스트) 정보

  • 엔드포인트를 복사하여, Spring 프로젝트 설정 파일인 application.yml 에 추가하여 줍니다.
spring:
  datasource:
    url: jdbc:mysql://엔드포인트:포트번호/db이름
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: 마스터 사용자 이름
    password: 마스터 암호
  • 이렇게 설정하면 Spring 프로젝트와 MySQL의 연결이 됩니다. 서버를 실행시켜 테스트를 해보도록 합니다.

EC2 인스턴스 생성 및 설정

AWS EC2 생성

  • EC2 서비스의 인스턴스 탭에서 인스턴스를 생성합니다.

  • EC2 OS 이미지는 Ubuntu Server 18.04 을 선택합니다.

  • EC2 인스턴스에 접속하기 위해 사용하는 키 페어 를 생성해줍니다.

  • 키 페어 이름, 키 페어 유형, 프라이빗 키 파일 형식 을 아래와 같이 설정해줍니다.

  • 네트워크 설정 탭에서 편집 을 클릭하여, 보안그룹 이름을 설정해줍니다.

  • 마지막으로 인스턴스 시작 을 통해 인스턴스를 생성해줍니다.

EC2 보안그룹 설정

  • 보안 그룹 탭에서, 인스턴스 생성할 때 생성해둔 보안 그룹을 클릭합니다.

  • 인바운드 규칙 편집을 위해, 인바운드 규칙 탭에서 규칙 추가을 클릭합니다.

  • SSH, HTTP, HTTPS, Spring Boot Port 에 대해서 모든 IP 접속을 허용해줍니다.

EC2 탄력적 IP 설정

  • 탄력적 IP (Elastic IP) 란 외부에서 인스턴스에 접근 가능한 고정 IP 입니다.
    즉, EC2 인스턴스를 종료 후 재시작 하여도 변하지 않는 IP 입니다.

  • 현재 (탄력적 IP를 설정하지 않은 상태)에는 EC2 인스턴스 요약 창에서 탄력적 IP 주소 창이 비어있는 것 을 확인할 수 있습니다.

  • 좌측 탭에서 탄력적 IP 메뉴를 찾아서 들어갑니다.
  • 우측 상단에 탄력적 IP 주소 할당을 클릭합니다.

  • 추가 설정 없이, 할당 을 클릭합니다.

EC2 탄력적 IP 연결

탄력적 IP 탭에서, 방금 생성한 탄력적 IP를 선택하여 연결을 시도합니다.

  • 인스턴스 탭에서 연결할 인스턴스를 선택합니다.

EC2 인스턴스 접속 (mac 기준)

  • 키 파일에 대한 권한을 400 (나에게만 읽기 권한을 부여함) 으로 변경해준다.

  • EC2 인스턴스 요약 탭에서 연결 을 클릭합니다.

  • 해당 명령어를 복사하여 터미널에 입력하여 SSH 접속을 합니다.

서버 코드 배포

java jdk 11 설치

  • Spring 프로젝트가 java 11 버전을 사용하고 있기 때문에, 이를 실행해주기 위해 java jdk 11 을 설치해줍니다.
sudo apt-get update
sudo apt-get install openjdk-11-jdk
  • 설치가 완료되었으면, java 버전을 확인해줍니다.
java-version

git 설치

  • Git Repository 에 올라와있는 Spring 프로젝트를 다운받기 위해, git 을 설치해줍니다.
sudo apt-get update
sudo apt-get install git
  • 설치가 완료되었으면, git 버전을 확인해줍니다.
git --version

Spring 프로젝트 Clone

  • Spring 프로젝트가 올라와 있는 Git Repository 사이트에 접속 후, 해당 url 을 통해 git clone을 수행합니다.

Spring 프로젝트 Build

  • 해당 프로젝트 폴더 경로로 이동합니다.

  • 아래의 명령어로 build 를 수행합니다.

sudo ./gradlew build

  • build/libs 경로에 jar 파일이 잘 생성되었는지 확인합니다.

jar 파일 실행

  • build/libs 경로로 이동합니다.

  • 아래의 명령어로 jar 파일을 백그라운드로 실행합니다.

nohup java -jar ***.jar & /dev/null
  • Public IP 주소를 확용하여 접속을 시도합니다.

카드뉴스 댓글을 통해, nohup 명령어 대신에 screen 이라는 명령어 사용을 추천해주셨습니다.
nohup 명령어와 screen 명령어의 차이에 대해서 추후 블로그 글을 작성해보도록 하겠습니다.

profile
https://github.com/yuseogi0218

0개의 댓글