RDS 개념
RDS(Realational Database Service)는 관계형 데이터베이스 서비스를 의미한다. 데이터베이스는 크게 '관계형 데이터베이스(RDBMS)'와 'NoSQL' 두 가지로 나누어 진다. 관계형 데이터베이스는 행과 열로 이루어져 있는 2차원 테이블 구조이다. 테이블 구조에 데이터를 넣고, 꺼내고, 지우고, 업데이트하는 작업을 처리한다.
따라서 RDS는 관계형 데이터베이스로 서비스로서 AWS에서 제공해주는 RDS 인스턴스이다.
RDS 생성하기
RDS에서는 Amazon Aurora, PostgreSQL, MySQL, MariaDB, Oracle, MS SQLServer 총 6개의 데이터베이스 엔진 중에서 원하는 DBMS를 선택할 수 있다. 또한 AWS Databae Migration Services를 사용하여 기존 데이터베이스를 Amazon RDS로 손쉽게 마이그레이션 또는 복제 할 수 있다.
RDS의 장점인 자동백업과 스냅샷이다.
RDS에서 데이터베이스를 만들 때 자동으로 활성화되는 자동 백업은 특정 시간으로 데이터베이스 상태를 복원할 수 있으며, 7~35일까지 설정가능하다. 복원 기능을 사용하기 위해 '스냅샷'과 'transaction log'를 생성한다. 자동 백업정보는 S3버킷에 저장한다. RDS 인스턴스 크기에 따라 무료로 사용할 수 있는 S3 공간이 책정되며, 10GB까지 무료로 사용 가능하다.
RDS스냅샷이란 데이터베이스 인스턴스를 통으로 복사한다고 할 수 있다. 인스턴스에는 스토리지 볼륨정보, 파일크기, 스냅샷이 만들어진 시간 등 수많은 정보가 담겨 있으므로 특정 순간의 상태를 보존하고 싶을 때 스냅샷을 이용할 수 있다.
스냅샷의 큰 장점은 원본 RDS 인스턴스를 삭제해도 스냅샷은 존재하기 때문에 스냅샷을 통해 기존 인스턴스를 살릴 수도 있다.
이제 이전에 생성했던 EC2 인스턴스에서 PHP와 MySQL을 연동하고, RDS서버에 원격 접속해서 실습해보자.
RDS 간단 실습
먼저, 다음과 같이 "보안그룹 > 인바운드 규칙 편집"에서 RDS 보안그룹을 설정한다.
[인바운드] - [편집] - [규칙 추가] - [MySQL/Aurora] - 허용 IP로 [0.0.0.0/0]를 설정합니다.
DB에 성공적으로 접속하면 "mysql>" 다음에 명령어를 입력할 수 있다. 이제 admin계정이 아닌 다른 계정으로 언제 어디서든 DataBase를 사용할 수 있는 계정을 생성해보자.
- 예를 들어, rdsuser 아이디와 rdsuser1234비밀번호 생성한다면 다음과 같이 실행한다.
mysql> CREATE USER '유저명'@'%' IDENTIFIED BY '비밀번호';
CREATE USER 'rdsuser'@'%' IDENTIFIED BY 'rdsuser1234';
- 생성한 계정에 권한을 부여합니다.
mysql> GRANT ALL PRIVILEGES ON 디비명.* TO '유저명'@'%';
GRANT ALL PRIVILEGES ON clouddb.* TO 'rdsuser'@'%';
- 권한 부여 내용 메모리에 반영하기
mysql> flush privileges;
- 권한이 잘 부여되었는지 확인하기
mysql> show grants for '유저명'@'%';
show grants for 'rdsuser'@'%';
MySQL WorkBench 연결
DB이름, AWS 앤드포인트, 생성했던 계정 이름과 패스워드 및 mysql 디폴트 포트번호 '3306'을 확인 후 연결한다.
이제 터미널의 EC2인스턴스로 돌아가 다음과 같은 단계를 통해 서버에 있는 데이터베이스를 활용해보자
1. /var/www/html 디렉토리로 이동
2. sudo mkdir tmp (tmp디렉토리 생성)
3. cd tmp로 이동
4. signup.php 생성
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>예제 회원가입</title>
</head>
<body>
<form method="post" action="./signup_action.php">
<label>이름 <input type="text" name='name'> </label><br>
<label>이메일 <input type="email" name='email'> </label><br>
<label>학번 <input type="number" name='num'> </label><br>
<input type="submit" value='가입하기'>
</form>
</body>
</html>
5. signup_action.php 생성
<?php $name=$_POST['name'];
$email=$_POST['email'];
$num=$_POST['num'];
$con = mysqli_connect("엔드포인트","유저아이디","비밀번호","데이터베이스명") or die ("Can't access DB");
$query = "insert into student (name,email,num) values('".$name."','".$email."','".$num."')";
$resut=mysqli_query($con,$query);
if(!$result)
{?>
<script> alert('회원가입이 완료되었습니다.'); location.href=".."; </script>
<?php
} else {?>
<script> alert('회원가입에 실패했습니다.\n다시 시도해 주세요.'); location.href=".."; </script>
<?php } ?>
6. 웹브라우저에서 signup.php 접속
RDS와 연결된 EC2 인스턴스의 퍼블릭 IPv4 주소에서 signup.php 경로로 접속하면(예 : 0.00.00.000/signup.php), 다음과 같은 예제를 확인할 수 있다. 이제 여기에 학생의 정보를 입력하고 가입하기를 누르면 학생의 정보가 데이터베이스에 저장된다.
'☁️ Cloud' 카테고리의 다른 글
[AWS]Chapter09_AWS S3 (0) | 2023.05.23 |
---|---|
[AWS]Chapter08_AWS RDS 생성 (0) | 2023.05.14 |
[AWS] Chapter06_리눅스 명령어 (0) | 2023.04.13 |
[AWS] Chapter05_AWS EC2생성 (0) | 2023.04.06 |
[AWS] Chapter03_가상화와 컴퓨팅 기술 (0) | 2023.04.05 |