๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ณธ
1. DB ์ ์
-
์ผ์ ํ ๊ท์น์ผ๋ก ๊ตฌ์กฐํ๋์ด ์ ์ฅ๋๋ ๋ฐ์ดํฐ์ ๋ชจ์
-
ํน์ง
- ์ค์๊ฐ ์ ๊ทผ ๋ฐ ๋์ ๊ณต์ ๊ฐ๋ฅ
-
์ฌ์ฉ ์ด์
- DB ์กด์ฌ ์ด์ ์๋ ํ์ผ ์์คํ
์ด์ฉํ์ฌ ๋ฐ์ดํฐ ๊ด๋ฆฌ
- ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ฐ ํ์ผ ๋จ์๋ก ์ ์ฅํ์ฌ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋
๋ฆฝ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ์ํธ ์ฐ๋ ํ์
- ๋ฌธ์ ์ : ๋ฐ์ดํฐ ์ข
์์ฑ, ๋ฐ์ดํฐ ์ค๋ณต์ฑ, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅX
-
๋ฐ์ดํฐ๋ฒ ์ด์ค ํน์ง
- ๋ฐ์ดํฐ์ ๋
๋ฆฝ์ฑ (๋ฐ์ดํฐ ์์ ํด๋ ๊ด๋ จ๋ ์์ฉํ๋ก๊ทธ๋จ ์์ ํ ํ์X)
- ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ
- ๋ฐ์ดํฐ์ ๋ณด์์ฑ
- ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ
- ๋ฐ์ดํฐ ์ค๋ณต ์ต์ํ
-
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ
- ๋์คํฌ I/O ์ด๋ป๊ฒ ์ค์ด๋๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง (์์ฐจ I/O๊ฐ ๋๋ค I/O๋ณด๋ค ๋น ๋ฆ)
๐ ์ฐธ๊ณ ๐ ๋์คํฌ I/O
- ๋์คํฌ ๋๋ผ์ด๋ธ์ ํ๋ํฐ(์ํ)์ ๋๋ ค์ ์ฝ์ด์ผ ํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ์์น๋ก ๋์คํฌ ํค๋๋ฅผ ์ด๋์ํจ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒ
- ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋์คํฌ ํค๋๋ฅผ ์์ง์ฌ์ ์ฝ๊ณ ์ธ ์์น๋ก ์ฎ๊ธฐ๋ ๋จ๊ณ์์ ๊ฒฐ์ ๋จ
- ๋์คํฌ์ ์ฑ๋ฅ์ ๋์คํฌ ํค๋์ ์์น ์ด๋ ์์ด ์ผ๋ง๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๊ธฐ๋กํ๋๋์ ๋ฐ๋ผ ๊ฒฐ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ํ๋์ ํตํด ๋๋ค I/O ์์ฒด๋ฅผ ์ค์ฌ์ค
2. DBMS ์ ์ (DataBase Management System)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ์ด, ๊ด๋ฆฌํ๋ ํตํฉ ์์คํ
- DBMS๋ง๋ค ์ ์๋ Query๋ฅผ ํตํด ์ฝ์
, ์ญ์ , ์์ , ์กฐํ ์ํ
- ์์ : Node.js ํน์ PHP(์์ฉ ํ๋ก๊ทธ๋จ)์์ MySQL(DBMS)์ ์ด์ฉํ์ฌ DB ์์ ์๋ ๋ฐ์ดํฐ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๊ด๋ จ ๋ก์ง ๊ตฌ์ถ
3. ์ํฐํฐ (Entity)
- ์ฌ๋/์ฅ์/๋ฌผ๊ฑด/์ฌ๊ฑด/๊ฐ๋
๋ฑ ์์ฑ์ ์ง๋ ๋ช
์ฌ
- ์ข
๋ฅ
- ์ฝํ ์ํฐํฐ : ๊ณ ์ ํ๊ฒ ์๋ณํ๊ธฐ ์ํด์ ๋ค๋ฅธ ์ํฐํฐ ํ์
์ผ๋ก๋ถํฐ ํค ์ ํธ๋ฆฌ๋ทฐํธ๋ฅผ ๊ฐ์ ธ์ด (์์ฒด์ ์ผ๋ก ํค๋ฅผ ๋ณด์ ํ์ง ๋ชปํ ์ํฐํฐ)
- ๊ฐํ ์ํฐํฐ : ๊ธฐ๋ณธํค๋ฅผ ๊ฐ์ง ์ํฐํฐ
- ๐๏ธ ์์ : ํ์
4. ๋ฆด๋ ์ด์
(Relation)
- DB์์ ์ ๋ณด๋ฅผ ๊ตฌ๋ถํ์ฌ ์ ์ฅํ๋ ๊ธฐ๋ณธ ๋จ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์
์ํฐํฐ
์ ๋ณด๊ฐ ๋ฆด๋ ์ด์
์ผ๋ก ๊ด๋ฆฌ
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค : ํ
์ด๋ธ
- NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค : ์ปฌ๋ ์
๐ ์ฐธ๊ณ ๐ ํ
์ด๋ธ๊ณผ ์ปฌ๋ ์
์ฐจ์ด
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ๊ณ์ธต์ ์ธ ๊ตฌ์กฐ ์ด๋ฆ ์ฐจ์ด
- โ๏ธ MySQL(RDBMS)์ ๊ตฌ์กฐ
- ๋ ์ฝ๋ โก๏ธ ํ
์ด๋ธ โก๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- โ๏ธ MongoDB(NoSQLDB)์ ๊ตฌ์กฐ
- ๋ํ๋จผํธ โก๏ธ ์ปฌ๋ ์
โก๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค
5. ์์ฑ
- ๋ฆด๋ ์ด์
์์ ๊ด๋ฆฌํ๋ ๊ตฌ์ฒด์ ์ด๋ฉฐ ๊ณ ์ ํ ์ด๋ฆ์ ๊ฐ๋ ์ ๋ณด
- ๐๏ธ ์์ : ์ด๋ฆ, ์์ด๋, ์ฃผ์, ์ ํ๋ฒํธ, ์ฑ๋ณ
6. ๋๋ฉ์ธ
- ๋ฆด๋ ์ด์
์ ํฌํจ๋ ๊ฐ๊ฐ์ ์์ฑ์ด ๊ฐ์ง ์ ์๋ ๊ฐ์ ์งํฉ
- ๐๏ธ ์์ : (์ฑ๋ณ์ ๊ฒฝ์ฐ) {๋จ, ์ฌ}
7. ํ๋์ ๋ ์ฝ๋
-
ํ๋ : ํ๋์ ์ด(column)๋จ์์ ์์ฑ
๋ฐ์ดํฐ
-
๋ ์ฝ๋ : ํ๋์ ํ(row)๋จ์์ ๋ฐ์ดํฐ
-
๐๏ธ ์์ : '์ฑ
' ์ํฐํฐ ์ ์ํ๊ณ , ํ
์ด๋ธ ์์ฑ
- (1) ์์ฑ ์ ์
- ์ด๋ฆ, ์ ์์ ID, ์ถํ๋
๋, ์ฅ๋ฅด, ์์ฑ์ผ์, ์
๋ฐ์ดํธ ์ผ์
- (2) ์์ฑ์ ๋ง๋ ํ์
์ ์
- id(์ฑ
์ ์์ด๋) : INT
- title(์ฑ
์ ์ ๋ชฉ) : VARCHAR(255)
- author_id(์ฑ
์ ์ ์ ์์ด๋) : INT
- publishing_year(์ฑ
์ ์ถํ๋
๋) : VARCHAR(255)
- genre(์ฑ
์ ์ฅ๋ฅด) : VARCHAR(255)
- created_at(์์ฑ ์ผ์) : DATETIME
- updated_at(์
๋ฐ์ดํธ ์ผ์) : DATETIME
- (3) ํด๋น ํ
์ด๋ธ MySQL๋ก ๊ตฌํ
CREATE TABLE book(
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(255),
author_id INT,
publishing_year VARCHAR(255),
genre VARCHAR(255),
created_at DATETIME,
updated_at DATETIME,
PRIMARY KEY (id)
);
8. ํ๋ ํ์
์ข
๋ฅ
9. ๊ด๊ณ
- ํ
์ด๋ธ๊ฐ ์๋ก์ ๊ด๊ณ๊ฐ ์ ์๋์ด ์์
- ๊ด๊ณ ์ข
๋ฅ
- 1:1 ๊ด๊ณ
- ๐๏ธ ์์ : ์ ์ ๋น ์ ์ ์ด๋ฉ์ผ
- 1:N ๊ด๊ณ (ํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๋ง์ ๊ฐ์ฒด ํฌํจํ๋ ๊ด๊ณ)
- ๐๏ธ ์์ : ์ ์ ๋น ์ ํํ ์ฌ๋ฌ๊ฐ ์ํ
- N:M ๊ด๊ณ
- ๐๏ธ ์์ : ํ์๊ณผ ๊ฐ์ (ํ์์ด ์ฌ๋ฌ ๊ฐ์ ๋ฃ๊ณ , ๊ฐ์๋น ์ฌ๋ฌ ํ์ ํฌํจ)
10. ํค
- ํ
์ด๋ธ ์์ฒด์ ์ธ๋ฑ์ค
- ํค ์ข
๋ฅ
- ์ํผํค : ์ ์ผ์ฑ(์ค๋ณตX)
- ํ๋ณดํค : ์ ์ผ์ฑ + ์ต์์ฑ(ํ๋ ์กฐํฉX, ์ต์ ํ๋๋ง ์ฌ์ฉํ์ฌ ํค ํ์ฑ ๊ฐ๋ฅ)
- ๊ธฐ๋ณธํค : ๋ฐ์ดํฐ ๊ณ ์ ํ๊ฒ ์กด์ฌํ๋ ์์ฑ, ์ ์ผ์ฑ + ์ต์์ฑ + ์ค๋ณต X
- ๋์ฒดํค : ํ๋ณดํค ์ค ๊ธฐ๋ณธํค๋ก ์ ํ๋์ง ๋ชปํ ํค
- ์์ฐํค : ์์ฑ ์ค ์ค๋ณต๋ ๊ฐ์ ์ ์ธํ ์์ฑ (๋ณํ ์ ์์)
- ์ธ์กฐํค : ์ธ์์ ์ผ๋ก ์์ฑํ ๊ณ ์ ์๋ณ์ (๋ณดํต ๊ธฐ๋ณธํค๋ก ์ค์ ๋จ)
- ์ธ๋ํค : ๋ค๋ฅธ ํ
์ด๋ธ์ ๊ธฐ๋ณธํค๋ฅผ ๊ทธ๋๋ก ์ฐธ์กฐ (์ค๋ณต O)
๐ ERD (Entity Relationship Diagram)
1. ERD ์ ์
-
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ถ์ ๊ธฐ์ด์ ์ธ ๋ผ๋ ์ญํ (๋ฆด๋ ์ด์
๊ฐ ๊ด๊ณ ์ ์)
-
์์คํ
์ ์๊ตฌ ์ฌํญ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋จ
-
๐๏ธ ์์ : ์์
๋ถ์์ ERD
- (1) ์๊ตฌ ์ฌํญ ์ ์
- ์์
์ฌ์์ 0 ~ n๋ช
์ ๊ณ ๊ฐ์ ๊ด๋ฆฌํ๋ค.
- ๊ณ ๊ฐ์ 0 ~ n๋ช
์ ์ฃผ๋ฌธ์ ๋ฃ์ ์ ์๋ค.
- ์ฃผ๋ฌธ์๋ 1 ~ n๊ฐ์ ์ํ์ด ๋ค์ด๊ฐ๋ค.
2. ์ผํ๋ชฐ ERD ๊ตฌ์ถ
- mysql ์๋ฒ + workbench ๋ค์ด๋ก๋
https://dev.mysql.com/downloads/windows/installer/8.0.html https://dev.mysql.com/downloads/workbench/
- show database; ์ฟผ๋ฆฌ ์ ์ ์๋์ OK
https://github.com/wnghdcjfe/csnote/blob/main/ch4/sample.sql
3. ERD ๋ถ์
CREATE TABLE `customers` (
`customerNumber` int(11) NOT NULL,
`customerName` varchar(50) NOT NULL,
`contactLastName` varchar(50) NOT NULL, `contactFirstName` varchar(50) NOT NULL,
`phone` varchar(50) NOT NULL,
`addressLine1` varchar(50) NOT NULL,
`addressLine2` varchar(50) DEFAULT NULL,
`city` varchar(50) NOT NULL,
`state` varchar(50) DEFAULT NULL,
`postalCode` varchar(15) DEFAULT NULL,
`country` varchar(50) NOT NULL,
`salesRepEmployeeNumber` int(11) DEFAULT NULL, `creditLimit` decimal(10,2) DEFAULT NULL,
PRIMARY KEY (`customerNumber`),
KEY `salesRepEmployeeNumber` (`salesRepEmployeeNumber`), CONSTRAINT `customers_ibfk_1` FOREIGN KEY
(`salesRepEmployeeNumber`) REFERENCES `employees`
(`employeeNumber`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-
decimal(10, 2) = ์์ ๋ถ๋ถ์ ํฌํจํ ์ค์์ ์ด ์๋ฆฌ์ 10์๋ฆฌ, 2๊ฐ์ ์์๋ฅผ ๊ฐ์ง๋ ์ค์
-
์ธ๋ฑ์ฑ์ ํ ํค๋ฅผ 1๊ฐ ๋ ์์ฑํ๊ณ , salesRepEmployeeNumber๋ฅผ ์ธ๋ํค๋ก ์ค์ ํจ
-
orderdetails
- ๋ณตํฉํค (orderNumber + productCode)
- 1์ฃผ๋ฌธ(orderNumber)์์ ์๋ ์ํ ์ฝ๋ ๊ฐ์๊ฐ ๋ง์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ณตํฉํค ํ์
4. MySQL CRUD ์ค์ต
https://www.w3schools.com/mySQl/
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
SELECT *
INTO newtable [IN externaldb] FROM oldtable
WHERE condition;
ADD Email varchar(255);
๐ ํธ๋์ญ์
1. ํธ๋์ญ์
์ ์
- (์ฌ์ฉ์ ์
์ฅ) ์์
์ ๋
ผ๋ฆฌ์ ๋จ์, (์์คํ
์
์ฅ) ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผ ๋๋ ๋ณ๊ฒฝํ๋ ํ๋ก๊ทธ๋จ์ ๋จ์
- DB์์ ๋
ผ๋ฆฌ์ ๊ธฐ๋ฅ์ ์ํํ๊ณ , DB ์ํ๋ฅผ ๋ณํ์ํค๋ ์์
์ ๋จ์
- ์ง์์ด(SQL)๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ ๊ฒ (์ฌ๋ฌ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ํ๋๋ก ๋ฌถ๋ ๋จ์)
- ๊ธฐ๋ฅ
- ์์
์
์์ ์ฑ
๋ณด์ฅ
- ์๋ฒฝํ๊ฒ ์ฒ๋ฆฌํ์ง ๋ชปํ ๊ฒฝ์ฐ ์ ์ํ๋ก ๋ณต๊ตฌํด์ ์์
์ ์ผ๋ถ๋ง ์ ์ฉ๋์ง ์๊ฒ ๋ง๋๋ ๊ธฐ๋ฅ
๐ ์ฐธ๊ณ ๐ Query
- โ๏ธ ์ ์
- DB์ ํน์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ์ผ
- query = ์ง์๋ฌธ = SQL
- โ๏ธ ์ข
๋ฅ
๐ ์ฐธ๊ณ ๐ ํธ๋์ญ์
๊ณผ Lock ์ฐจ์ด
- โ๏ธ Transaction : ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ๋ณด์ฅํ๋ ๊ธฐ๋ฅ
- ํ๋ ํน์ ์ฌ๋ฌ๊ฐ์ ๋ณ๊ฒฝ ์์
์ ์ํํ๋ ์ฟผ๋ฆฌ์ ๊ด๊ณ์์ด
- ๋
ผ๋ฆฌ์ ์ธ ์์
์ด 100% ์ ์ฉ๋๊ฑฐ๋ ์๋ฌด๊ฒ๋ ์ ์ฉ๋์ง ์๋๋ก ๋ณด์ฅํจ
- โ๏ธ Lock : ๋์์ฑ ์ ์ดํ๋ ๊ธฐ๋ฅ
- ์ฌ๋ฌ ์ปค๋ฅ์
์์ ๋์์ ๋์ผํ ์์(๋ ์ฝ๋/ํ
์ด๋ธ)์ ์์ฒญํ ๊ฒฝ์ฐ
- ์์๋๋ก ํ ์ปค๋ฅ์
๋ง ๋ณ๊ฒฝํ๊ฒ ํด์ค
2. commit๊ณผ rollback
-
ํธ๋์ญ์
์์
- ํธ๋์ญ์
์ํ์ Connection ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉ
setAutoCommit(false)
๋ก ํธ๋์ญ์
์์์ ์ ์ธ (JDBC ๊ธฐ๋ณธ ์ค์ ์ผ๋ก DB์์
์ํ ์งํ ์๋ ์ปค๋ฐ ์ต์
ํ์ฑํ ๋์ด์์ด์ false๋ก ์ค์ ํจ)
-
ํธ๋์ญ์
์ข
๋ฃ
- ์์๋๋ฉด
commit()
๋๋ rollback()
ํธ์ถ๋ ๋๊น์ง ํ๋์ ํธ๋์ญ์
-
ํธ๋์ญ์
์ ํ
-
ํธ๋์ญ์
์ด ์งํ์ค์ผ ๋ ์ถ๊ฐ ํธ๋์ญ์
์งํ์ ์ด๋ป๊ฒ ํ ์ง ๊ฒฐ์ ํ๋ ๊ฒ
-
์ฌ๋ฌ ํธ๋์ญ์
์ ํ๋์ ํธ๋์ญ์
์ผ๋ก ๋ฌถ์
-
๊ธฐ์กด ํธ๋์ญ์
์ ์ฐธ์ฌ / ๋ณ๋์ ํธ๋์ญ์
์ผ๋ก ์งํ / ์๋ฌ ๋ฐ์์ํด
-
Spring ํ๋ ์์ํฌ์์ @Transactional
์ ๋ํ
์ด์
์ ํตํด ์ฌ๋ฌ ์ฟผ๋ฆฌ ์ฝ๋๋ฅผ 1๊ฐ์ ํธ๋์ญ์
์ผ๋ก ์ฒ๋ฆฌํจ
@Service
@Transactional(readOnly = true)
public class MemberService{
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
- ํธ๋์ญ์
์ ํ ์ฌ์ฉ์ ๋
ผ๋ฆฌ ํธ๋์ญ์
๊ฐ๋
์ฌ์ฉ๋จ
- ๋ฌผ๋ฆฌ ํธ๋์ญ์
: ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฉ๋๋ ํธ๋์ญ์
(Connection์ ํตํด commit/rollbackํ๋ ๋จ์)
- ๋
ผ๋ฆฌ ํธ๋์ญ์
: ์คํ๋ง์ด ํธ๋์ญ์
๋งค๋์ ๋ฅผ ํตํด ํธ๋์ญ์
์ ์ฒ๋ฆฌํ๋ ๋จ์
-
๐๏ธ ์์ : ๊ฒ์ํ์ ๊ธ ์์ฑํ๋ ๊ธฐ๋ฅ
- ๊ธ์ ์์ ์ ์ฅํ๋ ๊ธฐ๋ฅ(A)์ด ๊ธ ์์ฑ ์ค๊ฐ์ ์ํ๋๊ณ , ๋์์ ๋ก๊น
(B)์ ํด์ผํ๋ ์ํฉ
- ๋ง์ฝ, ๋ก๊น
(B) ์์
์์ ์์ธ ๋ฐ์๋ ๊ฒฝ์ฐ, ํธ๋์ญ์
์ ํ ์ต์
์ด Defaul์ด๋ฉด ๋ก๊น
(B)์ด Rollback ์งํ๋๋ฉด์ ์์ ์ ์ฅ ๊ธฐ๋ฅ(A)๋ ํจ๊ป Rollback ๋ฐ์
- ํ์ง๋ง, ์์ ๊ฒฝ์ฐ A๊ฐ Rollback ๋๋ฉด ์๋๊ธฐ ๋๋ฌธ์, ํธ๋์ญ์
์ ํ ์์ฑ ์ค์ ํ์ํจ
๐ ์ฐธ๊ณ ๐ ํธ๋์ญ์
์ ํ ์์ฑ
- REQUIRED
- ํธ๋์ญ์
์ด ํ์ํ๊ณ , ์์ผ๋ฉด ์๋ก ๋ง๋ฆ (Default ์์ฑ)
- ๊ธฐ์กด ํธ๋์ญ์
์์ : ์๋ก์ด ํธ๋์ญ์
์์ฑํจ
- ๊ธฐ์กด ํธ๋์ญ์
์์ : ๊ธฐ์กด ํธ๋์ญ์
์ ์ฐธ์ฌํจ
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋
ผ๋ฆฌ ํธ๋์ญ์
2๊ฐ๋ฅผ ๋ฌถ์ด 1๊ฐ์ ๋ฌผ๋ฆฌ ํธ๋์ญ์
์ ์ฌ์ฉํจ
- ๋ชจ๋ ๋
ผ๋ฆฌ ํธ๋์ญ์
์ด ์ปค๋ฐ๋์ด์ผ ๋ฌผ๋ฆฌ ํธ๋์ญ์
์ปค๋ฐ๋จ
- ํ๋์ ๋
ผ๋ฆฌ ํธ๋์ญ์
์ด๋ผ๋ ๋กค๋ฐฑ๋๋ฉด ๋ฌผ๋ฆฌ ํธ๋์ญ์
๋กค๋ฐฑ๋จ
- ํธ๋์ญ์
๋งค๋์ ์ ์ํด ๊ด๋ฆฌ๋๋ ๋
ผ๋ฆฌ ํธ๋์ญ์
์ด ์กด์ฌํ๋ฏ๋ก ์ปค๋ฐ ์ด 2ํ(๋ด๋ถ 1ํ, ์ธ๋ถ 1ํ) ์คํ
- REQUIRES_NEW
- ํญ์ ์๋ก์ด ํธ๋์ญ์
์ด ํ์ํจ
- ๊ธฐ์กด ํธ๋์ญ์
์์ : ์๋ก์ด ํธ๋์ญ์
์์ฑ
- ๊ธฐ์กด ํธ๋์ญ์
์์ : ๊ธฐ์กด ํธ๋์ญ์
์ ๋ณด๋ฅ์ํค๊ณ ์๋ก์ด ํธ๋์ญ์
์์ฑํจ
- ์ธ๋ถ/๋ด๋ถ ํธ๋์ญ์
์ ์์ ํ ๋ถ๋ฆฌํ๋ ์ ํ ์์ฑ (๋ด๋ถ ํธ๋์ญ์
๋กค๋ฐฑ์ด ์ธ๋ถ ํธ๋์ญ์
๋กค๋ฐฑ์ ์ํฅ X)
- ๊ฐ๊ฐ ํธ๋์ญ์
๋ณ๋ก ์ปค๋ฐ๊ณผ ๋กค๋ฐฑ์ด ์ํ๋จ (๊ฐ๊ฐ์ DB Connection ์ฌ์ฉ๋จ, 1๊ฐ์ HTTP ์์ฒญ์ ๋ํด 2๊ฐ์ Connection ์ฌ์ฉ)
- ๋ด๋ถ ํธ๋์ญ์
์ด ์ฒ๋ฆฌ ์ค์ผ ๊ฒฝ์ฐ, ์ธ๋ถ ํธ๋์ญ์
์ด ๋๊ธฐํจ (DB Connection ๊ณ ๊ฐ ์ฃผ์)
- SUPPORTS
- ํธ๋์ญ์
์ด ์์ผ๋ฉด ์ง์ํจ (ํธ๋์ญ์
์ด ์์ด๋ ๋จ)
- ๊ธฐ์กด ํธ๋์ญ์
์์ : ํธ๋์ญ์
์์ด ์งํํจ
- ๊ธฐ์กด ํธ๋์ญ์
์์ : ๊ธฐ์กด ํธ๋์ญ์
์ ์ฐธ์ฌํจ
- MANDATORY
- ํธ๋์ญ์
์ด ์๋ฌด์ (ํธ๋์ญ์
๋ฐ๋์ ํ์ํจ)
- ๊ธฐ์กด ํธ๋์ญ์
์์ : illegalTransactionStateException ์์ธ ๋ฐ์
- ๊ธฐ์กด ํธ๋์ญ์
์์ : ๊ธฐ์กด ํธ๋์ญ์
์ ์ฐธ์ฌํจ
- NOT_SUPPORTED
- ํธ๋์ญ์
์ ์ง์ํ์ง ์์ (ํธ๋์ญ์
์์ด ์งํํจ)
- ๊ธฐ์กด ํธ๋์ญ์
์์ : ํธ๋์ญ์
์์ด ์งํํจ
- ๊ธฐ์กด ํธ๋์ญ์
์์ : ๊ธฐ์กด ํธ๋์ญ์
์ ๋ณด๋ฅ์ํค๊ณ ํธ๋์ญ์
์์ด ์งํํจ
- NEVER
- ํธ๋์ญ์
์ ์ฌ์ฉํ์ง ์์ (๊ธฐ์กด ํธ๋์ญ์
๋ ํ์ฉํ์ง X)
- ๊ธฐ์กด ํธ๋์ญ์
์์ : ํธ๋์ญ์
์์ด ์งํ
- ๊ธฐ์กด ํธ๋์ญ์
์์ : illegalTransactionStateException ์์ธ ๋ฐ์
- NESTED
- ์ค์ฒฉ(์์) ํธ๋์ญ์
์์ฑํจ
- ๊ธฐ์กด ํธ๋์ญ์
์์ : ์๋ก์ด ํธ๋์ญ์
์ ์์ฑํจ
- ๊ธฐ์กด ํธ๋์ญ์
์์ : ์ค์ฒฉ ํธ๋์ญ์
์ ๋ง๋ฆ
- ๋
๋ฆฝ์ ์ธ ํธ๋์ญ์
(REQUIRES_NEW)์ด ์๋ ์ด๋ฏธ ์งํ์ค์ธ ํธ๋์ญ์
์ ์ค์ฒฉ(์์) ํธ๋์ญ์
์์ฑ
- ๋ถ๋ชจ ํธ๋์ญ์
์ ์ํฅ(์ปค๋ฐ๊ณผ ๋กค๋ฐฑ)์ ๋ฐ์ง๋ง, ์ธ๋ถ์ ์ํฅ์ ์ฃผ์ง ์์
- ์ค์ฒฉ ํธ๋์ญ์
์ด ๋กค๋ฐฑ์ด ๋์ด๋ ์ธ๋ถ ํธ๋์ญ์
์ ์ปค๋ฐ ๊ฐ๋ฅํ์ง๋ง, ์ธ๋ถ ํธ๋์ญ์
์ด ๋กค๋ฐฑ๋ ๊ฒฝ์ฐ ์ค์ฒฉ ํธ๋์ญ์
๋ ํจ๊ป ๋กค๋ฐฑ๋จ
4. ํธ๋์ญ์
ํน์ง (ACID)
- (1) ์์์ฑ atomicity
- ํธ๋์ญ์
์ด DB์ ๋ชจ๋ ๋ฐ์๋๊ฑฐ๋, ์ ํ ๋ฐ์๋์ง ์์ (All or Nothing)
- ํธ๋์ญ์
์ค๊ฐ์ ๋ฌธ์ ๋ฐ์ํ ๊ฒฝ์ฐ, ํธ๋์ญ์
์ ํด๋นํ๋ ์ด๋ ํ ์์
๋ ์ํ๋์ง ์๊ณ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์์ ๊ฒฝ์ฐ์๋ง ๋ชจ๋ ์์
์ํํจ
- (2) ์ผ๊ด์ฑ consistency
- ํธ๋์ญ์
์์
์ฒ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ํญ์ ๋์ผํจ (ํ์ฉ๋ ๋ฐฉ์์ผ๋ก๋ง ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ)
- ํธ๋์ญ์
์ด ์ผ์ด๋๊ธฐ ์ ์ ์ํฉ๊ณผ ๋์ผํ๊ฒ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ ๋ณด์ฅ
- (3) ๊ฒฉ๋ฆฌ์ฑ isolation
- ํ๋์ ํธ๋์ญ์
์ ๋ค๋ฅธ ํธ๋์ญ์
์ ๋ผ์ด๋ค ์ ์์ (๊ฐ์ญ ๋ถ๊ฐ๋ฅ)
- ๊ฐ๊ฐ์ ํธ๋์ญ์
์ ์๋ก์ ๊ฐ์ญ์์ด ๋
๋ฆฝ์ ์ผ๋ก ์ํ
- (4) ์ง์์ฑ durability
- ํธ๋์ญ์
์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๋ฉด ์๊ตฌ์ ์ผ๋ก ๊ฒฐ๊ณผ์ ์ ์ฅ๋จ (commit)
๐ ์ฐธ๊ณ ๐ ๋ฌด๊ฒฐ์ฑ
- ๋ฐ์ดํฐ์ ์ ํ์ฑ, ์ผ๊ด์ฑ, ์ ํจ์ฑ์ ์ ์งํ๋ ๊ฒ
5. ํธ๋์ญ์
์ ๊ฒฉ๋ฆฌ ์์ค
- ํธ๋์ญ์
์ด ์์ฐจ์ ์ผ๋ก ์คํ๋ ๊ฒฝ์ฐ : ๊ฒฉ๋ฆฌ์ฑโฌ๏ธ, ๋์์ฑโฌ๏ธ, ์ฑ๋ฅโฌ๏ธ
- ๊ฒฉ๋ฆฌ ์์ค ๋จ๊ณ
- Serializable : ์ด์ํ์ ๋ฐ์ X (๊ฒฉ๋ฆฌ์ฑโฌ๏ธ)
- Repatable Read : ํฌํ
๋ฆฌ๋ ๋ฐ์ ๊ฐ๋ฅ
- Read Commited : + ๋ฐ๋ณต ๊ฐ๋ฅํ์ง ์์ ์กฐํ ๋ฐ์ ๊ฐ๋ฅ
- Read Uncommited : + ๋ํฐ ๋ฆฌ๋ ๋ฐ์ ๊ฐ๋ฅ (๊ฒฉ๋ฆฌ์ฑโฌ๏ธ)
Isolation Level | Dirty reads | Non-repeatable reads | Phantoms |
---|
Read Uncommited | May occur | May occur | May occur |
Read Commited | Don't occur | May occur | May occur |
Repeatable Read | Don't occur | Don't occur | May occur |
Serializable | Don't occur | Don't occur | Don't occur |
set session transaction isolation level read uncommitted;
-
Serializable
- ์ปค๋ฐ ์๋ฃ๋ ๋ฐ์ดํฐ๋ง ์กฐํ ๊ฐ๋ฅ
- ํธ๋์ญ์
์ ์์ฐจ์ ์ผ๋ก ์งํ (๊ฐ์ญ ๋ฐ์ X)
- ์ฌ๋ฌ ํธ๋์ญ์
์ด ๋์์ ๊ฐ์ ํ์ ์ ๊ทผ ๋ถ๊ฐ
-
Repatable Read
- ์ปค๋ฐ ์๋ฃ๋ ๋ฐ์ดํฐ๋ง ์กฐํ ๊ฐ๋ฅ
- ๊ฐ์ ํ์ ๋ฐ๋ณตํด์ ์กฐํํ๋๋ผ๋ ๋์ผํ ๊ฒฐ๊ณผ ๋ณด์ฅ
- ํ ํธ๋์ญ์
์์ ์์ ํ ํ์ ๋ค๋ฅธ ํธ๋์ญ์
์ด ์์ ๋ถ๊ฐ / ์๋ก์ด ํ ์ถ๊ฐ ๊ฐ๋ฅ (โก๏ธ ํฌํ
๋ฆฌ๋ ๋ฐ์)
- MySQL8.0์ innoDB์ ๊ธฐ๋ณธ๊ฐ
-
Read Commited
- ์ปค๋ฐ ์๋ฃ๋ ๋ฐ์ดํฐ๋ง ์กฐํ ๊ฐ๋ฅ
- ๊ฐ์ ํ์ ๋ฐ๋ณตํด์ ์กฐํํ๋๋ผ๋ ๋์ผํ ๊ฒฐ๊ณผ ๋ณด์ฅX
- ํ ํธ๋์ญ์
์์ ์์ ํ ํ์ ๋ค๋ฅธ ํธ๋์ญ์
์ด ์์ + ์๋ก์ด ํ ์ถ๊ฐ ๊ฐ๋ฅ (โก๏ธ ํฌํ
๋ฆฌ๋, ๋ฐ๋ณต ๊ฐ๋ฅํ์ง ์์ ์กฐํ ๋ฐ์)
- PostgreSQL, SQL Server, ์ค๋ผํด์ ๊ธฐ๋ณธ๊ฐ
-
Read Uncommited
- ์ปค๋ฐํ์ง ์์ ๋ฐ์ดํฐ ์กฐํ ๊ฐ๋ฅ
- ์๋ ๊ฐ์ฅ ๋น ๋ฆ
6. ํธ๋์ญ์
์ด์ ํ์
-
(1) ํฌํ
๋ฆฌ๋(Phantom reads)
- ํ ํธ๋์ญ์
๋ด์์ ๋์ผํ ์ฟผ๋ฆฌ๋ฅผ 2๋ฒ ์ด์ ๋ณด๋์ ๋ (๋ค๋ฅธ ํธ๋์ญ์
์ ์ํฅ์ผ๋ก) ์กฐํ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฆ
- ๐๏ธ ์์ : ์๋ก์ด ๋ ์ฝ๋ ์ถ๊ฐ ๋ฐ ์ญ์ ๋์ด ๋ฐ์
-
(2) ๋ฐ๋ณต ๊ฐ๋ฅํ์ง ์์ ์กฐํ (Nonrepatable Reads)
- ํ ํธ๋์ญ์
๋ด์ ๊ฐ์ ํ์ 2๋ฒ ์ด์ ์กฐํ๊ฐ ๋ฐ์ ํ์ ๋, ๊ทธ ๊ฐ์ด ๋ค๋ฅธ ๊ฒ
- ๐๏ธ ์์ : ํธ๋์ญ์
A๋ SELECTํ๋ ๊ตฌ๋ฌธ์ด๊ณ , ํธ๋์ญ์
B๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝํ๋ ๊ตฌ๋ฌธ์ผ ๊ฒฝ์ฐ ํธ๋์ญ์
A๋ B๋๋ฌธ์ ๋ฐ๋ณต ์ํ์ ๋ค๋ฅธ ๊ฒฐ๊ณผ ๊ฐ์ ธ์ด
-
(3) ๋ํฐ ๋ฆฌ๋ (Dirty Reads)
- ํ ํธ๋์ญ์
์ด ๋ค๋ฅธ ํธ๋์ญ์
์ ์์ง ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
- ๐๏ธ ์์ : ํธ๋์ญ์
A๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ , ์ปค๋ฐํ๊ธฐ ์ ์ ํธ๋์ญ์
B๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๊ฒฝ์ฐ ์๋ชป๋ ๋ฐ์ดํฐ ์ฝ์
๐ ์ฐธ๊ณ ๐ ํธ๋์ญ์
์ฌ์ฉ์ ์ฃผ์
- ํธ๋์ญ์
์ ๊ผญ ํ์ํ ์ต์ํ ์ฝ๋์๋ง ์ ์ฉํ๊ธฐ
- ์ผ๋ฐ์ ์ผ๋ก DB Connection ๊ฐ์๋ ์ ํ์ ์ด๋ฏ๋ก, ๊ฐ ๋จ์ ํ๋ก๊ทธ๋จ์์ Connection ์์ ์๊ฐ์ด ๊ธธ์ด์ง๋ฉด ์ฌ์ฉ ๊ฐ๋ฅํ ์ฌ์ Connection ๊ฐ์๊ฐ ์ค์ด๋ฆ
- ๋ฐ๋ผ์, ํธ๋์ญ์
๋ฒ์ ์ต์ํ
๐ ๊ด๊ณํ๋ฐ์ดํฐ๋ฒ ์ด์ค์ NoSQL ์ฐจ์ด
1. RDBMS (๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
)
-
SQL
์ธ์ด๋ฅผ ์ฌ์ฉํด ํ
์ด๋ธ, ํ, ์ด์ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค
-
์ข
๋ฅ : MySQL, PostgreSQL, ์ค๋ผํด(PL/SQL), SQL Server(T-SQL), MSSQL(SQL)
-
DBMS์ ์ฐจ์ด์
- ํ
์ด๋ธ๊ฐ ๊ด๊ณ(์ธ๋ํค ๋ฑ)๋ฅผ ๋งบ๊ณ ์์ด DBMS๋ณด๋ค ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ ๊ด๋ฆฌ ๊ฐ๋ฅ
-
์ฅ์
- ๋ฐ์ดํฐ ์ค๋ณต ์์
- ๋ช
ํํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ณด์ฅ
-
๋จ์
- ์์คํ
์ด ์ปค์ง ๊ฒฝ์ฐ JOIN๋ฌธ์ด ๋ง์ ๋ณต์กํ ์ฟผ๋ฆฌ
- ์คํค๋ง๋ก ์ธํด ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ์ฐํ์งX (๋ณ๊ฒฝ์ ์ด๋ ค์)
- ์ฑ๋ฅ ํฅ์์ ์ํด์๋ ์๋ฒ ์ฑ๋ฅ ํฅ์์ํค๋ Scale-up๋ง ์ง์ (๋น์ฉ ํฌ๊ฒ ๋์ด๋จ)
-
์ฌ์ฉ : ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ช
ํํ์ฌ ๋ณ๊ฒฝ๋ ์ฌ์ง๊ฐ ์๊ณ , ๋ช
ํํ ์คํค๋ง๊ฐ ์ค์ํ ๊ฒฝ์ฐ ์ฌ์ฉ
2. NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค
SQL
์ธ์ด ์ฌ์ฉํ์ง ์๋ ๋ค๋ฅธ ํํ์ ๋ฐ์ดํฐ ์ ์ฅ ๊ธฐ์
- ์ข
๋ฅ : MongoDB, redis
- RDBMS์ ์ฐจ์ด์
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ํฌ๊ธฐํ์ง๋ง, ๋น์ฉ์ ๊ณ ๋ คํ์ฌ ์ฌ๋ฌ ๋์ ๋ฐ์ดํฐ ๋ถ์ฐ ์ ์ฅ
- ์ฅ์
- ์ ํํ ์คํค๋ง, ํ์ฅ์ฑ
- ๋๋์ ๋ถ์ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์กฐํ์ ์ฉ์ด
- ์ฑ๋ฅ ํฅ์์ ์ํด์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ณณ์ ๋ถ์ฐํ๋ Scale-out๋ ๊ฐ๋ฅ
- ์ฐ๊ธฐ/์ฝ๊ธฐ ์ฑ๋ฅ ํนํ, 2์ฐจ ์ธ๋ฑ์ค ์ง์, ์คํ ์ค๋ฉ ์ง์
- ๋จ์
- ๋ฐ์ดํฐ ์ค๋ณต ๋ฐ์ ๊ฐ๋ฅ (์ค๋ณต๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ชจ๋ ์ปฌ๋ ์
์์ ํ์)
- ์คํค๋ง๊ฐ ์กด์ฌํ์ง ์์, ๋ช
ํํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฅ X
- ์ฌ์ฉ : ์ ํํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ์ ์๊ณ , ๋ฐ์ดํฐ ๋ณ๊ฒฝ/ํ์ฅ๋ ์ ์๋ ๊ฒฝ์ฐ
๐ ์ฐธ๊ณ ๐ ์ ์ฅ ๋ฐฉ์์ ๋ฐ๋ฅธ NoSQL ๋ถ๋ฅ
- โ๏ธ Key-Value Model
- Redis
- ํค 1๊ฐ๋ก ๋ฐ์ดํฐ 1๊ฐ ์ ์ฅ/์กฐํํ๋ ๋จ์ผ ํค-๊ฐ ๊ตฌ์กฐ
- ์ฅ์ : ๋จ์ํ ์ ์ฅ ๊ตฌ์กฐ, ๊ณ ์ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ์ ์ต์ ํ
- ๋จ์ : ๋ณต์กํ ์กฐํ ์ฐ์ฐ ์ง์X, 1๊ฐ์ ์๋น์ค ์์ฒญ์ ๋ค์์ ๋ฐ์ดํฐ ์กฐํ/์์ ์ฐ์ฐ ๋ฐ์ํ๋ฉด ํธ๋์ญ์
์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ์ฌ ๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ณด์ฅ ๋ชปํจ
- ์ฌ์ฉ : ์ฌ์ฉ์์ ํ๋กํ ์ ๋ณด, ์น ์๋ฒ ํด๋ฌ์คํฐ๋ฅผ ์ํ ์ธ์
์ ๋ณด, URL ๋จ์ถ ์ ๋ณด ์ ์ฅ
- โ๏ธ Document Model
- MongoDB
- ํค 1๊ฐ์ ๊ตฌ์กฐํ๋ ๋ฌธ์๋ฅผ ์ ์ฅ/์กฐํ (๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฌ)
- ํค๋ ๋ฌธ์์ ๋ํ ID๋ก ํํ๋จ
- ์ ์ฅ๋ ๋ฌธ์๋ ์ปฌ๋ ์
์ผ๋ก ๊ด๋ฆฌํ๊ณ , ๋ฌธ์ ์ ์ฅ๊ณผ ๋์์ ๋ฌธ์ ID์ ๋ํ ์ธ๋ฑ์ค ์์ฑ
- ์ธ๋ฑ์ค ์ฌ์ฉํ์ฌ O(1) ์๊ฐ ์์ ๋ฌธ์ ์กฐํ ๊ฐ๋ฅ
- B-Tree ์ธ๋ฑ์ค ์ฌ์ฉํ์ฌ 2์ฐจ ์ธ๋ฑ์ค ์์ฑํจ (ํฌ๊ธฐ ์ปค์ง์๋ก ์๋ก์ด ๋ฐ์ดํฐ ์
๋ ฅ/์ญ์ ์ ์ฑ๋ฅ ์ ํ๋จ)
- ์ฌ์ฉ : ์ค์ ์ง์ค์ ๋ก๊ทธ ์ ์ฅ, ํ์๋ผ์ธ ์ ์ฅ, ํต๊ณ ์ ๋ณด ์ ์ฅ
- โ๏ธ Column Model
- Google์ ๋น
ํ
์ด๋ธ
- 1๊ฐ์ ํค์ ์ฌ๋ฌ ๊ฐ์ ์ปฌ๋ผ ์ด๋ฆ๊ณผ ์ปฌ๋ผ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ ์ ์ฅ/์กฐํ
- ๋น
ํ
์ด๋ธ ๊ฐ๋
(Row Key, Column Key, Column Family ๋ฑ) ์ฌ์ฉ
- ์ปฌ๋ผ ๋จ์๋ก ์ ์ฅ, ์ปฌ๋ผ ์ด๋ฆ, ์ปฌ๋ผ ๊ฐ, ํ์์คํฌํ๋ก ๊ตฌ์ฑ๋จ (๋ชจ๋ ์ปฌ๋ผ์ ํญ์ ํ์ ์คํฌํ ๊ฐ๊ณผ ํจ๊ป ์ ์ฅ)
- ์ฝ๊ธฐ๋ณด๋ค ์ฐ๊ธฐ์ ์ต์ ํ (๋น ๋ฅธ ์๊ฐ ์์ ๋๋์ ๋ฐ์ดํฐ ์
๋ ฅ/์กฐํํ๋ ์๋น์ค ๊ตฌํ์ ์ ํฉ)
- ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ์ปค๋ฐ๋ก๊ทธ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ ํ ์๋ตํ์ฌ ๋น ๋ฅธ ์๋ต์๋ ์ ๊ณต
- ์ฌ์ฉ : ์ฑํ
๋ด์ฉ ์ ์ฅ, ์ค์๊ฐ ๋ถ์์ ์ํ ๋ฐ์ดํฐ ์ ์ฅ์
3. MySQL
- ๋๋ถ๋ถ ์ด์์ฒด์ ์ ํธํ๋๊ณ , ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ํน์ง
- C, C++๋ก ๋ง๋ฆ
- B-ํธ๋ฆฌ ๊ธฐ๋ฐ์ ์ธ๋ฑ์ค
- ์ค๋ ๋ ๊ธฐ๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์์คํ
- ๋งค์ฐ ๋น ๋ฅธ ์กฐ์ธ
- ์ต๋ 64๊ฐ์ ์ธ๋ฑ์ค
- ๋์ฉ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ํด ์ค๊ณ๋จ
- ๋กค๋ฐฑ, ์ปค๋ฐ, ์ด์ค ์ํธ ์ง์ ๋ณด์
- MySQL์ ์คํ ๋ฆฌ์ง ์์ง ์ํคํ
์ฒ
- ๋ชจ๋์ ์ํคํ
์ฒ๋ก ์ฝ๊ฒ ์คํ ๋ฆฌ์ง์์ง ๋ฐ๊ฟ ์ ์์
- ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ง, ํธ๋์ญ์
์ฒ๋ฆฌ, ๊ณ ๊ฐ์ฉ์ฑ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ์คํ ๋ฆฌ์ง ์์ง ์์ ์ปค๋ฅํฐ API ๋ฐ ์๋น์ค ๊ณ์ธต์ ํตํด MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฝ๊ฒ ์ํธ ์์ฉ ๊ฐ๋ฅ
- ์ฟผ๋ฆฌ ์บ์ ์ง์
- ์
๋ ฅ๋ ์ฟผ๋ฆฌ๋ฌธ์ ๋ํ ์ ์ฒด ๊ฒฐ๊ณผ ์งํฉ์ ์ ์ฅํจ
- ์ฌ์ฉ์๊ฐ ์์ฑํ ์ฟผ๋ฆฌ๊ฐ ์บ์์ ์๋ ์ฟผ๋ฆฌ์ ๋์ผํ๋ฉด, ์๋ฒ๋ ๋จ์ํ ๊ตฌ๋ฌธ ๋ถ์, ์ต์ ํ ๋ฐ ์คํ์ ๊ฑด๋๋ฐ๊ณ ์บ์์ ์ถ๋ ฅ๋ง ํ์ํจ
4. PostgreSQL
- MySQL ๋ค์์ผ๋ก ๋ง์ด ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค (์ธํ๋ฉ์์ ์ฌ์ฉ)
- ํน์ง
- ๋์คํฌ ์กฐ๊ฐ์ด ์ฐจ์งํ๋ ์์ญ ํ์ํ ์ ์๋ ์ฅ์น(VACUUM) ์์
- ์ต๋ ํ
์ด๋ธ ํฌ๊ธฐ 32TB
- SQL๋ฟ๋ง ์๋๋ผ JSON์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ ์ ๊ทผ ๊ฐ๋ฅ
- ์ง์ ์๊ฐ์ ๋ณต๊ตฌํ๋ ๊ธฐ๋ฅ
- ๋ก๊น
, ์ ๊ทผ์ ์ด, ์ข
ํฉ๋ ํธ๋์ญ์
, ๋ฐฑ์
๊ฐ๋ฅ
๐ ์ฐธ๊ณ ๐ JSON (JavaScript Object Notation)
- ์ฌ๋์ด ์ฝ์ ์ ์๋ ํ
์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ ์ฅ, ์ ์ก, ๊ณต์ ํ๋ ํ์ค ํ์ผ ํ์
- JSON ํ์ผ์ .json ํ์ฅ์๋ก ์ ์ฅ
- JavaScript์์ ํ์๋์ง๋ง, ์ธ์ด ๋
๋ฆฝ์ ์ธ ๋ฐ์ดํฐ ํ์
5. MongoDB
- wiredtiger ์์ง์ด ๊ธฐ๋ณธ์ผ๋ก ์ฅ์ฐฉ๋ ํค-๊ฐ ๋ฐ์ดํฐ ๋ชจ๋ธ์์ ํ์ฅ๋ document ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ํน์ง
- JSON์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ ์ ๊ทผ ๊ฐ๋ฅ (Binary JSON ํํ(BSON)๋ก ์ ์ฅ๋จ)
- ํ์ฅ์ฑ์ด ๋ฐ์ด๋๊ณ , ๋น
๋ฐ์ดํฐ ์ ์ฅ์ ์ฑ๋ฅ์ด ์ข์
- ๊ณ ๊ฐ์ฉ์ฑ, ์ค๋ฉ, ๋ ํ๋ฆฌ์นด์
์ง์
- ์คํค๋ง๋ฅผ ์ ํ์ง ์๊ณ ๋ฐ์ดํฐ ์ฝ์
๊ฐ๋ฅ (๋ค์ํ ๋๋ฉ์ธ์ DB๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ถ์ ๋ฐ ๋ก๊น
๊ตฌํ์ ํธ๋ฆฌ)
- document ์์ฑํ ๋๋ง๋ค ๋ค๋ฅธ ์ปฌ๋ ์
์์ ์ค๋ณต๋ ๊ฐ์ ๊ฐ๊ธฐ ํ๋ ObjectID ์์ฑ๋จ
- ObjectID(๊ธฐ๋ณธํค) : ์ ๋์ค ์๊ฐ ๊ธฐ๋ฐ์ ํ์์คํฌํ(4๋ฐ์ดํธ). ๋๋๊ฐ(5๋ฐ์ดํธ), ์นด์ดํฐ(3๋ฐ์ดํธ)๋ก ๊ตฌ์ฑ
5. MongoDB ํน์ง
-
(1) Key์ value ํํ์ document
_id
ํํ์ ๊ณ ์ ํ ์์ด๋
- key์ ๊ธธ์ด๋ DB์ ์ ์ฅ
- JSON ํํ๋ก ์ฟผ๋ฆฌ ์์ฑ ๋ฐ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ BSONํํ๋ก DB์ ์ฝ์
/์ถ์ถ ๊ฐ๋ฅ
- type ๋ณํ ์ผ์ด๋์ง X (๋ฐ์ดํฐ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฑ๋ฅ ํฅ์)
-
(2) ์คํค๋ง ์์ด ์ฝ์
๊ฐ๋ฅ
- ์คํค๋ง ์์ด ๋ฐ์ดํฐ ๋ชจ๋ธ ๊ตฌํํ์ง ์๊ณ , ์ ์ฐํ๊ฒ ๋ฐ์ดํฐ ์ฝ์
๊ฐ๋ฅ
- document๋ก ์นผ๋ผ์ด๋ฆ๋ ๋ฐ์ดํธ์ ์ถ๊ฐ๋จ (key-value ํํ๋ผ์)
- ๐๏ธ ์์ :
char[14] ๊น์ํ
or name:๊น์ํ
์ ์ฅํ ๊ฒฝ์ฐ
- RDBMS : 14๋ฐ์ดํธ
- MongoDB : 16๋ฐ์ดํธ (comments : string)
-
(3) ๋ฐ์ดํฐ์ ์กฐํฉํจ์ ์ง์
- ํจ์๋ก ๋ฐ์ดํฐ ์ถ์ถํ๊ณ , ์กฐํฉํ์ฌ ์์ถ๋ ๊ฒฐ๊ณผ๊ฐ ์์ฑ
- ํจ์ ์์ : min, max, aggregate, mapReduce
-
(4) ์ด์คํ ์ง์๊ณผ ์ค๋ฉ
- ์ด์์๋ฒ์ ๊ฒฝ์ฐ ๋ฉ์ถ๋ฉด ์๋๊ธฐ ๋๋ฌธ์ ์๋ฒ ์ด์คํ ํ์ โก๏ธ ReplicaSet ์ด์ฉํด ์ด์คํ
- ๋ฐ์ดํฐ ์์ด ๋ง์ ๊ฒฝ์ฐ โก๏ธ ์ค๋ฉ์ ํตํด collection ๋ถํ ํ์ฌ ๊ด๋ฆฌ
-
(5) JSON ํํ์ Data
- BSON ํํ๋ก ์ ์ฅ
- JSON ํํ๋ก ๊ฐ ์ถ์ถ
- JSON Object๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ์ ์ฅ
-
(6) 2์ฐจ์ ์ขํ ์ธ๋ฑ์ฑ
- geoSpartial ์ธ๋ฑ์ค ์ฌ์ฉํ์ฌ 2์ฐจ์ ์ขํ ์ธ๋ฑ์ฑ ๊ฐ๋ฅ
-
(7) collection join
- $lookup์ ํตํ collection join ๊ฐ๋ฅ
-
(8) B-tree๋ฅผ ์ ์ฉํ ์ธ๋ฑ์ฑ
๐ ์ฐธ๊ณ ๐ ์คํค๋ง
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌ์ฑํ๋ ์์ฑ, ๊ด๊ณ ๋ฑ ๋ฐ์ดํฐ ๊ฐ์ด ๊ฐ๋ type์ ๋ช
์ํ ๊ฒ
6. redis
- ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ํค-๊ฐ ๋ฐ์ดํฐ ๋ชจ๋ธ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ํน์ง
- ๋ฐ์ดํฐ ํ์
: ๋ฌธ์์ด(๊ธฐ๋ณธ, ์ต๋ 512MB๊น์ง ์ ์ฅ), set, hash
- pub/sub ๊ธฐ๋ฅ
- ์ฑํ
์์คํ
, ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋จ์ ๋์ด ์ฌ์ฉํ๋ ์บ์ฑ ๊ณ์ธต. ๋จ์ํ ํค ๊ฐ์ด ํ์ํ ์ธ์
์ ๋ณด ๊ด๋ฆฌ, ์ ๋ ฌ๋ set ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ ์ค์๊ฐ ์์ํ ์๋น์ค์ ์ฌ์ฉ
1. Storage Engine ์ ์
- DBMS๊ฐ DB์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
/์ถ์ถ/์
๋ฐ์ดํธ/์ญ์ ์ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ ์ํํธ์จ์ด ์ปดํฌ๋ํธ
- ๐๏ธ ์์ : MySQL์์ ํ
์ด๋ธ ์์ฑํ๋ฉด, ์ค์ ๋ก ์๋ฒ์์๋
.frm
ํ์ผ ์์ฑ๋จ
- ์คํ ๋ฆฌ์ง ์์ง์ด
.frm
ํ์ผ์ ์ ๊ทผํ๋ ์์ฑ ์ค์ ํจ
- DBMS๋ ๋์ผํ DB ๋ด์ ๋ค์ค ์ ์ฅ ์์ง ์ง์
- ๋์ผ DB์ ํ
์ด๋ธ๋ง๋ค ๋ค๋ฅด๊ฒ ์ง์ ๊ฐ๋ฅ (MyISAM or InnoDB)
๐ ์ฐธ๊ณ ๐ Stroge Engine ์ญํ
- transaction manager : ํธ๋์ญ์
์ค์ผ์ค๋ง ๋ฐ DB ์ํ์ ๋
ผ๋ฆฌ์ ์ผ๊ด์ฑ ๋ณด์ฅ
- lock manager : ํธ๋์ญ์
์์ ์ ๊ทผํ๋ DB ๊ฐ์ฒด์ ๋ํ ์ ๊ธ ์ ์ด, ๋์์ฑ ์ ์ด (๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ)
- access method : ๋์คํฌ์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๋ํ ์ ๊ทผ ๋ฐ ์ ์ฅ ๋ฐฉ์ ์ ์ (ํ ํ์ผ/B-Tree/LSM ํธ๋ฆฌ ๋ฑ ์๋ฃ๊ตฌ์กฐ ์ฌ์ฉ)
- buffer manager : ๋ฐ์ดํฐ ํ์ด์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์บ์
- recovery manager : ๋ก๊ทธ ์ฐ์ง ๊ด๋ฆฌ, ์ฅ์ ๋ฐ์์ ์์คํ
๋ณต๊ตฌ
2. innoDB
- ์ธ๋ํค๋ฅผ ๊ฐ์ง๋ ํธ๋์ญ์
์ง์ ์คํ ๋ฆฌ์ง ์์ง
- MySQL8.0 ๊ธฐ๋ณธ ์คํ ๋ฆฌ์ง ์์ง (MyISAM์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ)
- ์ฅ์
- ACID ํธ๋์ญ์
์ง์
- ํฐ ๊ฐ์ฉ์ฑ ์ ๊ณต (๋ฐ์ดํฐ๋ฒ ์ด์ค ํฌ๊ธฐ๊ฐ ํผ)
- ํ, ์ธ๋ฑ์ค ์กฐํ ์บ์ฑ : ์์ง ์์ฒด ๋ด์์ ํ ์บ์์ ์ธ๋ฑ์ค ์บ์ ๊ฒฐํฉํ์ฌ ์ํ
- ์ ๊ธ ์์ค : ํ ์์ค ์ ๊ธ ์ฌ์ฉ (๋์ ๋์์ฑ ์ฒ๋ฆฌ ๋ฐ ์์ ์ )
- ์๋ ๋ฐ๋๋ฝ ๊ฐ์ง (๊ฐ์ง์ ๋ณ๊ฒฝ๋ ๋ ์ฝ๋๊ฐ ๊ฐ์ฅ ์์ ํธ๋์ญ์
์ rollbackํ์ฌ ๋ฐ๋๋ฝ ํ๊ธฐ)
- ์๋ ์ฅ์ ๋ณต๊ตฌ (์๋ฃํ์ง ๋ชปํ ํธ๋์ญ์
์ด๋ ์์๋ ๋ฐ์ดํฐ ํ์ด์ง ์๋ ๋ณต๊ตฌ)
- ๋จ์
- ๋ฐ์ดํฐ ์ ์ฅ ๋น์จ ๋ฎ๊ณ , ๋ฐ์ดํฐ ๋ก๋ ์๋ ๋๋ฆผ
- ์ฌ์ฉ
- ํธ๋์ญ์
์ฒ๋ฆฌ, ๋์ฉ๋ ๋ฐ์ดํฐ ๋ค๋ฃฐ ๋ ํธ๋ฆฌ
- ๋ฐ์ดํฐ ์
๋ ฅ ๋ฐ ์์ ์ด ์์ฃผ ์ผ์ด๋๊ณ , ๋ค์ค ์ฌ์ฉ์ ๋ฐ ๋์์ฑ์ด ๋์ OLTP ์ ํ๋ฆฌ์ผ์ด์
์ ์ ํฉ
๐ ์ฐธ๊ณ ๐ OLTP (์จ๋ผ์ธ ํธ๋์ญ์
์ฒ๋ฆฌ)
- ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ์ค์๊ฐ์ผ๋ก DB ๋ฐ์ดํฐ ๊ฐฑ์ , ์กฐํํ๋ ๋จ์์ ์์
์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
- ๋์์ ๋ฐ์ํ๋ ๋ค์์ ํธ๋์ญ์
์ ์คํํ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ํ
- ์์ : ์จ๋ผ์ธ ๋ฑ
ํน, ์ผํ, ์ฃผ๋ฌธ ์
๋ ฅ, ํ
์คํธ ๋ฉ์์ง ์ ์ก
3. MyISAM
- ํธ๋์ญ์
์ด ์ง์ํ์ง ์๋ ์คํ ๋ฆฌ์ง ์์ง
- ์ฅ์
- ๊ตฌ์กฐ ๋จ์, ์กฐํ(SELECT) ์ฟผ๋ฆฌ์ ๋น ๋ฆ (ํ
์ด๋ธ์ ROW COUNT ์ ์ฅํจ)
- ๋ฐ์ดํฐ ์ ์ฅ์ ์ค์ ์ ํ์ด ์๊ณ , ํจ์จ์ ์ผ๋ก ์ ์ฅ๋จ
- ํ, ์ธ๋ฑ์ค ์กฐํ ์บ์ฑ : ํ์ผ ์์คํ
๋ธ๋ก ์บ์์ ์์กด
- Full-text ๊ฒ์ ๊ฐ๋ฅ
- ๋จ์
- ์ ๊ธ ์์ค : ํ
์ด๋ธ ์์ค์ ์ ๊ธ ์ ๊ณต (ํน์ ํ ์์ ํ ๊ฒฝ์ฐ ํ
์ด๋ธ ์ ์ฒด์ Lock ๊ฑธ์ด ๋ค๋ฅธ ์ฌ๋ ์์
๋ชปํจ)
- ํธ๋์ญ์
์ด ์์ด ์์
๋์ค ๋ฌธ์ ์๊ฒจ๋ DB์ ์ ์ฅ๋จ (๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅX)
- ์ฌ์ฉ
- ํธ๋์ญ์
ํ์ ์๊ณ , ์กฐํ๊ธฐ๋ฅ ๋ง์ ๋ ํธ๋ฆฌ
- ์ ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅํ๊ณ , ์์ฃผ ์ฝ๊ธฐ ์์
์ผ์ด๋ ๊ฒฝ์ฐ ์ ํฉ
4. wiredtiger
- MongoDB์ ๊ธฐ๋ณธ ์คํ ๋ฆฌ์ง ์์ง
- LSMTree(๋ก๊ทธ ๊ธฐ๋ฐ ๋ณํฉํธ๋ฆฌ) ์ด์ฉ
- ํน์ง
- ๋๋ฆฐ ์ฝ๊ธฐ ์ฑ๋ฅ (๋ณด์ํ๊ธฐ ์ํด ๋ธ๋ฃธ ํํฐ ์ฌ์ฉ)
- ์ ์ฅ ์ฑ๋ฅ ํฅ์
- ์ฒดํฌํฌ์ธํธ
- 60์ด ๊ฐ๊ฒฉ์ผ๋ก ์์ฑ
- ์๋ก์ด ์ฒดํฌํฌ์ธํธ ์์ฑํ๋ ๋์ ์ค๋ฅ ๋ฐ์ํ๋๋ผ๋ ์ด์ ์ฒดํฌํฌ์ธํธ์์ ๋ณต๊ตฌ ๊ฐ๋ฅ
- ์ ๋๋ง (๋ก๊ทธ)
- ์ฒดํฌํฌ์ธํธ ๊ฐ์ ๋ชจ๋ ๋ฐ์ดํฐ ์์ ์ฌํญ ์ ์ง
- ์ฒดํฌํฌ์ธํธ ์ฌ์ด์ ์ข
๋ฃ๋๋ฉด ์ ๋์ ์ฌ์ฉํ์ฌ ๋ง์ง๋ง ์ฒดํฌํฌ์ธํธ ์ดํ ์์ ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์ฌ์์ฐ ๊ฐ๋ฅ
- ์์ถ
- WiredTiger ํตํด ๋ชจ๋ ์ปฌ๋ ์
๋ฐ ์ธ๋ฑ์ค ์์ถ ์ง์
- ๋ฉ๋ชจ๋ฆฌ
- ์ฝ 50% ๋ฉ๋ชจ๋ฆฌ ์ฐจ์ง
- RAM ์ต์ 256MB ํ์
- ๐๏ธ ์์ :4GM์ RAM์ด ์๋ ์์คํ
- WiredTiger ์บ์ = 1.5GB ์ฌ์ฉ (0.5 * (4GB - 1GB) = 1.5GB)
๐ ์ธ๋ฑ์ค
1. index ๊ฐ๋
- ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ ์ฅ์น
- DBMS๋ DB ํ
์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํด์ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์ค๊ธฐ ์ํด, ์นผ๋ผ์ ๊ฐ๊ณผ ํด๋น ๋ ์ฝ๋๊ฐ ์ ์ฅ๋ ์ฃผ์๋ฅผ ํค์ ๊ฐ์ ์์ผ๋ก ์ธ๋ฑ์ค ์์ฑ
- ๐๏ธ ์์ : ์ฑ
์ ๋ง์ง๋ง ์ฅ์ ์๋
์ฐพ์๋ณด๊ธฐ
- ์ฑ
์ ๋ณธ๋ฌธ ์์ ์ฐพ๊ณ ์ ํ๋
ํญ๋ชฉ
์ ๋น ๋ฅด๊ฒ ์ฐพ์
- ์ธ๋ฑ์ค๋ฅผ ์ค์ ํ๋ฉด ํ
์ด๋ธ ์์์ ๋ฐ์ดํฐ ๋น ๋ฅด๊ฒ ์ฐพ๊ธฐ ๊ฐ๋ฅ
2. index ๊ตฌ์กฐ
- ๊ท ํ์กํ B-Tree ๊ธฐ๋ฐ ๊ตฌ์ถ
- (ํธ๋ฆฌ ์์ฑ์) ๋์ํ์ฅ์ฑ ํน์ง์ผ๋ก ๋น ๋ฅด๊ฒ ์ฐพ๊ธฐ ๊ฐ๋ฅ
- ํ์ ์๊ฐ : ํ๊ท O(log N)
๐ ์ฐธ๊ณ ๐ ๋์ํ์ฅ์ฑ
- โ๏ธ ๊ฐ๋
- ํธ๋ฆฌ ๊น์ด๊ฐ ๋ฆฌํ ๋
ธ๋ ์์ ๋นํด ๋งค์ฐ ๋๋ฆฌ๊ฒ ์ฑ์ฅํจ
- ์ธ๋ฑ์ค๊ฐ 1 ๊น์ด์ฉ ์ฆ๊ฐ โก๏ธ ์ต๋ ์ธ๋ฑ์ค ํญ๋ชฉ์์๋ 4๋ฐฐ์ฉ ์ฆ๊ฐ
๐ ์ฐธ๊ณ ๐ ๊น์ด
- ๋ฃจํธ ๋
ธ๋๋ก๋ถํฐ ํน์ ๋
ธ๋๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ
- ํธ๋ฆฌ์์์ ๊น์ด๋ ๋
ธ๋๋ง๋ค ๋ค๋ฆ
3. B-Tree
- ์ด์ง ํธ๋ฆฌ๋ฅผ ํ์ฅํด ํ๋์ ๋
ธ๋๊ฐ ๊ฐ์ง ์ ์๋ ์์ ๋
ธ๋์ ์ต๋ 2๋ณด๋ค ํฐ ํธ๋ฆฌ ๊ตฌ์กฐ (๊ท ํ ์กํ ํธ๋ฆฌ)
- ์นผ๋ผ์ ๊ฐ์ ๋ณํํ์ง ์๊ณ , ์๋์ ๊ฐ์ ์ด์ฉํ์ฌ ์ธ๋ฑ์ฑํ๋ ์๊ณ ๋ฆฌ์ฆ
- ๊ตฌ์ฑ
- ๋ฃจํธ ๋
ธ๋
- ๋ฆฌํ ๋
ธ๋
- ๋ธ๋์น ๋
ธ๋
- ๐๏ธ ์์ : E ์ฐพ์ ๊ฒฝ์ฐ
- ํ
์ด๋ธ ์ ์ฒด ํ์x
- E๊ฐ ์์ ๋ฒํ ๋ฆฌํ ๋
ธ๋๋ฅผ ํตํด ํ์
- ๋
ธ๋๋ฅผ ๋๋ 5๋ฒ โก๏ธ 2๋ฒ๋ง์ ํ์ ๊ฐ๋ฅ
- ๐๏ธ ์์ : ํค 57 ์ฐพ์ ๊ฒฝ์ฐ
- ๋ฃจํธ ๋
ธ๋ โก๏ธ ๋ธ๋์น ๋
ธ๋ โก๏ธ ๋ฆฌํ ๋
ธ๋ ์์ผ๋ก ํ์
57๋ณด๋ค ๊ฐ๊ฑฐ๋ ํด ๋๊น์ง <=
๊ธฐ๋ฐ ๊ฒ์
- ๋ง์ง๋ง ๋ฆฌํ ๋
ธ๋์ ๋๋ฌํ์ฌ
57
๋ฐ์ดํฐ ํฌ์ธํฐ๋ฅผ ํตํด ๊ฒฐ๊ด๊ฐ ๋ฐํ
๐ ์ฐธ๊ณ ๐ Hash ์ธ๋ฑ์ค ์๊ณ ๋ฆฌ์ฆ
- ์นผ๋ผ์ ๊ฐ์ผ๋ก ํด์ ๊ฐ์ ๊ณ์ฐํด์ ์ธ๋ฑ์ฑํ๋ ์๊ณ ๋ฆฌ์ฆ (๊ฐ์ ๋ณํ)
- ๋งค์ฐ ๋น ๋ฅธ ๊ฒ์ ์ง์
- ํน์ ๋ฌธ์๋ก ์์ํ๋ ๊ฐ์ผ๋ก ๊ฒ์์ ํ๋ ์ ๋ฐฉ ์ผ์น ๋ฑ ๊ฐ์ ์ผ๋ถ๋ง ๊ฒ์ํ๊ณ ์ ํ ๋๋ ์ฌ์ฉ ๋ถ๊ฐ
- ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ง์ด ์ฌ์ฉ
- ๋ฑํธ(=)์ฐ์ฐ์ด ์๋ ๋ถ๋ฑํธ ์ฐ์ฐ์ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฐ์
4. ์ต์ ํ ๊ธฐ๋ฒ
-
์ต์ ํ ๊ธฐ๋ฒ์ DB๋ง๋ค ๋ค๋ฅด์ง๋ง ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ ์ ์ฌํจ (MongoDB ๊ธฐ์ค์ผ๋ก ์ค๋ช
)
-
(1) ์ธ๋ฑ์ค = ๋น์ฉ
- ์ธ๋ฑ์ค๋ 2๋ฒ ํ์ํ๋๋ก ๊ฐ์
index list
โก๏ธ collection
์์ผ๋ก ํ์ (๊ด๋ จ ์ฝ๊ธฐ ๋น์ฉ ๋ฐ์)
- โ
collection
์์ ์ index
๋ ์์ ํ์
- โ B-Tree ๋์ด ๊ท ํ ์กฐ์ ๋น์ฉ
collection
์ ๋ง์์๋ก ์ธ๋ฑ์ค ์ฌ์ฉ์ ๋นํจ์จ์
-
(2) ํญ์ ํ
์คํ
ํ์
- ์ธ๋ฑ์ค ์ต์ ํ ๊ธฐ๋ฒ์ ์๋น์ค ํน์ง(๊ฐ์ฒด์ ๊น์ด, ํ
์ด๋ธ์ ์ ๋ฑ)์ ๋ฐ๋ผ ๋ฌ๋ผ์ง
- ๐๏ธ ์์ : MySQL ํ
์คํ
๋ฐฉ๋ฒ
EXPLAIN
SELE
-
(3) ๋ณตํฉ ์ธ๋ฑ์ค๋ ๊ฐ์ > ์ ๋ ฌ > ๋ค์ค ๊ฐ > ์นด๋๋๋ฆฌํฐ ์์
- ์ฌ๋ฌ ํ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์กฐํ์ ๋ณตํฉ ์ธ๋ฑ์ค ์์ฑํ๋๋ฐ, ์์ฑ ์์์ ๋ฐ๋ผ ์ธ๋ฑ์ค ์ฑ๋ฅ ๋ฌ๋ผ์ง
- ๊ฐ์์ ๋น๊ต(== ํน์ equal)ํ๋ ์ฟผ๋ฆฌ ๋จผ์ ์ธ๋ฑ์ค๋ก ์ค์
- ์ ๋ ฌ์ ์ฐ๋ ํ๋ ๊ทธ ๋ค์ ์ธ๋ฑ์ค๋ก ์ค์
- ๋ค์ค ๊ฐ ์ถ๋ ฅํด์ผ ํ๋ ํ๋(> ํน์ < ๋ฑ ๋ง์ ๊ฐ ์ถ๋ ฅํด์ผ ํ๋ ์ฟผ๋ฆฌ์ ์ฐ๋ ํ๋) ๋์ค์ ์ธ๋ฑ์ค๋ก ์ค์
- ์นด๋๋๋ฆฌํฐ ๋์ ์์๋ก ์ธ๋ฑ์ค ์์ฑ
- ๐๏ธ ์์ : age์ email ํ๋๊ฐ ์์ ๊ฒฝ์ฐ
- email ์นด๋๋๋ฆฌํฐ(๊ฐ์ ์ ๋ํฌํ ์ ๋) ๋์ผ๋ ๋จผ์ ์ธ๋ฑ์ค ์์ฑ
5. clustered index ์ non-clustered index ์ฐจ์ด
-
ํด๋ฌ์คํฐํ ์ธ๋ฑ์ค
- ๊ธฐ๋ณธํค ๊ฐ์ด ๋น์ทํ ๋ ์ฝ๋๋ผ๋ฆฌ ๋ฌถ์ด์ ์ ์ฅํ๋ ๊ฒ
- ๊ธฐ๋ณธํค ๊ฐ์ ์ํด ๋ ์ฝ๋ ์ ์ฅ ์์น๊ฐ ๊ฒฐ์
- ๊ธฐ๋ณธํค ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ ์ฝ๋์ ๋ฌผ๋ฆฌ์ ์ธ ์ ์ฅ ์์น ๋ํ ๋ณ๊ฒฝ๋์ด์ผํจ
- ๋ณดํต ํ
์ด๋ธ์ ๊ธฐ๋ณธํค๋ก ์ค์ (์ ์ผ์ฑ, ์ต์์ฑ ๋ง์กฑ)
- ํ
์ด๋ธ๋น 1๊ฐ
- ๋ฐ์ดํฐํ์ด์ง๊ฐ ์ ๋ ฌ๋์ด ์ ์ฅ, ์ธ๋ฑ์ค ํ์ด์ง์ ๋ฆฌํ๋
ธ๋์ "๋ฐ์ดํฐ ํ์ด์ง" ์ ์ฅ (ํ์ ๋น ๋ฆ)
- ๋ฐ์ดํฐ ์ถ๊ฐํ ๋๋ง๋ค ํ
์ด๋ธ ์ ๋ ฌ ํ์ (์ฝ์
/์ญ์ /์์ ๋๋ฆผ)
- ์ธ๋ฑ์ค์ ์์์ ๋ฐ์ดํฐ ์์๊ฐ ์ผ์นํจ
-
ํด๋ฌ์คํฐํ ์ธ๋ฑ์ค ์์ฑ ๋ฐฉ๋ฒ
-
๋ณด์กฐ์ธ๋ฑ์ค
- ์ธ๋ฑ์ค๋ก ์ค์ ํ๋ ํ๋์ ์์ฑ์ด ์ค์
- title, author ์์๋ก ์ธ๋ฑ์ค ์ค์ ํ ๊ฒฝ์ฐ SELECT ์ง์์ ๋ฐ๋ผ ์์ฑ ํจ๊ณผ ๋ฌ๋ผ์ง
- title SEARCH์ index ์์ฑ ํจ๊ณผ ์์ง๋ง, author๋ง์ผ๋ก SEARCH์ index ํจ๊ณผ ์์
- ํด๋ฌ์คํฐํํค๊ฐ ๋ณตํฉํค๊ฐ ๋ ์ ์์ง๋ง, ๋ณดํต ๋ณด์กฐ์ธ๋ฑ์ค๋ก ๋ณตํฉํค ์ฌ์ฉ
- ํ
์ด๋ธ๋น ์ฌ๋ฌ๊ฐ
- ์ธ๋ฑ์ค ํ์ด์ง ๋ฆฌํ๋
ธ๋์ ์ค์ ๋ฐ์ดํฐ๊ฐ ์๋ ๋ฐ์ดํฐ ํ์ด์ง์ ๊ด๋ จ๋ ํฌ์ธํฐ ์ ์ฅ
- ์ ๋ ฌ๋์ด ์์ง ์์ (ํ์ ๋๋ฆฌ๊ณ , ์ฝ์
/์ญ์ /์์ ๋น ๋ฆ)
- ์ธ๋ฑ์ค์ ์์์ ๋ฐ์ดํฐ ์์๊ฐ ์ผ์นํ์ง ์์
-
๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ
6. MongoDB, Node.js ์ค์น
npm install mongoose
node mongo_index.js
๐ ์กฐ์ธ
1. join ๊ฐ๋
2. ์ค์ฒฉ ๋ฃจํ ์กฐ์ธ, ์ ๋ ฌ ๋ณํฉ ์กฐ์ธ, ํด์ ์กฐ์ธ ์ฐจ์ด์
- ์ค์ฒฉ ๋ฃจํ ์กฐ์ธ (NLJ, Nested Loop Join)
- ์ค์ฒฉ for๋ฌธ๊ฐ์ ์๋ฆฌ๋ก ์กฐ์ธ
- ๋๋ค ์ ๊ทผ์ ๋ํ ๋น์ฉ ์ฆ๊ฐ (๋์ฉ๋ ํ
์ด๋ธ์์ ์ฌ์ฉX)
- ๐๏ธ ์์ : t1, t2 ํ
์ด๋ธ ์กฐ์ธํ ๊ฒฝ์ฐ
- ์ฒซ ๋ฒ์งธ ํ
์ด๋ธ์์ ํ์ ํ ๋ฒ์ ํ๋์ฉ ์ฝ๊ณ ,
- ๊ทธ ๋ค์ ํ
์ด๋ธ์์๋ ํ์ ํ๋์ฉ ์ฝ์ ํ
- ์กฐ๊ฑด์ ๋ง๋ ๋ ์ฝ๋๋ฅผ ์ฐพ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ
- ๋ธ๋ก ์ค์ฒฉ ๋ฃจํ ์กฐ์ธ (BNL, Block Neted Loop) : ์กฐ์ธํ ํ
์ด๋ธ์ ์์ ๋ธ๋ก์ผ๋ก ๋๋ ๋ธ๋ก ํ๋์ฉ ์กฐ์ธ
- ์ ๋ ฌ ๋ณํฉ ์กฐ์ธ
- ๊ฐ ํ
์ด๋ธ์ ์กฐ์ธํ ํ๋ ๊ธฐ์ค์ผ๋ก
์ ๋ ฌ
ํ ์กฐ์ธ ์์
์ํ
- ์กฐ์ธํ ๋ ์ฌ์ฉํ ์ ์ ํ ์ธ๋ฑ์ค๊ฐ ์์ ๊ฒฝ์ฐ, ๋์ฉ๋ ํ
์ด๋ธ ์กฐ์ธํ ๊ฒฝ์ฐ ์ฌ์ฉ
- <, > ์กฐ๊ฑด์ ๋ง์ด ์ฐ์
- ํด์ ์กฐ์ธ
- ํด์ ํ
์ด๋ธ ๊ธฐ๋ฐ์ผ๋ก ์กฐ์ธ
- 2๊ฐ ํ
์ด๋ธ ์กฐ์ธ์ 1๊ฐ์ ํ
์ด๋ธ์ด ๋ฉ๋ชจ๋ฆฌ์ ์จ์ ํ ๋ค์ด๊ฐ๋ฉด ์ค์ฒฉ ๋ฃจํ ์กฐ์ธ๋ณด๋ค ํจ์จ์
- 2๊ฐ ํ
์ด๋ธ ์กฐ์ธ์ ๋ฐ์ดํธ์ ๋ ์์ ํ
์ด๋ธ์ ํด์ํ
์ด๋ธ๋ก ๋ง๋ค์ด ์กฐ์ธ
- == ์กฐ๊ฑด(๋๋ฑ ์กฐ๊ฑด)์๋ง ์ฌ์ฉ
- MySQL์ ํด์ ์กฐ์ธ ๋จ๊ณ : ๋น๋ ๋จ๊ณ / ํ๋ก๋ธ ๋จ๊ณ๋ก ๋๋จ
- ๋น๋ ๋จ๊ณ : ์
๋ ฅ ํ
์ด๋ธ ์ค ํ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ด ํด์ ํ
์ด๋ธ ๋น๋ํจ (์กฐ์ธ์ ์ฌ์ฉ๋๋ ํ๋๊ฐ ํด์ ํ
์ด๋ธ์ ํค๋ก ์ฌ์ฉ๋จ)
- ํ๋ก๋ธ ๋จ๊ณ : ๋ ์ฝ๋ ์ฝ๊ธฐ ์์ํ๊ณ , ์ผ์นํ๋ ๋ ์ฝ๋๋ฅผ ์ฐพ์ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ๋ฐํ (ํด์ ํจ์ > ํด์๊ฐ > ๋งค์นญ๋ ์ฝ๋)
๐ ๋ฐ๋๋ฝ
1. deadlock ๊ฐ๋
2. ๊ต์ฐฉ์ํ ๊ฐ์ง
-
๋๊ท๋ชจ DB์ ๊ฒฝ์ฐ ๊ฐ์งํ ๊ฒฝ์ฐ ๋น์ฉ ๋ง์ด ๋ฐ์ -> ๊ต์ฐฉ์ํ ๋ฐฉ์ง ์ฌ์ฉ
-
(1) ๊ต์ฐฉ์ํ ๊ฐ์ง ๋ฐ timeout
- ์ผ์ ์๊ฐ(timeout)์ดํ ํธ๋์ญ์
์ด ์คํ๋์ง ์์์ ๊ฒฝ์ฐ ๋กค๋ฐฑ
-
(2) ๊ทธ๋ํ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ดํด ํ์
- ๊ทธ๋ํ ๋ด์ ์ฌ์ดํด ํ์ฑ๋ ๊ฒฝ์ฐ ๊ต์ฐฉ์ํ ๋ฐ์ ๊ฐ๋ฅ
3. ๊ต์ฐฉ์ํ ๋ฐฉ์ง
-
์ต๋ํ ๊ต์ฐฉ์ํ๊ฐ ์ผ์ด๋์ง ์๋๋ก ๋ฐฉ์ง
-
(1) ๊ฒฉ๋ฆฌ์์ค ๋ณ๊ฒฝ
- ๊ฒฉ๋ฆฌ ์์ค์
ํ ์์ค ์ ๊ธ
๋๋ ๊ฒฉ๋ฆฌ ์์ค์ ์กฐ์ ํจ
- serializable์ด ์๋ ์ด์ ๋ชจ๋ ๊ต์ฐฉ์ํ
์์ ํ ์ ๊ฑฐ ๋ถ๊ฐ
-
(2) ์๋น์ค์ ๋ก์ง์ ๊ต์ฐจ๋์ง ์๊ฒ ์์
- ์๋น์ค์ ๋
ผ๋ฆฌ ๊ตฌ์กฐ ๋ณ๊ฒฝ
- accounts > order ์ฒ๋ผ ์๋ก ๊ต์ฐจ๋์ง ์๊ณ ์ผ๊ด์ฑ ์๋๋ก ๋ณ๊ฒฝ
-
(3) wait-die ๋๋ wound wait ๋ฐฉ๋ฒ
- ํ์์คํฌํ ๊ธฐ๋ฐ์ผ๋ก ํธ๋์ญ์
์ ๋๊ธฐ/์ ์ /์ข
๋ฃํ๋ ๋ฐฉ์
- Wait-Die ๋ฐฉ์ (ํธ๋์ญ์
๋ฐฉ์ง๋ฅผ ์ํ ๋น์ ์ ๊ธฐ๋ฒ)
- ๐๏ธ ์์ : ํธ๋์ญ์
T5, T10, T15์ ๊ฐ๊ฐ ํ์์คํฌํ ์๋ค๊ณ ๊ฐ์
- T5 -> T10 ๋ณด์ ํ ๋ฐ์ดํฐ ํญ๋ชฉ ์์ฒญ์ : T5 ๋๊ธฐ
- T15 -> T10 ๋ณด์ ํ ๋ฐ์ดํฐ ํญ๋ชฉ ์์ฒญ์ : T15 ์ฃฝ์
- Wound-Wait (๊ต์ฐฉ์ํ ๋ฐฉ์ง๋ฅผ ์ํ ์ ์ ๊ธฐ๋ฒ)
- ๐๏ธ ์์ : ํธ๋์ญ์
T5, T10, T15์ ๊ฐ๊ฐ ํ์์คํฌํ ์๋ค๊ณ ๊ฐ์
- T5 -> T10 ๋ณด์ ํ ๋ฐ์ดํฐ ํญ๋ชฉ ์์ฒญ์ : T10 (๊ฐ์ ) ์ ์ ๋ฐ ์ผ์ ์ค๋จ
- T15 -> T10 ๋ณด์ ํ ๋ฐ์ดํฐ ํญ๋ชฉ ์์ฒญ์ : T15 ๋๊ธฐ
๐ ์ฐธ๊ณ ๐ TIMESTAMP
- ํ์์คํฌํ ๊ฐ์
1970-01-01 00:00:01
UTC ๋ถํฐ ์์ํ๋ ์ด์๋ฅผ ๋ํ๋
๐ ์ ๊ทํ
1. ์ ๊ทํ ๊ณผ์
- ๋ฆด๋ ์ด์
๊ฐ์ ์๋ชป๋ ํจ์์ข
์ ๊ด๊ณ๋ก ์ธํด ์๊ธด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด์ ํ์์ ํด๊ฒฐํ๋ ๊ณผ์
- ์ ์ฅ ๊ณต๊ฐ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ๋ฆด๋ ์ด์
๋ถ๋ฆฌํ๋ ๊ณผ์
2. ์ด์ํ์ (anomaly)
-
์์ธ : ๋ถํ์ํ ๋ฐ์ดํฐ ์ค๋ณต ๋ฐ์
-
๊ฐ๋
: ๋ฆด๋ ์ด์
์ ๋ฐ์ดํฐ ์ฝ์
, ๊ฐฑ์ , ์ญ์ ์ฐ์ฐ ์ํ์ ๋ถ์์ฉ ๋ฐ์
-
(1) ์ฝ์
์ด์
- ๋ถํ์ํ ๋ฐ์ดํฐ๋ ๊ฐ์ด ์ฝ์
ํด์ผํจ
-
(2) ๊ฐฑ์ ์ด์
- ์ค๋ณต ๋ ์ฝ๋๊ฐ ์๊ณ , ์ผ๋ถ๋ง ๋ณ๊ฒฝํด ๋ฐ์ดํฐ ์์ฒด๊ฐ ๋ถ์ผ์น๋๋ ๋ฌธ์
-
(3) ์ญ์ ์ด์
- ๋ ์ฝ๋ ์ญ์ ์ ํ์ํ ๋ฐ์ดํฐ๊น์ง ํจ๊ป ์ญ์ ๋จ
3. ํจ์์ ์ข
์์ฑ (Functional Dependency)
- ๋ฆด๋ ์ด์
๊ฐ์ ๊ด๋ จ์ฑ์ ํจ์ ์ข
์์ฑ์ ํตํด ํ์
ํ๊ณ , ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฆด๋ ์ด์
๋ถ๋ฆฌ(์ ๊ทํ) ํ์ํจ
- ์ด๋ค ๋ฆด๋ ์ด์
์ ๊ตฌ์ฑํ๋ ์์ฑ์ ๋ถ๋ถ์งํฉ์ด X, Y์ผ ๋,
- ํ๋์ X์ ๋ํด Y๊ฐ ํ๋๋ผ๋ฉด,
- X๊ฐ Y๋ฅผ ํจ์์ ์ผ๋ก ๊ฒฐ์ ํ๋ค (Y๊ฐ X์ ํจ์์ ์ผ๋ก ์ข
์๋์ด ์๋ค)
- X : ๊ฒฐ์ ์, Y : ์ข
์์
- ๋ฆด๋ ์ด์
์ ์์ฑ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฒฐ์ ํ๋ฉด ์๋๊ณ , ์์ฑ ์์ฒด์ ํน์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฒฐ์ ํจ
- X->Y ๊ด๊ณ์์ ๊ฒฐ์ ์ X๋ ๊ธฐ๋ณธํค, ํ๋ณดํค๊ฐ ์๋ ์ ์์
- ๐๏ธ ์์ : ์ด๋ฆ๊ณผ ๋ฑ๊ธ์ ์์ด๋์ ํจ์์ ์ข
์์ฑ์ ๊ฐ๋ ๊ฒฝ์ฐ
- ์์ด๋ -> ์ด๋ฆ, ์์ด๋ -> ๋ฑ๊ธ
- ์์ด๋ -> {์ด๋ฆ, ๋ฑ๊ธ}
- ์ข
๋ฅ
- ์์ ํจ์์ข
์ : Y๊ฐ X ์ ์ฒด์ ์ข
์๋จ
- ๋ถ๋ถํจ์์ข
์ : Y๊ฐ X ์ผ๋ถ์ ์ข
์๋จ
4. ์ 1์ ๊ทํ
- ๋ฆด๋ ์ด์
์ ๋ชจ๋ ๋๋ฉ์ธ์ด ๋์ด์ ๋ถํด๋ ์ ์๋ ์์๊ฐ๋ง์ผ๋ก ๊ตฌ์ฑ๋์ด์ผ ํ๋ค.
- ๋ฆด๋ ์ด์
์ ์์ฑ ๊ฐ ์ค์์ 1๊ฐ์ ๊ธฐ๋ณธํค์ ๋ํด 2๊ฐ ์ด์์ ๊ฐ์ ๊ฐ์ง๋ ๋ฐ๋ณต ์งํฉ์ด ์๋ค๋ฉด ์ ๊ฑฐ
- ๐๏ธ ์์
- ๐ ๋ฐ์ ์ด์ ํ์
- ์ฝ์
์ด์ : ํ์์ด ์ ๊ณผ๋ชฉ ์๊ฐ์ ์ฒญ์, ๋ฐ๋์ ํ๊ณผ์ ์ง๋๊ต์ ํ์ (๋ถํ์ํ ์ ๋ณด ์ฝ์
)
- ์ญ์ ์ด์ : 300๋ฒ ํ์์ด C400 ๊ณผ๋ชฉ ์ทจ์์ ํด๋น ๊ณผ๋ชฉ ์ ๋ณด ๋ชจ๋ ์ญ์
- ๊ฐฑ์ ์ด์ : 100๋ฒ ํ์์ด ์ง๋๊ต์ ๋ณ๊ฒฝ์ P1 ํ์ ์ฐพ์ ๋ชจ๋ ๋ณ๊ฒฝ ํ์
- ๐ ์ด์ํ์ ๋ฐ์ ์ด์
- ๊ธฐ๋ณธํค๊ฐ ์๋ ์์ฑ๋ค์ด ์์ ํจ์ ์ข
์๋์ง ๋ชปํ๊ณ , ๋ถ๋ถํจ์ ์ข
์๋จ
- ๊ธฐ๋ณธํค : {ํ๋ฒ, ๊ณผ๋ชฉ๋ฒํธ}, ์ง๋๊ต์์ ํ๊ณผ๊ฐ ๋ถ๋ถํจ์ ์ข
์
5. ์ 2์ ๊ทํ
-
๋ฆด๋ ์ด์
์ด ์ 1์ ๊ทํ์ด๋ฉฐ, ๊ธฐ๋ณธํค๊ฐ ์๋ ๋ชจ๋ ์์ฑ์ด ๊ธฐ๋ณธํค์ ์์ ํจ์ ์ข
์๋์ด์๋ค.
-
๊ฐ ์์ฑ๋ค์ด ์์ ํจ์ ์ข
์๋๋๋ก ๋ฆด๋ ์ด์
๋ถ๋ฆฌ
- ๋ถํดํ ๋ฆด๋ ์ด์
์ ์กฐ์ธ์ด ๊ฐ๋ฅํด์ผํจ
- ์กฐ์ธ๋์์ ๋ ๋ถํด ์ ์ ๋ฆด๋ ์ด์
๋ค๋ก ๋ณต์์ด ๊ฐ๋ฅํด์ผํจ (๋ฌด์์ค ๋ถํด)
- ๐๏ธ ์์
-
๐ ๋ฐ์ ์ด์ ํ์
- ์ฝ์
์ด์ : ์ง๋๊ต์๊ฐ ํ๊ณผ์ ์์๋์ด ์์์ ์ถ๊ฐํ ๋ ๋ฐ๋์ ์ง๋ํ์ ํ์ (๋ถํ์ํ ์ ๋ณด ์ฝ์
)
- ์ญ์ ์ด์ : 300๋ฒ ํ์ ์ญ์ ํ๋ ๊ฒฝ์ฐ, P3 ๊ต์์ ํ๊ณผ ์ ๋ณด ์ญ์
- ๊ฐฑ์ ์ด์ : ์ง๋๊ต์์ ํ๊ณผ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ฐพ์์ ๋ณ๊ฒฝ ํ์
-
๐ ์ด์ํ์ ๋ฐ์ ์ด์
- ์ดํ์ ํจ์ ์ข
์ (transitive functional dependency)
- A -> B์ด๊ณ , B -> C์ผ ๋, โก A -> C์ผ ๊ฒฝ์ฐ ์ดํ์ ํจ์ ์ข
์
- ํ๋ฒ -> ์ง๋๊ต์, ์ง๋๊ต์ -> ํ๊ณผ โก ํ๋ฒ -> ํ๊ณผ
6. ์ 3์ ๊ทํ
-
๋ฆด๋ ์ด์
์ด ์ 2์ ๊ทํ์ด๋ฉฐ, ๊ธฐ๋ณธํค๊ฐ ์๋ ๋ชจ๋ ์์ฑ์ด ๊ธฐ๋ณธํค์ ์ดํ์ ํจ์ ์ข
์์ ๋ง์กฑํ์ง ์๋ ์ํ์ด๋ค.
-
์ดํ์ ํจ์ ์ข
์ ๊ด๊ณ์ ์๋ ์์ฑ์ ๋ถ๋ฆฌ
- ๊ธฐ๋ณธํค ์ด์ธ์ ์์ฑ์ด ๋ค๋ฅธ ์์ฑ ๊ฒฐ์ ํ ์ ์์
- ๐๏ธ ์์
-
๐ ๋ฐ์ ์ด์ ํ์
- ์ฝ์
์ด์ : ์๋ก์ด ๊ต์๊ฐ ํน์ ๊ณผ๋ชฉ์ ๋ด๋นํ๋ ์ ๋ณด ์ถ๊ฐํ๋ ค๋ฉด, ์ ์ด๋ ํ ๋ช
์ด์์ ์๊ฐ ํ์ ํ์ (๋ถํ์ํ ์ ๋ณด ์ฝ์
)
- ์ญ์ ์ด์ : ํ๋ฒ 100์ด C234 ๊ณผ๋ชฉ์ ์ทจ์ํ๋ ค๋ฉด, P2๊ฐ C234 ๊ณผ๋ชฉ์ ๋ด๋นํ๋ ์ ๋ณด๋ ์ญ์ ๋จ
- ๊ฐฑ์ ์ด์ : P1 ๊ณผ๋ชฉ์ด ๋ณ๊ฒฝ๋๋ฉด, P1์ธ ํ์ ์ฐพ์์ ๋ณ๊ฒฝํด์ผ ํจ
-
๐ ์ด์ํ์ ๋ฐ์ ์ด์
- ๊ฒฐ์ ์๊ฐ ํ๋ณดํค๋ก ์ทจ๊ธ๋์ง ์์
- ํ๋ณดํค๋ ์ด ๋ฆด๋ ์ด์
์์ {ํ๋ฒ, ๊ณผ๋ชฉ๋ช
}, {ํ๋ฒ, ๋ด๋น๊ต์}
- ๋ด๋๊ต์๋ง์ผ๋ก ํ๋ณดํค ์๋จ (ํ๋ณดํค๊ฐ ์๋๋ฐ ๊ณผ๋ชฉ๋ช
๊ฒฐ์ ๊ฐ๋ฅํ๋ฏ๋ก, ๊ฒฐ์ ์์ ์ํจ)
7. ๋ณด์ด์ค/์ฝ๋ ์ ๊ทํ (BCNF)
- ๋ฆด๋ ์ด์
์ด ์ 3์ ๊ทํ์ด๊ณ , ๋ชจ๋ ๊ฒฐ์ ์๊ฐ ํ๋ณดํค์ธ ์ํ์ด๋ค.
- ๋ณดํต ํ๋์ ๋ฆด๋ ์ด์
์ ์ฌ๋ฌ ๊ฐ์ ํ๋ณดํค๊ฐ ์กด์ฌํ ์ ์๋๋ฐ, ์ 3์ ๊ทํ๋ณด๋ค ์๊ฒฉํจ
- ๐๏ธ ์์ : ๊ฐ์ฌ๋ ํ๋ณดํค๊ฐ ์๋์๋ ๋ถ๊ตฌํ๊ณ ์๊ฐ๋ช
์ ๊ฒฐ์ ํ๋ ๊ฒฐ์ ์ ์ญํ ์ ํจ
- ๋ด๋น ๊ต์๊ฐ ํ๋ณดํค๊ฐ ๋๋๋ก ๋ฆด๋ ์ด์
๋ถํด
- ๊ธฐ๋ณธํค : {ํ๋ฒ, ๋ด๋น๊ต์} ๋ด๋น๊ต์ -> ๊ณผ๋ชฉ๋ช
8. ์ ๊ทํ ๊ณผ์ ํ์์ฑ
- ๋จ์
- ๋ฆด๋ ์ด์
(ํ
์ด๋ธ)์ ๋๋๋ ๊ณผ์ ์์ ์ฑ๋ฅโฌ๏ธ
- ์กฐ์ธ์ด ๋ง์ด ํ์ํ๋ ์ฟผ๋ฆฌ์ผ ๊ฒฝ์ฐ, ๋น์ ๊ทํ ํ์
- ์ฅ์
- ์ค๋ณต ๋ฐ์ดํฐ๊ฐ ์ ๊ฑฐ๋จ์ ๋ฐ๋ผ ์คํ ๋ฆฌ์ง์ ๋ํ ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ๋โฌ๏ธ
- ํ
์ด๋ธ ์ค๋ฅ ๊ฐ๋ฅ์ฑโฌ๏ธ