AWS EC2 RDS 로 배포하기

merci·2023년 3월 15일
0

AWS

목록 보기
4/6

만들던 프로젝트 파일로 배포 연습을 해보려고 한다.

배포 와중에 발생했던 에러들은
h2 DB로 만들었지만 maria DB 에서는 테이블 이름이 대문자여선 안되고
h2 DB에서는 쿼리문 from 앞에 콤마가 가능했지만 maria DB 에선 철저하게 지켰어야 했다.

포트번호를 착각해서 계속 틀리기도 했고 maria DB를 연결하고 수정했다가 RDS를 재부팅시키지 않아서 실행이 안되기도 했다.

또한 알림 연습한다고 만들었던 const eventSource = new EventSource('/주소') 가 잘못 만들었을때 세션을 없애버리기도 했고 배포 과정에서도 여러 실수들로 잘 안됐으나 시행착오 끝에 어떤걸 틀렸을때 배포가 안되는지 조금은 알것 같다.

jsp 를 사용한 스프링 부트 프로젝트를 배포하기 위해서 가장 쉬운 방법중 하나는 war파일을 만들어서 배포하는 것이다.

배포 설정

이를 위해서 `build.gradle에 다음과 같은 코드를 추가하고

plugins {
    id 'war' // <-- 이 녀석 추가
	id 'java'
	id 'org.springframework.boot' version '2.7.8'
	id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}

마리아 DB 를 RDS에 등록해서 사용하기 위해 다음과 같은 코드를 추가했다.

spring:
  datasource:
    # url: jdbc:h2:mem:test;MODE=MySQL
    # driver-class-name: org.h2.Driver
    # username: sa
    # password: 
    // 기존 h2 는 주석처리 및 아래 코드 추가
    url: jdbc:mariadb://[RDS 에서 가져온 엔드포인트]:3306/[Maria DB에 만든 DB이름]?characterEncoding=utf-8&serverTimezone=Asia/Seoul
    driverClassName: org.mariadb.jdbc.Driver
    username: root
    password: green123

이전에 포스팅한것을 참고해서 EC2와 RDS 를 등록한다
EC2 연결하기 - https://velog.io/@merci/AWS-%EB%B0%B0%ED%8F%AC-%EC%97%B0%EC%8A%B5
RDS 등록하기 - https://velog.io/@merci/AWS-RDS-%EB%B0%B0%ED%8F%AC
스프링부트 배포 - https://velog.io/@merci/AWS-EC2-Spring-boot-%EB%B0%B0%ED%8F%AC

이후 war 파일을 추출해야 한다.
터미널에 다음과 같은 명령어를 입력하면 .war 파일이 추출된다.

./gradlew bootwar

또는

./gradlew build

해당 war 파일을 mobaXterm에 복사한뒤에

다음 명령어를 입력하고 log를 확인한다

nohup java -jar project-0.0.1-SNAPSHOT.war 1>log.out 2>err.out &

실행 확인 명령어는

ps -ef | grep project 

실행이 되더라도 에러가 뜰수 있으니 로그를 확인해야 한다.

cat log.out 

로그에 이상이 없다면 EC2 에서 받은 IPv4 주소를 통해서 배포된 사이트를 이용할 수 있다.

배포할때 고정된 ip를 이용하고 싶다면 탄력적 IP를 이용하면 된다.

EC2 를 이용할때 주의해야할 점은 인바운드 / 아웃바운드 규칙을 잘 설정해야 한다.

EC2 RDS 차이

EC2

EC2에 DB 를 설치하면 백업을 직접해야 함
지정한 용량을 초과했을때 에러 또는 문제가 발생
다른 지역에서 사용할 경우 느린 응답 가능성
보안 설정을 직접 해야함

RDS

RDS에 DB를 설치하면 EC2 보다 비용이 비싸다
자동 백업 기능 있음
용량을 초과하면 자동으로 늘려줌
다른 지역에서도 빠르게 접속 가능
보안 설정 대부분을 알아서 처리

인바운드 아웃바운드 간단하게..

아웃바운드는 신뢰할수 있는 리스트를 등록해서 데이터를 줄 수 있다.
인바운드 규칙을 이용해서 DNS 의 규칙을 규정할 수 있다.
예를들어 ip로는 접근못하게 하고 도메인 주소로만 접근 가능하게 규칙을 만든다.

RDS 의 관점에서 EC2가 데이터를 요청하는것은 인바운드
RDS 는 인바운드 규칙을 참조함. EC2 ip 가 열려있음을 확인하고 접근 허용
RDS는 쿼리의 결과를 줄때 아웃바운드를 참조함. EC2 ip가 없으면 리턴하지 못함

profile
작은것부터

0개의 댓글