[Spring] AWS RDS MySQL 생성 & SpringBoot 프로젝트 연동

송현진·2023년 5월 9일
post-thumbnail

1. AWS RDS MySQL 생성

2. RDS 인스턴스 생성

AWS에 들어가서 RDS 서비스를 선택하고 데이터 베이스를 생성합니다.

표준 생성으로 MySQL 8.0.32 버전 이용했습니다.

프리 티어로 선택했습니다.(이미 RDS가 있으면 두 번째부터 프리 티어 설정 불가능)

DB 인스턴스 식별자 자유롭게 정하고, 데이터 베이스 마스터 사용자 계정 생성합니다.

AWS의 RDS는 표준, 메모리 최적화 및 버스트 성능의 3가지 인스턴스 클래스 유형을 지원합니다.(버스트: 특정 기준에 따라 한 단위로서 취급되는 연속된 신호나 데이터 모임) db.t2는 CPU 사용률을 최대로 버스트할 수 있는 기능을 통해 기준 성능 수준을 제공하는 현재 세대 인스턴스 클래스입니다.

프리티어 스토리지 최대 할당량은 20GB입니다.

외부에서 데이터베이스에 접속할 수 있도록 퍼블릭 엑세스 가능을 '예'로 설정합니다.

데이터 베이스 인증을 암호 인증으로 선택했습니다.

추가 구성을 꼭 하는 것을 권장합니다. 초기 데이터베이스 이름을 지정해야 하기 때문입니다.

다음과 같이 표시가 나오면 데이터 베이스 구축이 완료된 것입니다.

3. RDS 운영 환경에 맞는 파라미터 설정

(1) EC2와 연결

EC2에서 RDS로 접근 가능하게 하기 위해 포트를 열어주는 과정이 필요합니다.(보안 그룹 클릭해 접근)

인바운드 규칙을 다음과 같이 편집해줍니다.

외부에서 RDS 접근 확인

외부에서 데이터 베이스로 접속할 수 있는 Datagrip을 사용하였습니다. 다음과 같이 사용자는 RDS를 생성할 때 생성한 root 계정으로 로그인을 하였습니다. host에는 RDS의 엔드포인트 넣으면 됩니다.

접속이 잘 되었으므로 명령어 입력하여 SQL 작동해봅니다.

DB 문자형 관련 설정 확인할 수 있습니다. 원래 utf8 설정이 안된 부분이 있어서 인코더 설정을 해줘야합니다.

(2) 타임존 설정

기본적으로 default 파라미터가 존재하지만, 수정이 불가능하기 때문에 새로운 그룹을 생성합니다.

time_zone 검색 후 Asia/Seoul로 설정해주고 변경 사항 저장

(3) Character set utf-8 설정

한글 데이터가 깨지지 않고 잘 출력시키게 하기 위해 utf-8 인코더를 설정해줍니다.

character_set 검색 후 해당 요소들을 모두 utf8mb4로 설정해줍니다.


아래 더 있으면 그것들도 전부 utf8mb4로 수정해줍니다.utf8과 utf8mb4 모두 한글이 깨지지 않게 인코딩해주지만 차이가 있습니다. utf8은 이모지를 저장할 수 없지만, utf8mb4는 이모지를 저장할 수 있습니다. utf8은 가변 3바이트를 사용하는데 반해서, utf8mb4는 내부적으로 한 문자를 표현하는데 4바이트를 사용합니다. 3바이트만 사용하는 utf8은 이모지를 저장할 수 없습니다.

collation 검색 후 모두 utf8mb4_general_ci로 바꿔줍니다.

  • collation_connection : utf8_general_ci
  • collation_server : utf8_general_ci

데이터 베이스 선택화면 가서 선택하고 수정버튼을 누릅니다.

옵션 부분에서 DB 파라미터 그룹을 default에서 수정해줍니다.

계속 후 즉시적용 누릅니다.

