Chapter 07 AWS에 데이터베이스 환경을 만들어보자 - AWS RDS

LeeKyoungChang·2022년 5월 31일
0
post-thumbnail

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 를 공부하고 정리한 내용입니다.

 

📚 1. AWS RDS

웹 서비스의 백엔드를 다룬다고 했을 때 애플리케이션 코드를 작성하는 것만큼 중요한 것이 데이터베이스를 다루는 것이다.
이번 장에서는 데이터베이스를 구축하고 이전에 만든 EC2 서버와 연동을 해보자.
다만, 직접 데이터베이스를 설치하지 않는다.

AWS에서는 앞에서 언급한 작업을 모두 지원하는 관리형 서비스인 RDS(Relational Database Service)를 제공한다.

 

📢 RDS란?
RDS는 AWS에서 지원하는 클라우드 기반 관계형 데이터베이스로, 하드웨어 프로비저닝, 데이터베이스 설정, 패치 및 백업과 같이 잦은 운영 작업을 자동화하여 개발자가 개발에 집중할 수 있게 지원하는 서비스이다.

  • 추가로 조정 가능한 용량을 지원하여 예상치 못한 양의 데이터가 쌓여도 비용만 추가로 내면 정상적으로 서비스가 가능하다는 장점도 있다.

 

이러한 RDS를 이용하여 나만의 데이터베이스 환경을 구축해보자!

 

📚 2. RDS 인스턴스 생성하기

db 생성

  • RDS 대시보드에서 데이터베이스 생성 버튼을 클릭

 

스크린샷 2022-06-02 오전 10 19 11

📢 MariaDB를 추천하는 이유는 다음과 같다.

  • 가격
    • RDS의 가격은 라이센스 비용 영향을 받는다.
    • 상용 데이터베이스인 오라클, MSSQL이 오픈소스인 MySQL, MariaDB, PostgreSQL 보다 동일한 사양 대비 가격이 더 높다.
  • Amazon Aurora(오로라) 교체 용이성
    • Amazon Aurora는 AWS에서 MySQL과 PostgreSQL을 클라우드 기반에 맞게 재구성한 데이터베이스이다.
    • Amazon Aurora는 성능이 뛰어나고 AWS에서 직접 엔지니어링한다는 점에서 클라우드 서비스에서 가장 적합한 데이터베이스인데, 시작하는 단계에서 Aurora를 선택하기 어렵다.
    • 최저 비용이 월 10만원 이상
    • 프리티어 대상이 아니다.
    • 차후 서비스 규모가 일정 규모 이상 커진 후에 Maria DB에서 Aurora로 이전하면 된다.

Amazon Aurora를 처음부터 시작하는 것보다는 Amazon Aurora로 교체가 가능하고 가격도 저렴한 MariaDB로 시작하는 것이 더 좋다.

하지만, MariaDB로 할 시 설정 되지 않는 것이 있어 MYSQL DB를 선택했다.

 

🎁 MariaDB란?
MariaDB는 MySQL을 기반으로 만들어졌기 때문에 쿼리를 비롯한 전반적인 사용방법이 MySQL과 유사하다.
MariaDB는 MySQL 대비 다음과 같은 장점이 있다.

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

 

3

  • 프리티어 선택

 

스크린샷 2022-06-02 오후 12 36 35
  • 사용자이름 chang123
  • DB 인스턴스와 마스터 사용자 정보를 등록

 

스크린샷 2022-06-02 오전 10 27 52
  • 퍼블릭 액세스 가능 체크하기
  • 보안 그룹에서 지정된 IP만 접근하도록 막을 예정이다.
  • VPC 보안 그룹 새로 생성한다.

 

스크린샷 2022-06-02 오후 12 33 16
  • 데이터베이스 이름 설정하기

 

스크린샷 2022-06-02 오후 12 28 13
  • 데이터베이스 생성 완료

 

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

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

  • 타임존
  • Character Set
  • Max Connection

 

✔ 파라미터 그룹 생성

1

  • RDS 대시보드 왼쪽 카테고리에서 파라미터 그룹 선택

 

파라미터 그룹 생성

  • 파라미터 그룹 생성 클릭

 

스크린샷 2022-06-02 오전 10 31 30
  • 생성한 mysql8.0와 같은 버전으로 DB 엔진 선택 후 생성 클릭하기

 

4

  • 생성 완료 후 해당 파라미터 그룹 클릭하기
  • 편집 모드로 전환한 후, 타임존 설정 변경하기
  • time_zone 검색 후 Asia/Seoul 선택하기

 

5

  • character Set 설정 변경하기
  • character 항목들은 utf8mb4로, collation 항목들은 utf8mb4_general_ci로 변경한다.
  • utf8과 utf8mb4의 차이는 이모지 저장 가능 여부이다.
    • utf8 : 이모지를 저장할 수 없다.
    • utf8mb4 : 이모지를 저장할 수 있다.

변경할 요소들

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

관련 모두 변경한다.

 

6

  • RDS의 Max Connection은 인스턴스 사양에 따라 자동으로 정해진다.
  • 현재는 Max Connection을 150으로 설정

 

스크린샷 2022-06-02 오후 12 43 43 스크린샷 2022-06-02 오후 12 42 44
  • 생성된 파라미터 그룹을 데이터베이스에 연결한다.
  • DB 파라미터 그룹을 조금 전 생성한 신규 파라미터 그룹으로 변경한다.
  • 반영 시점을 즉시 적용으로 한다.

 

