웬만한 애플리케이션은 데이터베이스를 사용합니다. 데이터베이스 중에서도 수요가 많은 것은 관계형 데이터베이스 (RDB)입니다. 관계형 데이터베이스는 데이터가 하나 이상의 열과 행의 테이블(또는 '관계')에 저장되어 서로 다른 데이터 구조가 어떻게 관련되어 있는지 쉽게 파악하고 이해할 수 있도록 사전 정의된 관계로 데이터를 구성하는 정보 모음입니다. 관계는 이러한 테이블 간의 상호작용을 기반으로 설정되는 여러 테이블 간의 논리적 연결입니다.
이러한 관계형 데이터베이스를 EC2에서 직접 설치하여 운영할 수도 있지만, AWS에서 관리해주는 RDS를 사용하는 것이 좋은 선택입니다. 오늘은 RDS에 대해 간단하게 알아보고 작은 실습을 해봅시다.
1. RDS란?
RDS는 Relational Database Service(관계형 데이터베이스 서비스)의 약자로 AWS에서 관리해주는 관계형 데이터베이스 서비스입니다.
- DB 엔진으로 PostgreSQL, MySQL, MariaDB, Oracle, Microsoft SQL Server, Aurora를 제공하고 있습니다. 그 중 Aurora는 AWS에서 직접 개발하여 제공하는 엔진입니다.
- 가상 머신인 EC2 위에서 동작하게 됩니다.
- EC2 Instance처럼 예약 인스턴스(Reserved Instance) 구매가 가능합니다.
- EBS로 파일 스토리지를 구성합니다.
장점 (vs DB on EC2)
- 데이터베이스 프로비저닝과 운영체제 패치가 완전히 자동화됩니다.
- 지속적으로 백업 생성하여 특정 시점으로 DB 복원이 가능합니다.
- 대시보드에서 데이터베이스 성능 모니터링이 가능합니다.
- Read Replicas를 추가하여 Read 성능을 개선할 수 있습니다.
- Multi AZ를 통하여 재해 복구가 가능합니다.
- 유지 관리 기간에 엔진 버전 업그레이드가 가능합니다.
- 인스턴스 유형을 변경하여 수직 확장하거나 Read Replicas를 추가하여 수평 확장 할 수 있습니다.
단점 (vs DB on EC2)
- RDS 인스턴스에 SSH 액세스가 불가합니다. (RDS Custom 제외)
- AWS가 관리해주는 만큼 EC2 Instance보다 더 많은 비용이 청구됩니다.
Storage Auto Scaling
Read / Write 작업을 많이 하여 임계값에 도달하게 되었을 때 자동으로 스토리지를 확장시킬 수 있습니다.
- 스토리지 용량을 늘리기 위해 DB를 다운시키는 등의 작업이 필요 없습니다.
- Maximum Storage Threshold(최대 스토리지 임계값)을 설정해야 합니다.
- 스토리지가 확장되는 조건은 다음과 같습니다.
- 남은 공간이 10% 이하가 됨
- 스토리지 부족 상태가 5분 이상 지속됨
- 지난 수정으로부터 6시간이 지남
실습
간단하게 실습을 진행하여 RDS를 통해 관계형 데이터베이스를 생성해봅시다.
먼저, VPC와 데이터베이스 접속용 EC2 Instance를 준비합니다. 데이터베이스는 인터넷 연결이 필요없기 때문에 NAT Gateway를 생성하지 않아도 됩니다.
RDS 콘솔에 접속하여 데이터베이스가 위치할 서브넷을 지정해주기 위해 Subnet group을 생성합니다. Subnet groups 메뉴를 선택하고, Create DB subnet group을 누릅니다.
이름과 설명을 입력하고, 생성한 VPC를 지정합니다.
가용 영역을 선택하고, 가용 영역마다 private subnet을 선택합니다. Create를 눌러 Subnet group을 생성합니다.
이제 Databases 메뉴로 가서 Create database를 눌러 본격적으로 데이터베이스를 생성해봅시다.
데이터베이스 생성 방식으로 Standard create를 선택합니다. 옵션이 많지만, 몇 가지만 설정해주면 됩니다.
DB 엔진은 MySQL을 선택하겠습니다.
비용 지출을 줄이기 위해 템플릿으로 Free tier을 선택합니다.
DB 인스턴스 식별자, 마스터 유저이름, 마스터 비밀번호를 각각 입력합니다.
가장 작은 DB 인스턴스 클래스인 db.t2.micro를 선택합니다.
Storage로 가장 저렴한 gp2를 선택하고, 20 GiB를 할당합니다.
Connect to an EC2 compute resource를 선택하여 DB에 연결할 EC2 Instance를 선택합니다.
DB subnet group으로 이전에 생성한 Subnet group을 선택합니다.
보안그룹은 새로 생성하겠습니다. 보안그룹의 이름만 지정하면 AWS가 DB를 생성하면서 같이 생성해줍니다.
나머지 설정은 기본으로 놔두고, Create database를 눌러 데이터베이스를 생성합니다.
조금만 기다리면 Available 상태가 됩니다.
이제 데이터베이스 연결용 EC2 Instance에 SSH로 접속한 뒤, MySQL 클라이언트를 설치합니다. 명령어는 Amazon Linux 2023 기준입니다.
sudo dnf update -y
sudo dnf install mariadb105
다음 명령어를 통해 MySQL 데이터베이스에 접속합니다. endpoint는 데이터베이스 상세보기에서 볼 수 있습니다.
mysql -h (endpoint url) -P 3306 -u (master username) -p
비밀번호를 입력하면 성공적으로 데이터베이스에 접속됩니다. 이제 자유롭게 데이터베이스를 이용하면 됩니다.
[ec2-user@ip-10-0-9-49 ~]$ mysql -h demo-db.cacgnhyyutg6.ap-northeast-2.rds.amazonaws.com -P 3306 -u admin -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 8.0.33 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
오늘의 글은 여기까지입니다. 감사합니다!
참고
https://cloud.google.com/learn/what-is-a-relational-database?hl=ko
관계형 데이터베이스(RDBMS)란 무엇인가요? | Google Cloud
관계형 데이터베이스의 작동 방식, 관계형 데이터를 사용하여 조직 데이터를 저장하는 경우의 이점, 비관계형 데이터베이스의 비교에 대해 알아봅니다.
cloud.google.com
https://youtu.be/koDIV5QMw38?si=zF-QRQQjhahuL6VK
https://www.udemy.com/course/best-aws-certified-solutions-architect-associate/
'AWS' 카테고리의 다른 글
[AWS] Amazon Aurora - RDS DB Engine (0) | 2023.10.01 |
---|---|
[AWS] RDS Read Replicas & Multi AZ (2) | 2023.09.30 |
[AWS] EKS - AWS Load Balancer Controller (0) | 2023.09.26 |
[AWS] EKS AutoScaling - Karpenter (2) | 2023.09.25 |
[AWS] aws-nuke로 모든 리소스 삭제 (0) | 2023.09.24 |