[7장] AWS에 데이터베이스 환경을 만들어보자

미천한 개발중생·2023년 10월 3일
0

AWS RDS

AWS 에서는 관리형 서비스인 RDS(Relational Database Service)를 지원합니다. RDS는 AWS에서 지원하는 클라우드 기반 관계형 데이터베이스 입니다.

RDS를 사용하는 이유

  • 직접 데이터베이스를 설치해서 다루게 되면 모니터링, 알람, 백업, HA 구성 등을 직접 해야만 합니다.
  • 위에서 언급한 기능들을 모두 지원합니다.
  • 조정 가능한 용량을 지원하여 예상치 못한 양의 데이터가 쌓여도 비용만 추가로 내면 정상적으로 서비스가 가능합니다.

RDS 인스턴스 생성

검색창에 rds를 입력후 RDS 대시보드로 이동 -> [데이터 베이스 생성] 을 클릭합니다.

여기서 엔진은 Maria DB를 선택하겠습니다. RDS에는 오라클, MSSQL, PostgreSQL 등이 있으며 본인이 가장 잘 사용하는 데이터베이스를 고르면 되지만, 다른 이유가 있는것이 아니라면 MySQL, MariaDB, PostgreSQL 중에 고르길 추천합니다. 필자가 그중에서도 Maria DB를 추천하는 이유는 다음과 같습니다.

  1. 가격
    • RDS의 가격은 라이센스 비용 영향을 받습니다. 상용 데이터베이스인 오라클, MSSQL이 오픈소스인 MySQL, MariaDB, PostgreSQL 보다는 동일한 사양대비 가격이 높습니다.
  2. Amazon Aurora(오로라) 교체 용이성
    • Amazon Aurora는 AWS에서 MySQL과 PostgreSQL을 클라우드 기반에 맞게 재구성한 데이터베이스 입니다. 공식 자료에 의하면 RDS MySQL 대비 5배, RDS PostgreSQL 보다 3배의 성능을 제공한다고 하며, 클라우드 서비스에 가장 적합한 데이터베이스이기 때문에 많은 회사에서 Amazon Aurora를 사용중입니다.
    • 하지만 Amazon Aurora는 프리티어 대상이 아니며, 최저 비용이 월 10만원 이상이기 때문에 현 단계에서는 선택하지 않습니다.

Maria DB

Maria DB는 MySQL 창시자인 몬티 와이드니어가 만든 프로젝트 입니다. MySQL을 기반으로 만들어졌기 때문에 쿼리를 비롯한 전반적인 사용법은 MySQL과 유사합니다.

MySQL 대비 장점

  • 동일 하드웨어 사양으로 MySQL보다 향상된 성능
  • 좀 더 활성화된 커뮤니티
  • 다양한 기능
  • 다양한 스토리지 엔진

위와 같은 이유들로 Maria DB를 선택하도록 하겠습니다.

템플릿은 프리티어로 설정하고 DB인스턴스 이름과 사용자 정보를 등록합니다.

인스턴스 구성은 기본값으로 두고 스토리지는 자동 조정 활성화를 풀어줍니다.(기본값으로 체크되어 있습니다.)

네트워크에서는 퍼블릭 액세스를 [예]로 변경하고 보안 그룹을 새로 생성해줍니다.

추가 구성에서 데이터베이스 이름을 설정합니다.

데이터베이스를 생성하고 완료될때까지 기다립니다.


파라미터 설정

RDS를 처음 생성하면 몇 가지 설정을 필수로 해야 합니다. 다음 3가지 설정을 차례대로 진행하겠습니다.

  • 타임존
  • Character Set
  • Max Connection

왼쪽 카테고리에서 [파라미터 그룹]을 클릭하여 이동 후 [파라미터 그룹 생성] 을 클릭합니다.

여기서 파라미터 그룹 패밀리는 위에서 생성한 DB와 버전을 맞춰야 합니다. 저는 10.6.10 으로 생성했으니 10.6으로 선택하겠습니다.

생성 후 목록 창에 생성된 그룹을 클릭 -> 우측 상단에 편집을 클릭합니다.
편집모드로 이동 후 time_zone을 검색하여 Asia/Seoul을 입력합니다.

다음으로 Character Set을 변경합니다. 다음 항목들 중 character 항목은 모두 utf8mb4로, collation 항목은 utf8mb4_general_ci 로 변경합니다.
utf8과 utf8mb4의 차이는 이모지 저장 가능 여부입니다.

  • character_set_client
  • character_set_connection
  • character_set_database
  • character_set_filesystem
  • character_set_results
  • character_set_server
  • collation_connection
  • collation_server


마지막으로 Max Connection을 수정합니다. RDS의 Max Connection은 인스턴스 사양에 따라 자동으로 정해집니다. 프리티어 사양보다 좀 더 넉넉한 값으로 지정합니다.

설정을 다 했다면 우측 상단의 [변경 사항 저장] 을 클릭해 저장합니다.

생성된 파라미터 그룹을 데이터베이스에 연결합니다.

DB 파라미터 그룹을 방금 생성한 파라미터 그룹으로 변경합니다.

하단의 계속을 클릭하면 수정 사항이 요약되어 보여집니다. 수정 사항 적용 시점을 즉시 적용으로 변경 후 [DB 인스턴스 수정]을 클릭합니다.

