전통적인 DB는 테이블간 관계에 있어서 유의미한 Data를 찾을 수 있다. 이런 DB를 RDB라고 부른다.
그런데 만약 우리가 검색과 등록에 대한 작업이 계속해서 들어온다면 여러개가 연결된 DB에 대해서 부담이 생길 수 밖에 없다. 그래서 최근 추세는 DATA 입출력이 자주 일어날 수 있도록 NoSQL을 사용하고 있다. NoSQL을 사용하면 기존에 정형화되지 않은 데이터(동영상, 사진)를 넣는것도 가능해진다.
이것보다 더 빠른처리를 위해서 데이터를 Disk가 아닌 RAM에서 처리하자는 것도 있다.
두대 이상의 DB를 DB Cluster로 묶어서 Active DB가 죽었을때 Standby로 옮겨갈 수 있도록 할 수도 있고, DB에 접근을 위한 중간 ip를 두어서 두개의 DB를 왔다갔다 할 수도 있다. 이때 두 DB는 꼭 동기화되어 2중화 구성으로 만들어지게 된다. 단 이러한 구성은 안전성, 보안문제가 발생할 수 있다.
그래서 이를 보완하기 위해서 block-chain 방법을 사용하기도 한다. block-chain은 단위시간안에 일어난 거래기록들을 key값과 함께 hashing하게 된다. 그러면 단위시간에 일어난 거래기록들이 단순화된 코드로 저장된다. 변화가 일어나면 또 key값을 추가한 새로운 코드를 만들어낸다.
이렇게 만들어진 코드들을 하나의 block이라고 하면 각각의 block들이 연결되어 block chain을 만들어낸다.
그래서 기존에는 server-client 환경으로 연결된 상태였으나 현재는 각자가 거래내역을 가지고 있다. 어떤 한명이 데이터를 변경하더라도 다른 client의 거래기록을 보고 변경된 거래기록을 무시할 수 있게된다. 그래서 거래의 투명성과 안전한 보관을 인정받을 수 있다.
결과 public block-chain의 단점은
1. 거래기록을 볼 수 있으나 변경할 수는 없다.
2. 처음블록(genesis block)부터 해서 지금까지의 모든 블록을 모두가 가지고 있어야 한다. 데이터의 양이 너무 많다. 그래서 이 데이터를 거래소가 소유함으로 문제를 해결할 수 있다.
3. 모두가 참여가능
---
MySQL :: Download MySQL Installer
위 사이트에 들어가서 MySQL Workbench를 먼저 설치하자
Customer > MySQL 8.0 Workbench만 설치
root password 'test123'
하고 이제 사용하자
---
CENTOS에서 실행
# 설치하기
rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
yum --enablerepo=mysql80-community install mysql-community-server
mysql --version
# 에러가 났을 경우, 삭제후 재실행
chmod -R 777 /var/lib/mysql
rm -rf /var/lib/mysql/*
systemctl restart mysqld
# 임시 패스워드 확인
cat /var/log/mysqld.log | grep password
# 임시 패스워드로 로그인시
mysql -u root -p'l!DOR03mbH)c'
# 임시 패스워드로 로그인이 안되는 경우
sudo grep 'temporary password' /var/log/mysqld.log
# 하면 추가적으로 임시 패으숴드가 나온다. 이걸로 접속하자.
DB에서 유저 설정하기
-- 들어가서 유저 설정 변경
Alter user 'root'@'localhost' identified by 'TEst!234';
CREATE user 'root'@'%' identified by 'TEst!234';
GRANT ALL PRIVILEES ON *.* TO root@'%'; -- 원격 접속 root의 모든 권한 부여
-- 이거 해야지 적용됨
flush privileges;
SQL
위와같이 SQL이 구성된다.
[ DDL ]
/* BASIC */
-- 어디에 속하지는 않지만 굉장히 자주 사용됨
USE testdb; -- 특정 DB 사용하겠다를 명시
SHOW tables;
SHOW databases;
DESC <table 명>;
/* CREATE */
-- SCHEMA 생성
CREATE SCHEMA 'testdb';
-- DATABASE 생성
CREATE DATABASE '<db명>';
-- TABLE 생성
CREATE TABE 'test'.'usertable' (
username CHAR(10) NOT NULL PRIMARY KEY,
birthyear INT,
addr CHAR(10) NOT NULL DEFAULT 'SEOUL',
userid VARCHAR(45) NOT NULL,
mdate DATE
);
/* ALTER */
-- COLUMN명 변경, COLUMN NULL 속성 변경, DEFAULT 변경
ALTER TABLE 'test'.'usrtable'
RENAME TO 'test1'.'usertable',
CHANGE COLUMN 'username' 'name' CHAR(10) NOT NULL,
CHANGE COLUMN 'userid' 'userid' CHAR(20) NULL DEFAULT NULL,
-- COLUMN DEFAULT 값 변경
ALTER TABLE usertbl ADD homepage2 VARCHAR(40) DEFAULT 'http://www.test.com' NULL;
-- COLUMN 지우기
ALTER TABLE membertbl DROP COLUMN addr;
/* DROP */
DROP DATABASE test1;
DROP DATABASE IF EXISTS test1; -- 이걸 이용한게 정말 많이 나온다.
[ DML ]
/* INSERT */
-- 전체 성분에 데이터 삽입
use testdb
INSERT INTO usertbl VALUE( '철수', 1996, '마포동', '010', '12344123', '2022-03-14', 'user2');
-- 일부 column에만 값을 넣기
INSERT INTO `testdb`.`membertbl` (`userid`, `name`, `phone`) VALUES ('user2', '영희', '01032165498');
[ DCL ]
-- 들어가서 유저 설정 변경
Alter user 'root'@'localhost' identified by 'TEst!234';
CREATE user 'root'@'%' identified by 'TEst!234';
GRANT ALL PRIVILEES ON *.* TO root@'%'; -- 원격 접속 root의 모든 권한 부여
-- 이거 해야지 적용됨
flush privileges;
DBMS
[ 데이터 무결성 ]
1. 무결성검사(hashing)
- 데이터의 위변조 여부를 확인하기 위한 목적으로 활용
- 무결성을 위해서 데이터베이스는 제약 조건이라는 특성을 가짐(PK, FK, unique 등)
2. 자료 관리
- 각각의 데이터를 hash를 이용하여 고정 길이의 키로 저장하고 나중에 데이터를 찾을 떄 이 고정 길이 키를 이용하여 찾는다.
- 만약 고정길이의 키가 짧고 저장할 데이터가 많다면? 겹치는 코드가 나올 수 있다.
- 서로다른 데이터가 동일한 해시 값을 갖게되면 데이터의 무결성을 보장받을 수 없다.
[ 데이터 독립성 ]
- DB 크기를 변경하거나 데이터 파일의 저장소를 변경하더라도 기존에 작성된 응용프로그램은 전형 영향 받지 않는다. 즉, 서로 의존적 관계가 아닌 독립 관계여야 한다.
[ 보안 ]
????
DB의 안정성 향상
48 일차부터 수정하면 됨
'Development(Web, Server, Cloud) > Cloud : 정리' 카테고리의 다른 글
kubernetes(k8s) 정리 part1 (0) | 2022.04.14 |
---|---|
[개발회고] Docker Swarm(Docker Stack) + React + Express(Node Server) + Nginx + Reverse Proxy (0) | 2022.03.31 |
6. Docker 도커 (0) | 2022.03.03 |
5. 클라우드 가상화(KVM, Libvirt) (0) | 2022.02.24 |
4. Cloud 네트워크 (0) | 2022.02.08 |