관리 메뉴

Rootable의 개발일기

Chapter 7. AWS에 DB 환경 만들기(AWS RDS) 본문

스프링 부트와 AWS로 혼자 구현하는 웹 서비스

Chapter 7. AWS에 DB 환경 만들기(AWS RDS)

dev-rootable 2023. 7. 3. 11:30

[본 글은 프로젝트 과정을 기록할 목적으로 작성되었으며 아래 교재에 기반하여 작성됨]

 

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 by 이동욱

 

📌 RDS(Relational Database Service)

 

AWS에서 지원하는 클라우드 기반 관계형 DB다. 하드웨어 프로비저닝, DB 설정, 패치 및 백업과 같이 잦은 운영 작업을 자동화하여 개발자가 개발에 집중할 수 있게 지원하는 서비스다. 추가로 조정 가능한 용량을 지원하여 예상치 못한 양의 데이터가 쌓여도 비용만 추가로 내면 정상적으로 서비스가 가능한 장점도 있다.

 

🔎 RDS 인스턴스 생성

 

📢 amazon 로그인 후 검색창에 rds 검색

 

RDS 검색

 

📢 대시보드 화면 이동

 

 

📢 DB 생성

 

 

📢 DB 엔진 옵션 선택 화면에서 MariaDB 선택

 

📢 DB 엔진 옵션 선택 화면에서 MySQL 선택

 

쿼리문 인식 문제 및 연결 등 여러 문제들이 해결되지 않아 MySQL로 수정

 

DB 엔진 옵션

 

📢 (중요) 템플릿은 프리 티어로 한다.

 

DB 버전 선택

 

📢 본인만의 DB 인스턴스 이름과 사용자 정보를 등록한다.

 

DB 인스턴스 기본 정보

 

여기서 사용된 사용자 정보로 실제 DB에 접근하게 되니 메모해 두자.

 

📢 인스턴스 구성에서 DM 인스턴스 클래스를 db.t2.micro로 했다.

 

DB 인스턴스 클래스 정보

 

📢 스토리지 항목은 기본 설정으로 진행했다.

 

스토리지 설정

 

📢 네트워크에선 퍼블릭 액세스를 [예]로 변경하고, 이후 보안 그룹에서 지정된 IP만 접근하도록 막을 예정이다.

 

네트워크 접근 설정

 

📢 DB 옵션에서 이름을 제외한 나머지 정보를 기본 상태로 진행 후 DB 생성 클릭

 

DB 인스턴스 추가 옵션

 

RDS 생성 완료

 

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

 

RDS를 처음 생성하면 다음 설정을 필수로 해야 한다.

 

  • 타임존
  • Character Set
  • Max Connection

 

📢 왼쪽 카테고리에서 [파라미터 그룹] 선택

 

 

📢 우측 상단 [파라미터 그룹 생성] 클릭

 

 

📢 다음과 같이 세부 정보를 입력한다. 여기서 주의할 점은 방금 생성한 MySQL DB와 같은 버전을 맞춰야 한다는 것이다.

 

파라미터 그룹 생성

 

파라미터 그룹 생성 완료

 

📢 생성한 파라미터 그룹을 선택하여 상세 페이지로 이동 후 [파라미터 편집] 버튼을 클릭하여 편집 모드로 전환

 

 

📢 먼저 time_zone을 검색하여 다음과 같은 [Asia/Seoul] 선택

 

타임존 변경

 

📢 character_set으로 시작하는 항목들은 모두 utf8mb4로 변경하고, collation 항목들은 utf8mb4_general_ci로 변경

 

 

 

RDS의 Max Connection은 인스턴스 사양에 따라 자동으로 정해진다. 현재 프리티어 사양으로는 약 60개의 커넥션만 가능하다.

 

📢 교재에 따라 Max Connection을 150으로 수정했다.

 

Max Connection 설정

 

