월루를 꿈꾸는 대학생

6주차 - 데이터베이스 서비스 본문

Cloud/AWS

6주차 - 데이터베이스 서비스

하즈시 2021. 3. 24. 21:05
728x90

DBMS

- 메모장이나 엑셀에도 저장 가능한데 왜 DB가 나왔을까??? 양이 너무 많아서!! 수천 수억명의 사용자 데이터를 메모장에 저장하는 것은 무리 ->> DBMS 등장 

- DB 관리 운영하는 시스템

 

 

db-engines.com/en/ranking

 

DB-Engines Ranking

Popularity ranking of database management systems.

db-engines.com

주기적으로 관리나 유명한 DB 엔진 랭킹사이트 

현재 2위 MYSQL 

 

 

MAIRA DB - MYSQL 개발자들이 무료로 만든 버전 

 

DBMS 특징 

- 데이터가 저장되면 정확히 저장 - 신뢰성 ! 무결성 

- 웹 서비스들과 연동해서 사용자 데이터 가져오고 저장하는 것이 용이! 

 

DBMS 분류

- 관계형 DBMS ( MYSQL ORACLE ) 이 주로 인기 

 

 

관계형은 

- 테이블 단위로 구성 

- 행과 열로 구성 

 

 

SQL 개요 -> DB 조작어

- 대부분의 SQL 표준을 따르기에 SQL 기본만 알면 다른 DB쓸 때 무리 없음 

- 이식성이 좋음 

- 대화식 언어 

 


실습 ! 

 

EC2 웹 SERVER 

EC2 DB SERVER

 

두개 만들어서 서로간의 상호 작용 확인 

 

두개 만들기

 

#WEB에서 접근 

# IP확인 및 DBSrv ping 테스트
ip a
ping 10.1.2.10

# DBSrv 로 MySQL 접속 (계정 정보: root/qwe123)
mysql -h 10.1.2.10 -uroot -pqwe123


# DB에서 접근 

# IP확인
ip a

# MySQL 접속 (계정 정보: root/qwe123)
mysql -uroot -pqwe123


 

web 에서 db로 접근 

mariadb monitor tool ! 

 

-h 는 호스트 

m.blog.naver.com/nieah914/221815212859

 

mysql Workbench 사용법

안녕하세요 피드백맨입니다.​요즘 다양한 개발들을 진행하면서 어떻게든 내돈을 안들이면서 무료로 플랫폼...

blog.naver.com

mariadb monitor tool 도 있지만 mysql workbench tool 써도 됨 

GUI 환경으로 

 

 

# MariaDB monitor 접속
Welcome to the MariaDB monitor.  Commands end with ; or \g.
...

# DB 서버의 상태 정보
MariaDB [(none)]> status;

# 데이터베이스(=스키마) 확인
SHOW DATABASES;

# employees 데이터베이스 선택 하기
USE employees;
MariaDB [(none)]> USE employees;
MariaDB [employees]>

# 테이블 확인
SHOW TABLES;

# employees 테이블 조회 하기
SELECT * FROM employees;
SELECT * FROM employees LIMIT 10;
SELECT * FROM employees LIMIT 100;

# 특정 열(컬럼=필드) 기준 오름/내림차순으로 정렬 조회 하기
# -- 공백이 있는 개체의 이름 사용 시는 백틱(backtick) `` 으로 묶어줘야 하나의 이름으로 인식함
SELECT * FROM employees ORDER BY `emp_no` DESC LIMIT 100;
SELECT * FROM employees ORDER BY `birth_date` ASC LIMIT 100;

# 특정 열(컬럼) 만 출력
SELECT first_name, last_name, gender FROM employees LIMIT 50;

# 특정 행(=로우=레코드)만 출력 - Mary 이름(first_name) , Baba 성(last_name)
SELECT * FROM employees WHERE first_name = 'Mary';
SELECT * FROM employees WHERE last_name = 'Baba';

상태확인 

 

db 확인 

 

 

 

db선택 및 table 확인 

db를 사용하려면 use 명령어를 사용해서 선택을 해야함 ! 

 

 

원하는 릴레이션 확인 

 

 

 

오름차순 내림차순으로 조건을 줘서 보기 

 

생일순으로 출력 

 

 

 

특정 열만 출력 

 

 

성이 MARY에 있는 사람 다 출력 

 

 


 

 

 

# 스키마 생성
CREATE SCHEMA `shopdb`;
USE shopdb;

# 테이블 생성 - (Workbench) GUI 설정 보여주기 - 아래 복붙해서 적용하기
CREATE TABLE `shopdb`.`memberTBL` (
  `memberID` CHAR(8) NOT NULL,
  `memberName` CHAR(5) NOT NULL,
  `memberAddress` CHAR(20) NULL,
  `age` INT NOT NULL,
  PRIMARY KEY (`memberID`));

