Blog

[Spring-LDW] AWS RDS 데이터베이스 환경 만들기

Category
Author
citeFred
citeFred
PinOnMain
1 more property
스프링 부트와 AWS로 혼자 구현하는 웹 서비스  : 인텔리제이, JPA, JUnit 테스트, 그레이들, 소셜 로그인, AWS 인프라로 무중단 배포까지 이동욱 저
Table of Content

AWS RDS 사용이유

어플리케이션 코드를 작성하는것 만큼 데이터베이스를 다루는 일은 중요함
DBA라는 직군이 있지만 백엔드 개발자는 데이터베이스를 다루는 경우가 많음, 가장 가까움
데이터베이스를 구축하고 EC2 서버와 연동하고자함
RDS는 AWS 인프라 안에서 지원하는 클라우드 기반 관계형 데이터베이스
EC2와 마찬가지로 용량을 조정하는데 탄력적임
추가적으로 AWS 인프라 안에서 백업, 설정, 패치 등 자동화로 개발에 집중 할 수 있도록 함

MySQL? MariaDB?

교재에서는 MariaDB로 진행하고있다. Oracle과 MySQL을 다뤄온 입장에서 조금 생소하지만 MariaDB 선택 이유에 대해 서술되어 있다.
MySQL은 단순 쿼리 처리 성능이 뛰어나고, 오래 사용되온 만큼 성능, 신뢰도가 높은 것이 장점이다.
MySQL의 창시자인 몬티 와이드니어가 만든 프로젝트가 MariaDB이다
MySQL을 기반으로 만들어 졌기 때문에 전반적인 사용법이 유사하다.
동일 하드웨어 사양으로 MySQL보다 향상된 성능이 있다.
커뮤니티가 활성화 되어 있다.
다양한 기능과 다양한 스토리지 엔진
이와 같은 이유에서 이번 RDS는 MariaDB를 접해보고자 한다.

1. RDS 인스턴스 생성하기

AWS의 RDS 콘솔로 들어가서 데이터베이스를 생성

2. RDS DB 선택

MariaDB를 선택해서 진행해보고자 한다.

3. 버전과 티어 설정

DB버전은 자동 선택되는 것을 선택하고, 프리티어를 선택하여 테스트용도로만 사용해보고자 한다.

4. 상세 정보 설정

DB 사용자 이름과 비밀번호를 설정하고,
퍼블릭 액세스를 허용한다. 이후 보안 그룹(방화벽)에서 지정된 IP만 접근하도록 막을 예정
데이터베이스 이름까지 지정하고 생성하기를 선택한다.

5. RDS 운영환경 설정하기

처음 RDS를 생성하면 다음과 같은 화면이 나타나는데, 3개 설정을 필수적으로 진행해야한다.
타임존 설정(Time Zone)
캐릭터 셋 설정(Character Set)
최대 연결 설정(Max Connection)
일정 시간이 지나면 데이터베이스가 생성되고 다음과 같은 화면이 나타난다.

5.1 파라미터 그룹 생성

웹 콘솔 좌측 파라미터그룹 메뉴로 이동하면 다음처럼 사용자 지정 그룹은 없는 상태이며 기본값만 나타나는 상태로 되어 있다. 여기서 파라미터 그룹 생성을 진행한다.
파라미터 그룹 패밀리 부분은 DB와 동일한 버전을 맞춰야 한다. 10.6.14 버전을 선택했기 때문에 10.6버전을 선택해준다. 하단 이름과 설명 부분도 작성해준다.
이후 다음처럼 사용자정의 파라미터 그룹이 생성되어 있다.
해당 파라미터 그룹을 클릭하면 세부 정보와 설정이 가능하다. 내부로 들어가본다.

5.2 time_zone 수정

다양한 파라미터들을 확인 할 수 있는데 편집을 누르고 필터를 통해 time_zone을 검색하여 수정해야 한다. 입력필드에 Asia/Seoul 을 입력하고 저장한다.

5.3 Character Set 수정