📢 설정이 다 되었다면 오른쪽 위의 [변경 사항 저장] 버튼을 클릭해 최종 저장한다.

 

🔎 파라미터 그룹을 DB에 연결

 

생성한 RDS 인스턴스 선택

 

📢 옵션 항목에서 default로 된 DB 파라미터 그룹을 방금 생성한 신규 파라미터 그룹으로 변경

 

DB 파라미터 그룹 설정

 

📢 계속을 누르면 다음과 같이 수정 사항이 요약된 것을 볼 수 있다. 여기서 반영 시점을 [즉시 적용]으로 한다.

 

수정 사항 요약 및 수정 예약

 

예약된 다음 유지 시간으로 하면 지금 하지 않고, 새벽 시간대에 진행하게 된다. 이 수정사항이 반영되는 동안 DB가 작동하지 않을 수 있으므로 예약 시간을 걸어두는 것이다. 지금은 서비스가 오픈되지 않았으므로 즉시 적용으로 한다.

 

🔎 내 PC에서 RDS에 접속

 

로컬 PC에서 RDS에 접속하기 위해 RDS의 보안 그룹에 본인 PC의 IP를 추가하겠다.

 

📢 RDS의 세부정보 페이지에서 [보안 그룹] 항목을 클릭

 

RDS 보안 설정

 

📢 RDS의 보안 그룹 정보를 그대로 두고, 브라우저를 새로 열어 EC2에 사용된 보안 그룹의 그룹 ID를 복사하면 자동으로 RDS의 보안 그룹에 추가된다.

 

EC2 보안 그룹의 그룹 ID

 

RDS에 EC2 보안 그룹 추가

 

📢 복사된 보안 그룹 ID와 본인의 IP를 RDS 보안 그룹의 인바운드로 추가

 

RDS 보안 그룹의 인바운드 규칙

 

이렇게 하면 EC2와 RDS 간에 접근이 가능하다. EC2의 경우 이후에 2대 3대가 될 수도 있는데, 매번 IP를 등록할 수는 없으니 보편적으로 이렇게 보안 그룹 간에 연동을 진행한다.

 

이것으로 RDS와 개인 PC, EC2 간의 연동 설정은 모두 되었다.

 

🔎 로컬에서 RDS 테스트

 

📍 Database 플러그인 설치

 

로컬에서 원격 DB로 붙을 때 GUI 클라이언트를 많이 사용한다. MySQL의 대표적인 클라이언트로 Workbench, SQLyog(유료), Sequel Pro(맥 전용), DataGrip(유료) 등이 있다.

 

각각의 도구마다 큰 차이가 없으니 본인이 가장 좋아하는 툴을 사용하면 되겠다. 여기서는 인텔리제이에 Database 플러그인을 설치해서 진행한다.

 

📢 RDS 정보 페이지에서 엔드 포인트를 확인한다. 이 엔트 포인트가 접근 가능한 URL이므로 메모장 같은 곳에 복사해 둔다.

 

RDS 엔드포인트

 

📢 인텔리제이에서 database 플러그인 검색 후 Database Navigator 설치

 

Database Navigator 설치

 

📍 RDS 스키마 및 콘솔 생성

 

📢 설치 완료 후, Action > Database Browser 실행하여 MySQL 접속 정보를 open (MariaDB는 MySQL 기반이므로 MySQL을 사용하면 된다.)

 

DB Browser 접속 정보

 

📢 본인이 생성한 RDS의 정보를 차례로 등록 후 Test Connection 수행

 

Host : RDS의 엔드 포인트

 

Test Connection 결과

 

로컬에 등록된 RDS

 

DB 연결이 잘 된 것을 볼 수 있다.

 

📍 파라미터 그룹 설정 완료 및 조회

 

📢 use 명령어로 사용할 DB 선택

 

use 명령 수행

 

앞서 RDS 인스턴스 생성 시, 입력한 DB 이름으로 하면 된다.

 

사용할 DB 설정 완료

 

