'스프링 부트와 AWS로 혼자 구현하는 웹 서비스'를 읽고 정리한 글입니다.
데이터베이스를 구축하고 EC2 서버와 연동을 해보자.
직접 데이터베이스를 설치해서 다루게 되면 모니터링, 알람, 백업, HA 구성 등을 모두 직접 해야 한다.
RDS
ASW에서는 위에서 말한 작업을 모두 지원하는 관리형 서비스인 RDS(Relational Database Service)를 제공한다.
- RDS는 AWS에서 지원하는 클라우드 기반 관계형 데이터베이스다.
- 하드웨어 프로비저닝, 데이터베이스 설정, 패치 및 백업과 같이 잦은 운영 작업을 자동화하여
개발자가 개발에 집중할 수 있게 지원하는 서비스다. - 추가로 조정 가능한 용량을 지원하여 예상치 못한 양의 데이터가 쌓여도
비용만 추가로 내면 정상적으로 서비스가 가능한 장점이 있다.
7.1 RDS 인스턴스 생성하기
검색창에 rds를 입력하여 대시보드에서 데이터베이스를 생성하자.
데이터베이스 생성
엔진 옵션
DB 엔진 선택 화면에서 MariaDB를 선택하자. MariaDB을 선택하면 어떤 장점이 있을까?
- 가격
- RDS의 가격은 라이센스 비용 영향을 받는다.
- 상용 데이터베이스인 오라클, MSSQL이
오픈소스인 MySQL, MariaDB, PostgreSQL 보다는 동일한 사양 대비 더 가격이 높다.
- Amazon Aurora 교체 용이성
- Amazon Aurora는 AWS에서 MySQL과 PostgreSQL을 클라우드 기반에 맞게 재구성한 데이터베이스다.
- RDS MySQL 대비 5배, RDS PostgreSQL 보다 3배의 성능을 제공한다.
- 또 AWS에서 직접 엔지니어링하고 있기 때문에 계속 발전하고 있다.
- 클라우드 서비스에 가장 적합한 데이터베이스이기 때문에 많은 회사가 Amazon Aurora를 선택한다.
- 호환 대상이 아닌 오라클, MSSQL을 굳이 선택할 필요 없을 것 처럼 보인다.
- 그러나 시작하는 단계에서 Aurora를 선택하기 어렵다.
- 프리티어 대상이 아니며, 최저 비용이 월 10만원 이상이기 때문에 부담스럽다.
- 보통 비즈니스가 커지면 데이터베이스를 교체한다.
MariaDB
오픈소스 데이터베이스 중 가장 인기 있는 제품으로 MySQL을 꼽을 수 있다. 단순 쿼리 처리 성능이 어떤 제품보다 압도적이며 오래 사용되어 왔기 때문에 성능과 신뢰성 등에서 꾸준히 개선되어 온 것도 장점이다.
MariaDB는 MSQL을 기반으로 만들어졌기 때문에 쿼리를 비롯한 전반적인 사용법이 MySQL과 비슷하다.
MariaDB의 장점
- 동일 하드웨어 사양으로는 MySQL보다 향상된 성능
- 좀 더 활성화된 커뮤니티
- 다양한 기능
- 다양한 스토리지 엔진
MYSQL에서 MARIADB로 마이그레이션 해야 할 10가지 이유
템플릿
- 프리 티어를 사용하고 있으니 당연히 프리 티어를 선택한다.
설정
- 본인만의 DB 인스턴스 이름과 사용자 정보를 등록한다.
- 마스터 사용자 이름과 마스터 암호를 등록한다. 반드시 기억하고 따로 저장해두자.
인스턴스 구성
- MariaDB로 선택했기 때문에 옵션이 제한되어 있다. 그대로 진행한다.
스토리지
- 별도로 수정할 것 없이 그대로 진행한다.
연결
- 퍼블릭 액세스를 예로 변경한다.
추가 구성
데이터베이스를 생성되었으니 세부적으로 설정을 해야 한다.
7.2 RDS 운영환경에 맞는 파라미터 설정하기
RDS를 처음 생성하면 몇 가지 설정을 필수로 해야 한다.
- 타임존
- Character Set
- Max Connection
파라미터 그룹 생성
- 파라미터 그룹 생성 버튼을 클릭한다.
파라미터 그룹 세부 정보
- 생성한 MariaDB와 같은 버전을 맞춰야 한다.
파라미터 편집
- 생성된 파라미터 그룹에서 파라미터를 편집한다.
타임존 수정
- time_zone을 Asia/Seoul로 선택한다.
Character Set 변경
- utf8mb4
- character_set_clinet
- character_set_connection
- character_set_database
- character_set_filesystem
- character_set_results
- character_set_server
- utf8mb4_general_ci
- collation_connection
- collation_server
utf8mb4는 이모지를 저장할 수 있다.
Max Connection
- RDS의 Max Connection은 인스턴스 사양에 따라 자동으로 정해진다
- 이후 RDS 사양을 높이게 된다면 기본값으로 다시 돌려놓으면 된다.
변경 사항
파라미터 그룹 데이터베이스에 연결
생성된 파라미터 그룹을 데이터베이스에 연결해보자.
- 데이터베이스 탭에서 데이터베이스를 선택하고 수정을 선택한다.
- 하단의 추가 구성에서 DB 파라미터 그룹을 변경한다.
- 변경된 사항을 반영하는 시점을 즉시 적용으로 한다.
- 예약된 다음 유지 관리 기간에 적용을 선택하면 수정사항이 반영되는 동안 데이터베이스가 작동하지 않을 수 있다.
- 지금은 서비스가 오픈되지 않았기 때문에 즉시 적용한다.
정상적으로 적용하기 위해 재부팅을 한다.
이제 로컬 PC에서 RDS에 접속해보자.
7.3 내 PC에서 RDS에 접속해 보기
로컬 PC에서 RDS로 접근하기 위해서 RDS의 보안 그룹에 로컬 PC의 IP를 추가하자.
- 생성한 데이터베이스를 선택하여 보안 그룹의 VPC 보안 그룹을 선택한다.
- EC2에 사용된 보안 그룹의 그룹 ID를 복사한다.
- RDS 보안 그룹에서 인바운드 규칙 편집을 선택한다.
- 규칙 추가 버튼을 눌러서 복사한 EC2의 보안 그룹 ID와 내 IP를 추가한다.
이제 EC2와 RDS 간에 접근이 가능하다.
보편적으로 보안 그룹 간에 연동을 진행한다. <= EC2가 많아지면 연동하기 까다로워질 수 있다.
RDS와 로컬 PC, EC2 간의 연동 설정이 모두 되었으니 테스트해보자.
Database 플러그인 설치
MySQL의 대표적인 클라이언트로 Workbench, SQLyog, Sequel Pro, DataGrip 등이 있다.
여기선 인텔리제이에 Database 플러그인을 설치해서 진행한다.
먼저 RDS 정보 페이지에서 RDS에 접근 가능한 URL인 엔드포인트를 확인한다.
인텔리제이에서 플러그인을 설치한다.
사이드바에 DB Browser에서 + 버튼을 눌러 MySQL을 클릭한다.
이제 RDS의 정보를 등록한다.
- host에 RDS의 엔드 포인트를 등록한다.
- 마스터 계정명과 비밀번호를 등록한다.
- Test Connection을 눌러 연결 테스트를 해본다.
- 정상적으로 연결되었으니 Apply -> OK를 눌러 저장한다.
RDS 설정 확인
인텔리제이에 설치한 Database Navigator를 통해 RDS와 연결하였다.
RDS 파라미터가 제대로 설정되었는지 확인해보자.
콘솔 생성
- RDS의 스키마를 확인할 수 있다.
- Open SQL Console을 클릭하여 New SQL Console을 선택한다.
생성된 콘솔창에서 SQL을 실행해보자.
RDS 데이터베이스 선택
쿼리가 수행될 database를 선택하는 쿼리다.
use [AWS RDS 웹 콘솔에서 지정한 데이터베이스명];
쿼리가 정상적으로 수행된 것을 로그에서 볼 수 있다.
문자열 설정 확인
RDS에서 설정한 utf가 잘 적용되었는지 확인해보자.
show variables like 'c%';
위 쿼리를 드래그하여 해당 부분만 실행하면 된다.
제대로 적용되지 않은 부분은 MariaDB에서만 RDS 파라미터 그룹으로 변경이 안된다.
그래서 직접 변경해야 한다.
ALTER DATABASE springboot2_aws_webservice
CHARACTER SET = 'utf8mb4'
COLLATE = 'utf8mb4_general_ci'
정상적으로 변경되었다.
타임존 확인
타임존도 확인해보자.
select @@time_zone, now();
RDS 파라미터 그룹에서 설정한 타임존이 잘 적용된 것을 확인하였다.
한글 확인
한글명이 잘 들어가는지 간단한 테이블 생성과 insert 쿼리를 실행해보자.
CREATE TABLE test (
id bigint(20) NOT NULL AUTO_INCREMENT,
content varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB;
insert test(content) values ('테스트');
select * from test;
한글 데이터도 잘 등록되는 것을 확인하였다.
RDS에 대한 모든 설정이 끝났다.
설정된 RDS와 EC2가 잘 연동되는지 확인해 보자.
7.4 EC2에서 RDS 접근 확인
앞서 말했듯이 MariaDB는 MySQL을 기반으로 만들어졌다.
MariaDB로 설정한 RDS를 테스트하기 위해 MySQL CLI를 설치하여 테스트해보자.
sudo yum install mysql
설치가 다 되었다면 로컬에서 접근하듯이 계정, 비밀번호, 호스트 주소(RDS 엔드포인트)를 사용해 접속한다.
mysql -u 계정 -p -h Host주소
생성한 RDS가 맞는지 간단한 쿼리를 실행해보자.
지금까지 RDS를 설정하고 EC2에 연동해보았다.
이제 스프링 부트를 EC2에 배포하고 RDS에 연동하는 방법을 진행하고 개선해보자.