동일한 방법으로 파라미터 검색을 통해 다음 항목들을 검색하여 변경해야 한다.
character_set_client
character_set_connection
character_set_database
character_set_filesystem
character_set_results
character_set_server
위 항목들은 utf8mb4로 변경
collation_connection
collation_server
위 항목들은 utf8mb4_general_ci로 변경
ps) 두개의 차이는 이모지 저장 가능 여부이다.
저장 후에 적용 상태를 확인한다.

5.4 Max Connection 수정

RDS의 Max Connection은 인스턴스 사양에 따라 자동으로 정해지는데 현재 프리티어 사양으로는 약 60개 커넥션만 가능하기 때문에 좀 더 넉넉한 값으로 지정한다.
이후 RDS사양을 높이게 되면 기본값으로 변경하면 된다. 모두 변경 한 뒤 변경사항을 저장해주도록 한다.

6. 사용자 설정한 파라미터 그룹을 데이터베이스에 연결

데이터베이스 생성 시 DB 파라미터 그룹은 default로 설정되어 있기 때문에 방금 생성한 파라미터 그룹으로 변경해야 한다.
데이터베이스 수정을 통해 접근하면 데이터베이스 옵션 부분에 파라미터 그룹을 변경 할 수 있다.
하단의 계속 버튼을 통해 수정 컨펌 창이 나타나면 즉시적용으로 변경한 뒤 DB 인스턴스를 수정해준다.
그럼 수정 사항이 적용되면서 다시 데이터베이스가 준비되는 시간이 소요된다. 간혹 파라미터 그룹이 반영이 안되는 경우도 있을 수 있어서 재부팅을 한번 진행해 준다.

7. 인바운드 규칙 설정

데이터베이스 생성과 환경 설정이 완료되었으며 개발 로컬 PC에서 RDS로 접근하기 위해서는 RDS의 보안 그룹에 개발 컴퓨터의 IP의 접근을 허용해야 한다.
기본 설정된 보안 그룹을 RDS 인스턴스 정보에서 살펴보면 다음 처럼 기본값으로 설정되어 있다. 이전 EC2 연결을 위한 보안그룹 ID를 RDS 보안그룹의 인바운드로 추가해야 한다.
여기서
sg-096bfe816aa1b715c 는 RDS의 보안그룹
sg-0c20a3f8f3fdc499d 는 EC2의 보안그룹
RDS 보안그룹으로 들어가서 인바운드 규칙 편집을 눌러준다.
이후 EC2의 보안 그룹을 3306포트로 추가해주고, 내 IP(개발 컴퓨터) 도 추가해준다.

8. 로컬에서 RDS 접속해보기

데이터베이스 생성과 환경 설정이 완료되었으므로 실제 접속 가능한지 테스트가 필요하다. IntelliJ에는 Database플러그인을 통해 GUI로 쉽게 데이터베이스를 접근하고 연결 할 수 있다. 그 외 디비버, 워크벤치 등 다양하게 있으니 편리한 툴을 사용하는 것이 좋다. 인텔리제이를 통해 쉽게 접근 하는 방법을 선택했다.
RDS 정보 페이지에서 엔드포인트를 확인해둔다.
인텔리제이에서 Database 플러그인을 설치하면 다음처럼 DB를 GUI로 쉽게 접속, 테스트 할 수 있다. MariaDB도 MySQL 기반이기 때문에 MySQL로 데이터 소스를 추가하면 되는 것으로 되어있지만, 교재는 과거 상태로 플러그인이나 드라이버 업데이트로 현재는 MySQL 소스로 접근이 되지 않았다.
MariaDB 데이터소스가 존재하기 때문에 궂이 MySQL로 접근 할 필요가 없다. 과거에는 이 부분이 없어서 대체했던 것으로 보여진다. 아무튼 MariaDB로 다시 데이터 소스를 생성한다.
host부분에 RDS에서의 엔드포인트를 붙여넣는다.
User 부분에 마스터 계정명(DB생성시 만든)
Password 부분에 마스터 계정의 비밀번호 를 입력한다.
커넥터 드라이버를 추가로 설치하는 팝업이 나타날 수 있다. 가이드에 맞춰 다운로드를 진행한다.
하단 테스트 커넥션을 통해서 정상적으로 연결 되는 것을 확인 할 수 있다.
OK를 눌러 DB 커넥션 정보를 저장할 수 있고 조회 등을 쉽게 진행 할 수 있다.
콘솔에서 쿼리가 정상적으로 실행되는 것을 확인 할 수 있다.