간혹 파라미터 그룹이 제대로 반영되지 않을 때가 있으니 작업 -> 재부팅을 클릭해 한번더 재부팅을 진행합니다.


RDS 접속

로컬 PC에서 RDS로 접근하기 위해서 RDS의 보안 그룹에 본인 PC의 IP를 추가하겠습니다.
RDS 세부정보 페이지에서 [보안그룹] 을 클릭합니다.

[작업] -> [인바운드 규칙 편집] 을 클릭하고 브라우저 새창을 열어 EC2에 사용된 보안 그룹의 ID를 복사합니다.

복사한 보안 그룹 ID와 본인의 IP를 RDS 보안 그룹의 인바운드로 추가합니다.

  • 첫 번째 줄 : 현재 내 PC의 IP를 등록합니다.
  • 두 번째 줄 : EC2의 보안 그룹을 추가합니다.

이렇게 하면 EC2와 RDS 간에 접근이 가능합니다.


Database 플러그인 설치

책에서 사용하는 Database Navigator로 Connection Test하는 부분에서 에러가 나서 진행이 되지 않아 찾아보니 같은 증상인 분들이 많았습니다. 저는 유료버전을 사용중이라 인텔리제이에서 제공하는 DataBase 기능을 사용하겠습니다. 다른 해결 방법으로는 HeidiSQL 이라는 프로그램을 다운받아서 확인을 하는 것 같습니다. 자세한 방법은 이 글을 참고해주세요.

RDS 정보 페이지에서 엔드포인트를 확인합니다.

우측 상단의 [Database 탭] -> [+] -> [Data Source] -> [Maria DB] 를 순서대로 클릭합니다.

Name을 입력하고 Host에 RDS 엔드포인트를 복사,붙여넣기 합니다. 그러면 밑의 URL이 자동으로 채워집니다. 그리고 User, Password를 입력하고 하단의 Test Connection을 클릭해 RDS 연결 테스트를 진행합니다.

다음과 같이 화면에 표시가 되면 성공입니다.

저의 경우, 설정을 제대로 했음에도 다음의 에러메세지가 나오며 연결이 되지 않았습니다.

구글링을 해보니 서브넷이 public이 아니어서 생기는 문제라고 합니다. 저와 같은 증상으로 연결이 안되시는 분들은 이 글을 참고하여 해결하시기 바랍니다.

테스트가 통과했으면 [apply] -> [ok]를 클릭합니다.
[ctrl] + [shift] + [F10] 으로 console 창을 열고 쿼리가 수행될 database를 선택하는 쿼리를 실행합니다.

use [AWS RDS 웹 콘솔에서 지정한 데이터베이스명];

본인이 지정한 database 명을 잊었다면 우측 상단의 [Database 탭] -> [No schemas selected ...] 을 클릭하면 기본으로 생성되는 스키마 외에 1개가 추가되어있으니 이를 확인하면 됩니다.(이 부분에서 체크를 해도 적용이 되지만 쿼리 test를 위해 그냥 진행하겠습니다.)

쿼리를 드래그로 선택 후 우측 상단의 Excute 버튼을 클릭합니다.

하단의 Services 탭에 다음과 같이 출력되면 정상적으로 쿼리가 수행된 것입니다.

이 상태에서 바로 적용이 되지 않고 상단에 다음과 같은 메세지가 나옵니다.

우측에 [Introspect schema] 를 클릭해 스키마 변경을 적용합니다.

데이터 베이스가 선택된 상태에서 현재의 character_set, collation 설정을 확인합니다.

show variables like 'c%';

character_set_database, collation_connection 2가지 항목이 utfmb4가 아니라 latin1로 되어있습니다. 이 2가지 항목이 MariaDB에서 RDS 파라미터 그룹으로 변경이 안되기 때문에 직접 변경해줍니다.

ALTER DATABASE springboot_aws_db
CHARACTER SET = 'utf8mb4'
COLLATE = 'utf8mb4_general_ci';

쿼리 수행 후 다시 설정을 확인합니다.

모두 제대로 변경된 것을 확인 후 마지막으로 한글명이 잘 들어가는지 테스트합니다.

CREATE TABLE test(
    id bigint(20) NOT NULL AUTO_INCREMENT,
    content varchar(255) DEFAULT NULL,
    PRIMARY KEY (id)
) ENGINE = InnoDB;

insert into test(content) values ('테스트');

select * from test;


EC2에서 RDS에서 접근 확인

putty에 접속하여 MySQL CLI를 설치합니다.

sudo yum install mysql

설치가 완료되면 계정, 비밀번호, 호스트 주소를 사용해 RDS에 접속합니다.

mysql -u 계정 -p -h Host주소(엔드포인트)

패스워드까지 입력하면 다음과 같이 RDS로 접속되는 것을 확인할 수 있습니다.

RDS에 접속되었으면 실제로 생성한 RDS가 맞는지 확인하겠습니다.

show databases;

본인이 생성했던 데이터베이스 이름이 나오면 성공입니다.

profile
공부 목적의 블로그 입니다. 부족한 점이 많으니 잘못된 정보가 있다면 지적부탁드려요!

0개의 댓글