💡 참고

  • 간혹 파라미터 그룹이 제대로 반영되지 않을 때가 있다. 정상 적용을 위해 한 번 더 재부팅을 진행한다.

 

📚 4. 내 PC에서 RDS에 접속해 보기

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

  • 보안 그룹에 들어가서 인바운드 규칙 편집을 클릭한다.
스크린샷 2022-06-02 오전 10 38 17

 

스크린샷 2022-06-02 오전 10 38 40
  • EC2에 사용된 보안 그룹의 ID를 RDS 보안 그룹의 인바운드로 추가한다.
  • 유형 : MySQL/Aurora, 소스 : 사용자 지정, 주소 : EC2에 사용된 보안 그룹의 ID
  • 인바운드 규칙 유형에서는 MYSQL/Aurora를 선택하면 자동으로 3306 포트가 선택된다.
    • 보안 그룹 첫 번째 줄 : 현재 내 PC의 IP를 등록한다.
    • 보안 그룹 두 번째 줄 : EC2의 보안 그룹을 추가한다.
      • 이와 같이 하면 EC2와 RDS 간에 접근이 가능하다.
      • EC2의 경우 이후에 2대 3대가 될 수도 있는데, 매번 IP를 등록할 수는 없으니 보편적으로 이렇게 보안 그룹 간에 연동을 진행한다.

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

 

✔️ Database 플러그인 설치

Intellij에 Database 플러그인을 설치해서 진행해보겠다.

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

스크린샷 2022-06-02 오전 11 09 05

접근 가능한 URL이므로 메모장 같은 곳에 복사해둔다.

 

Intellij로 이동하여 database 플러그인을 검색한다.

스크린샷 2022-06-01 오전 10 54 14
  • Database Navigator를 설치한다.

 

설치가 다 되었다면 Intellij 재시작을 한 뒤 Action 검색으로 Database Browser를 실행한다.
(mac 단축 키 : cmd + shift + a)

스크린샷 2022-06-02 오전 11 17 02

DB Browser가 노출된다.
MySQL 접속 정보를 열어 본다.

 

스크린샷 2022-06-01 오후 1 12 39
  • 생성한 RDS의 정보를 차례로 등록한다.
    • Host : RDS의 엔드 포인트 (복사한 것 붙여넣기)
    • User, Password : RDS 데이터베이스의 설정한 마스터 계정 id와 password
  • 등록 후, Test Connection을 클릭해 연결 테스트를 해본다.
  • Connection successful 할 경우, 최종 저장을 한다.
  • Name, Description은 각자 하고 이름 지정

 

✔️ 인텔리제이에 RDS의 스키마

스크린샷 2022-06-01 오후 1 30 28
  • Open SQL Console 버튼을 클릭
  • New SQL Console 항목을 선택해서 SQL을 실행할 콘솔창을 열어본다.

 

스크린샷 2022-06-01 오후 1 30 37
  • console 이름 지정

 

스크린샷 2022-06-01 오후 1 32 32
  • use AWS RDS 웹 콘솔에서 지정한 데이터베이스명
  • 쿼리문을 드래그로 선택한 뒤 화면 위 쪽에 화살표로 된 Execute Statement 버튼을 클릭한다.
  • Execute Console에서 SQL statement executed successfully 메시지가 떴다면 쿼리가 정상적으로 수행된 것이다.

 

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

스크린샷 2022-06-01 오후 1 35 05
show variables like 'c%';
  • 쿼리 결과를 보면 다른 필드들은 모두 utf8mb4가 잘 적용되었지만, character_set_database, collation_connection 2가지 항목은 설정되어 있지 않다.

 

2개의 항목이 MYSQLDB에서만 RDS 파라미터 그룹으로는 변경이 안된다.
직접 변경해줘야 한다.

ALTER DATABASE database이름  
CHARACTER SET = 'utf8mb4'
COLLATE = 'utf8mb4_general_ci';
스크린샷 2022-06-02 오전 11 33 04
  • 쿼리를 실행한다.
show variables like 'c%';

을 재실행한다.

스크린샷 2022-06-02 오후 12 06 13
  • 변경 성공!

 

스크린샷 2022-06-01 오후 1 50 32
  • 타임존을 확인해본다.
  • RDS 파라미터 그룹이 잘 적용되어 한국 시간으로 된 것을 확인할 수 있다.

 

한글명이 잘 들어가는지 간단한 테이블 생성과 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 ('테스트');

select * from test;
스크린샷 2022-06-01 오후 1 51 08

 

스크린샷 2022-06-01 오후 1 52 22 스크린샷 2022-06-01 오후 1 52 43
  • 한글 데이터가 잘 등록되어있다.

 

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

 

📚 5. EC2에서 RDS에서 접근 확인

맥에서는 ssh 서비스명
윈도우에선 putty

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

스크린샷 2022-06-01 오후 2 42 07
sudo yum install mysql

 

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

mysql -u 계정 -p -h Host주소
스크린샷 2022-06-01 오후 2 44 34
  • EC2에서 RDS로 접속 성공!

 

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

스크린샷 2022-06-01 오후 2 44 59
  • 생성한 spring_rds라는 데이터베이스가 있다! 성공!

 

profile
"야, (오류 만났어?) 너두 (해결) 할 수 있어"

0개의 댓글