📢 파라미터 설정을 조회하기 위해 다음 명령을 실행

 

show variables like 'c%';

 

파라미터 설정 정보(변경 전)

 

쿼리 결과를 보면 잘 적용되지 않은 필드들이 보인다. 이 파라미터들을 직접 변경한다.

 

ALTER DATABASE DB명
CHARACTER SET = 'utf8mb4'
COLLATE = 'utf8mb4_general_ci';

 

파라미터 설정 정보 변경 완료

 

ALTER 명령문 실행 후에도 변경이 되지 않을 경우,

 

SET 변수명 = [utf8mb4 or utf8mb4_general_ci];

 

위 명령을 추가적으로 수행했더니 수정 사항이 잘 반영되었다.

 

파라미터 설정 정보(변경 후)

 

잘 변경된 것을 볼 수 있다.

 

📢 다음 명령을 통해 타임존 확인

 

select @@time_zone, now();

 

DB 타임존 확인

 

📢 마지막으로 한글명이 잘 들어가는지 간단한 테이블 생성과 insert 쿼리를 실행하겠다

 

📝 (주의)

 

테이블 생성은 인코딩 설정 변경 전에 생성하면 안 된다. 만들어질 당시의 설정값을 그대로 유지하고 있어, 자동 변경이 되지 않고 강제로 변경해야만 한다. 웬만하면 테이블은 모든 설정이 끝난 후 생성하는 것이 좋다.

 

테스트용 테이블 생성 및 쿼리

 

명령 수행 시, 주의할 점은 테이블명만 적으면 SQL syntax error가 발생한다. 그래서 아래 링크의 내용처럼 DB명.테이블명 형식으로 쿼리를 날려야 작업이 잘 수행되었다.

 

Reference:

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=skybrend&logNo=90155188520

 

MySQL Error Code: 1046.원인과 해결방안

Error Code: 1046. No database selected Select the default DB to be used by double-clicking its...

blog.naver.com

 

테스트 결과

 

다음과 같이 한글 데이터도 잘 등록되는 것이 확인되었다.

 

이것으로 RDS에 대한 모든 설정이 끝났다.

 

📌 EC2에서 RDS 접근 확인

 

🔎 EC2에서 RDS 접근 확인

 

📢 putty(windows)를 통해 EC2에 ssh 접속 수행

 

📢 접속되었다면 MySQL 접근 테스트를 위해 MySQL CLI 설치

 

sudo yum install mysql

 

📢 설치가 다 되었으면 로컬에서 접근하듯이 계정, 비밀번호, 호스트 주소를 사용해 RDS에 접속

 

mysql -u 계정 -p -h Host주소

 

Host 주소 : RDS의 접속 URL(엔드 포인트)

 

RDS 접속 시도

 

📢 RDS에 접속되었으면 실제로 생성한 RDS가 맞는지 간단한 쿼리를 실행해 보겠다.

 

show databases;

 

RDS 접속 성공

 

생성했던 bulletinboard_webservice_2022라는 DB가 있음을 확인할 수 있다.

 

생성했던 테이블 및 레코드 확인

 

또한, 앞서 생성했던 테이블도 있음을 확인할 수 있다.

 

다음 챕터부터는 지금까지 작업했던 내용을 토대로 실제로 스프링 부트 프로젝트를 EC2에 배포하고 RDS에 접근하는 방법을 진행하고 개선한다.

 

Reference:

스프링 부트와 AWS로 혼자 개발하는 웹 서비스 by 이동욱

 

https://dev-rootable.tistory.com/48

 

Chapter 1. Reference & Introduction

📌 Spring Boot를 이용한 웹 게시판 개발 Create Your Post Read Posts Update Your Post Delete Your Post 📌 Social Login Service Google Naver 📌 AWS를 통해 서비스 자동 빌드 및 테스트 CI/CD >>> 수정 사항 현재 AWS 운영을

dev-rootable.tistory.com