# 데이터 넣기 - (Workbench) GUI 설정 보여주기 - (카톡 멤버 정보 받기) - 아래 복붙해서 적용하기
SELECT * FROM memberTBL;

# 행(=데이터=레코드) 1개 넣기
INSERT INTO memberTBL VALUES ('Gasida', '가시다', '전북 전주시 송천동', '31');
-- 위 아래 명령어 동일
INSERT INTO `shopdb`.`memberTBL` (`memberID`, `memberName`, `memberAddress`, `age`) VALUES ('Gasida', '가시다', '전북 전주시 송천동', '31');

## 카톡 멤버 정보 받아서 넣기
INSERT INTO memberTBL VALUES ('User4', '유나', '경기 성남시 분당구', '27');
INSERT INTO memberTBL VALUES ('Minyoung', '민영', '경기도 부천시 중동', '30'); 
INSERT INTO memberTBL VALUES ('Eunji', '은지', '인천 남구 주안동', '28');
INSERT INTO memberTBL VALUES ('Yujeong', '유정', '서울 은평구 증산동', '29'); 

# 조회
SELECT * FROM memberTBL;
SELECT memberName, memberAddress FROM memberTBL;
SELECT * FROM memberTBL ORDER BY `age` ASC;
SELECT * FROM memberTBL WHERE age = 27;

# 행(=데이터=레코드) 삭제
DELETE from memberTBL where memberID='Gasida';
SELECT * FROM memberTBL;

# 행(=데이터=레코드) 변경(=업데이트)
UPDATE memberTBL SET memberID='Yuna' WHERE memberName='유나';
SELECT * FROM memberTBL;

 

 

 

 

 

insert로 데이터 넣고 조회 및 삭제 

 

레코드 변경 ( 업데이트 ) 

 

 

 

 


DB 백업과 복원 

# 예시
USE shopDB;
SELECT * FROM productTBL ;

-- 데이터를 백업 실행

-- 실수로 데이터 삭제함
DELETE FROM productTBL;

SELECT * FROM productTBL ;

-- 사용중인 DB를 복원하면 문제가 생길 수 있으니 우선 다른 DB로 변경한다
USE sys;

-- shopDB 데이터를 복원 실행

USE shopDB;
SELECT * FROM productTBL 

 

 

 

sql 배워야 하는 이유 

brunch.co.kr/@ohmung/26

 

스타트업 마케터의 데이터 분석, SQL 입문하기(1)

마케터가 SQL을 다루면 좋은 이유 | '나도 제발 좀 잘했으면 좋겠다..'누구나 자신이 뛰어났으면 하고 바란다. 개발도 잘하고, 디자인도 잘하고, 마케팅도 잘하고, 영업도 잘하고... 나도 모든 걸

brunch.co.kr

 

기획팀이나 마케팅팀에서 조회 좀 해주세요~ 이러면 백엔드팀 일 못한다... 그러니까 쏘카는 다 배우는 듯 

즉 업무 몰입도가 높아짐 

 

 


#send.html

<HTML>
<HEAD>
<META http-equiv="content-type" content="text/html; charset=utf-8">
</HEAD>
<BODY>

<FORM METHOD="get"  ACTION="receive.php">
	아이디 : <INPUT TYPE ="text" NAME="userID">
	이름 : <INPUT TYPE ="text" NAME="userName">
	<BR><BR>
	<INPUT TYPE="submit"  VALUE="전송">
</FORM>

</BODY>
</HTML>

html 전달 값을 php가 받아서 그걸 db에 전달 

# receive.php

<?php
	$userID = $_GET["userID"];
	$userName = $_GET["userName"];

	echo "전달 받은 아이디 : ", $userID, "<br>";
	echo "전달 받은 이름 : ",$userName, "<br>";
 ?>

 

#combine.php

<?php
   $num1 = 100;
   $num2 = 200;   
   $sum = $num1 + $num2;
?>

<HTML>
<HEAD>
<META http-equiv="content-type" content="text/html; charset=utf-8">
</HEAD>
<BODY>

<h1> 계산 결과는 <?php echo $sum ?> 입니다. </h1>

</BODY>
</HTML>

 

 

<?php
   $db_host="10.1.2.10"; # MySQL IP 주소
   $db_user="root"; # MySQL 계정
   $db_password="qwe123"; # MySQL 암호    
   $db_name=""; # 스키마 이름 
   $con=mysqli_connect($db_host, $db_user, $db_password, $db_name);
   
   # 해당 위의 계정으로 연결시도 해서 되면 성공 구문 아니면 실패 구문 띄우기 
   if ( mysqli_connect_error($con) ) {
	   echo "MySQL 접속 실패 !!", "<br>";
	   echo "오류 원인 : ", mysqli_connect_error();
	   exit();
   }
   echo "MySQL 접속 완전히 성공!!";
   mysqli_close($con);
?>

 

 

 

 

RDS는 대부분 AWS가 해주고 우리는 확장 . 증설 관리 그리고 어플리케이션 최적화만 사용자가하면 됨 

 

 