수정되는 데 약간의 시간이 소요될 수 있습니다.
수정 완료 시 수정사항을 적용시키기 위해 재부팅을 해줍니다.

재부팅 후 datagrip을 다시 확인해 봅니다.
앞서 변경한 time_zone을 확인해봅니다.

현 시간이 잘 나오는 것을 확인할 수 있습니다.

일부 설정은 변경이 적용되었지만, character_set_database와 collation_connection 2가지 항목의 변화가 없습니다.(이미 고친 후라 잘되어있지만 내가 기억하기 위해서 작성..)


이를 위해서 다음 명령어로 강제로 변환시켜줍니다.

character_set_database는 바뀌었지만 collation_connection은 바뀌지 않았습니다. 일단 utf8mb4로 되어 있으니 넘어갑니다.
파라미터 그룹의 수정이 생겼으므로 다시 재부팅을 해줍니다.

(4) EC2에서 RDS 접속

window는 ssh프로그램이 없으므로 git bash창을 사용한다.

$ ssh -i 키페어 ubuntu@퍼블릭IP주소

필자의 경우는 다음과 같다.

$ ssh -i /c/Users/Song/Desktop/within.pem ubuntu@IP주소

Are you sure you want~ 이런 질문이 나오면 yes 하면 된다.
다음과 같이 뜨면 연결 성공

1. apt-get 업데이트

$ sudo apt-get update

2. JDK 설치

$ sudo apt install openjdk-17-jdk

java -versionjavac -version으로 잘 설치 됐는지 확인해보자.

3. MySQL 설치

$ sudo apt install mysql-server

접속해보자.

$ sudo mysql -u root -p
Enter password: 엔터

select now();를 하면 시스템 시간을 따라가서 시간이 다른 것을 볼 수 있다.
exit로 나와 시간대를 변경해주자.

$ sudo timedatectl set-timezone 'Asia/Seoul';
$ sudo systemctl restart mysqld; //mysql 재실행

다시 mysql에 접속해 시간 확인하면

잘나온다.

mysql -u root -p -h within.c3grlrpemhnc.ap-northeast-2.rds.amazonaws.com(엔드포인트)
Enter password:RDS디비 비밀번호

접속이 잘되면 show databases;로 확인한다.

내가 만든 스키마가 잘 있으면 성공이다.

파일질라를 이용한 jar 파일 업로드

필자는 jar 파일을 인텔리제이 bootjar로 빌드한 후 업로드 후 실행했다.

파일 -> 사이트 관리자로 들어간다. 사이트가 없으면 새로 생성합니다. 프로토콜은 SFTP, 호스트는 인스턴스의 퍼블릭IP주소, 포트는 22로 설정합니다. 로그온 유형은 키파일, 사용자는 ubuntu, 키 파일은 인스턴스 생성시의 ssh 파일을 설정합니다.

왼쪽 창에서 오른쪽 창으로 원하는 파일을 드래그앤 드롭해서 옮기면 된다.

EC2에서 실행할 때는 다음 명령어를 입력하면 된다.

$ java -jar 파일명.jar

어? 그런데 에러가 터졌다.

jysypt로 암호화해줘서 빌드할 때 톰켓에 아래의 코드를 작성해준 것을 안넣어줘 찾을 수 없다는 에러가 나온 것이다.

그래서 구글링 끝에 아래 코드처럼 쳐주면 문제없이 실행이 되었다.

$ java -jar -Djasypt.password=시크릿키 파일명.jar

후,, S3부터 RDS, EC2연결까지해서 배포하느라 정말 힘든 하루였다.. CORS를 곧 만나게 될 거 같아서 이만 자야겠다..

RDS & EC2 참고
https://yeon-dev.tistory.com/179
https://luminitworld.tistory.com/94
S3참고
https://velog.io/@chaeri93/SpringBoot-AWS-S3%EB%A1%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%97%85%EB%A1%9C%EB%93%9C%ED%95%98%EA%B8%B0

profile
개발자가 되고 싶은 취준생

0개의 댓글