GDSC web - AWS 를 통한 배포

이유석·2023년 1월 4일
1

gdsc

목록 보기
6/6
post-thumbnail
post-custom-banner

카드뉴스

지금까지 만들어온 프로젝트의 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
소통을 중요하게 여기며, 정보의 공유를 통해 완전한 학습을 이루어 냅니다.
post-custom-banner

0개의 댓글