9. 설정 상태 확인하기

9.1 Character_set 확인

DB콘솔을 통해서 다음과 같은 쿼리문으로 Character_set 설정이 정상적으로 적용되었는지 확인해본다.
show variables like 'c%';
Java
복사
다른 필드들은 utf8mb4 가 잘 적용되었지만 character_set_database, collation_database 부분이 latin1로 지정되있는 것을 확인 할 수 있다. 이 부분은 파라미터 그룹으로도 변경이 안되는 부분도 있다고 한다.
이것을 수동으로 쿼리를 통해 변경해준다.
ALTER DATABASE spring-ldw-webservice CHARACTER SET = 'utf8mb4' COLLATE = 'utf8mb4_general_ci';
Java
복사
수정 쿼리를 실행해주고 다시 조회 쿼리를 실행한다.

9.2 Time_zone 확인

select @@time_zone, now();
Java
복사
위 쿼리를 통해서 타임존을 확인 할 수 있다.
파라미터에서 설정한 Asia/Seoul 이 정상적으로 적용된 것을 확인 할 수 있다.

9.3 Insert 쿼리로 작동 확인

테이블을 생성해보고 테스트 데이터를 삽입해보자. 영문은 보통 기본이지만 특히 한글이 작동잘되는지 확인해볼 필요가 있다.
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 ('테스트'); insert into test(content) values ('test'); insert into test(content) values ('12@#'); select * from test;
Java
복사
모든 문자가 정상적으로 삽입 되는 것을 확인 할 수 있다.

10. EC2에서 RDS 접속해보기

RDS의 방화벽 설정에서 인바운드 규칙 설정을 통해 EC2에서의 접근도 허용했었다. 이를 확인해보기 위해서 EC2에 ssh 접속을 통해 RDS에 쿼리를 실행해보고자 한다.
EC2를 중지해둔 상태라 다시 부팅하여 시작한다.
터미널을 통해서 EC2에 접근한다.
MySQL을 설치하여 접근이 되는지 확인해본다.
역시나 이전 명령어는 사용이 안된다. 구글링을 통해서 설치 방법을 해결했다. 하지만 이것도 아까 인텔리제이에서 MySQL로 접근이 안되는 것과 같은 문제가 발생 할 수 있다.
우선 MySQL을 설치해본다. 리눅스 2023이기때문에 교재와 조금 설치 명령어가 다르다. Amazon Linux 2023의 경우 EL9 버전의 레파지토리와 mysql-community-sever를 설치해야한다.
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm sudo dnf install mysql-community-server
Java
복사
이제 RDS에 mysql을 통해 접속해본다.
mysql -u {RDS DB계정} -p -h {RDS엔드포인트}
Java
복사
mysql -u admin -p -h spring-ldw-webservice.c3i8ckws01k8.ap-northeast-2.rds.amazonaws.com
정상적으로 EC2에서 RDS 엔드포인트로 DB에 접근 하는 것을 확인 할 수 있었다.
EC2에서도 RDS에 저장된 이전 test 테이블에 insert된 로우들을 확인 할 수 있다.
결과적으로 MySQL과 호환되고 큰 차이점을 아직까지는 못느끼고 있다. 그만큼 MySQL기반으로 만들어진 데이터베이스이기 때문인것 같다. RDS 환경에서 구축한것도 많은 자동화로 구축된 상태긴 하지만 EC2로컬에 설치하고 EC2를 돌리는것과 큰 차이를 못느끼고 있다. 사실 자동 설정들이 많기 때문에 쉽게 다가갈 수 있는 점이 장점이고 로그나 관리적인 측면에서 AWS 인프라의 장점이 돋보이는것 같다.
Search
 | Main Page | Category |  Tags | About Me | Contact | Portfolio