Amazon RDS Multi-AZ

 

-멀티 AZ 켜놓으면 장애시 주된 DB 장애시 알아서 엔드포인트를 세컨드 DB로 꺽어줘서 서비스를 항상 제공할 수 있다 . 

-real 시간으로 동기화됨 

- secondary가 primary로 승격 

 

READ Replica 옵션 

 

-프라이머리 db에 사용자가 많이 몰려서 db 과부하가 걸리면 힘들다.

그리고 db 보니까 조회 처리가 많아서 .... 스펙 올리면 비용이 더 들어감 이럴 때 read replica를 생성해서 

주 db에서 싱크를 해서 가져옴 일관성있게 유지 

- 특징은 엔드포인트 주소가 다르다 

- read replica는 별도의 주소가 있음 이 주소로 가면 조회만 읽기만 가능 

- 즉 select 로 조회시에는 read replica에 가고 update나 생성 일 때는 주된 db로 가도록 

- 이 걸 중간에 와스단에서 꺽는다 

- 최대 5개까지 생성 가능   

- 읽기 전용 복사본임 !!!! 

 

 

 


amazon rds 실습 

 

RDS 배포 및 Web 과 연동 실습 진행

 

데이터베이스 생성 

 

 

 

 

엔진유형 mysql

템플릿 - 프리티어 

 

db식별자는 리전에서 유일해야함! 즉 숫자 문자 섞는 게 좋음 

 

 

프리티어에서 불가

 

프로덕션에서 사용한다면 무조건 다중az 해줘야 안전하다 

 

db는 기본 외부 엑세스 금지 

웹이나 와스에서만 접근

 

보안 그룹 설정 tcp 3306 허용만 가능하도록 설정 

 

가용 2a 

 

 

지금은 스키마가 없는데 

추가구성에 

 

백업 보존기간 0일 하면 백업 보존 x 

0 하는 이유는 read replica 쓸 수 있는 게 백업이 활성화 해야하니까! 어쩔 수 없이 설정 

 

 

이렇게 유지관리 기간을 설정해 줘야 나중에 aws 가 유지관리를 위해 접근 막을 때 고객 문의 안 온다 

 

액세스 가장 적은 월요일 새벽 등에 설정 

 

 

rds 생성 

 

 

t2.micro 인스턴스가 배포가 됨 

4분 정도 

 

앤드포인트 주소 기억 

 

아까 만든 ec2에서 rds로의 접근 엔드포인트로 함 
초기 db인 anosdb도 생성됨을 확인 

 

# 스키마 생성
CREATE SCHEMA `shopdb`;
USE shopdb;

# 테이블 생성
CREATE TABLE `shopdb`.`memberTBL` (
  `memberID` CHAR(8) NOT NULL,
  `memberName` CHAR(5) NOT NULL,
  `memberAddress` CHAR(20) NULL,
  `age` INT NOT NULL,
  PRIMARY KEY (`memberID`));

# 행(=데이터=레코드) 넣기
INSERT INTO memberTBL VALUES ('Gasida', '가시다', '전북 전주시 송천동', '31');
INSERT INTO memberTBL VALUES ('User4', '유나', '경기 성남시 분당구', '27');

# 조회
SELECT * FROM memberTBL;

 

 

위에는 프리티어  즉 멀티az 세팅 안 됨 

 

다중 az 아니오 ! 

 

해당은 az 장애나면 바로 서비스 불가 // 다중 az 불가니까 

다중 az 하고 싶으면 상단 - 수정 - 

 

다시 대기 인스턴스 생성 누르면 됨! 
즉시 적용 이거 하는 동안 접근 불가인데 우린 테스트니까 즉시  원래는 사람 엑세스 적은 시간에 하도록!! 

 

 

 

나머지는 개발/테스트로 만든다

멀티 az 동작하도록 !! 

 

 

 

 

이걸 통해서 주 db 내용을 부 db가 생성되어서 백업됨 

 

생성 

 

 

멀티az 랑 read replica는 별개의 동작 

 

읽기 복제본 생성 

 

읽기복제본을 다른 리전으로 생성도 가능 

그리고 다중 az는 굳이 하나만 만들거라 

 

그리고 유럽에서 읽기 접근 많이 하면 리전을 유럽으로 

 

read replaca 식별자 만들어서 구분 

 

 

마스터랑 슬레이브 2가지 

primary secondary 

 

 

별도의 복제본이 생성됨 !! 

 

 

 


  1. RDS 삭제
  2. CloudFormation 삭제
728x90

'Cloud > AWS' 카테고리의 다른 글

8주차 - EC2 Auto Scaling  (0) 2021.04.07
7주차 로드밸런서 ELB  (2) 2021.04.04
3주차 네트워킹 서비스  (0) 2021.03.03
2주차 컴퓨팅 서비스  (0) 2021.02.24
1주차 AWS란  (0) 2021.02.17