๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃธ์ ์์ด์ SQL๊ณผ NoSQL์ ํ์์ ์ผ๋ก ์ ํด์ผํ๋ ์ธ์ด์ด๊ณ , ๊ทธ ์ฐจ์ด๋ ๋ถ๋ช ํ ํ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํ๋ค. ์ด ์ ์ ์ ๋ฆฌ๋ฅผ ํ์ง๋ง, ์ข ๋ ์์ธํ ์ ๋ฆฌ๋ฅผ ํด๋ณด๊ธฐ๋ก ํ๋ค! ๐ค
https://deep-flame.tistory.com/7
[DB] ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ์ด
๋ฐ์ดํฐ๋ฒ ์ด์ค๋? ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฌ๋ฌ ์ฌ๋๋ค์ด ๊ณต์ ํ๊ณ , ์ฌ์ฉ๋ ๋ชฉ์ ์ผ๋ก ํตํฉํ์ฌ ๊ด๋ฆฌ๋๋ ๋ฐ์ดํฐ์ ์งํฉ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ด์ ์๋ ํ์ผ ์์คํ ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ค.
deep-flame.tistory.com
SQL
Structured Query Language์ ์ค์๋ง๋ก, ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ (RDBMS)์์ ์๋ฃ๋ฅผ ๊ด๋ฆฌ ๋ฐ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ค๊ณ๋ ์ธ์ด์ด๋ค.
๐ SQL ๋ฌธ๋ฒ์ ์ข ๋ฅ
- DDL (Data Definition Language, ๋ฐ์ดํฐ ์ ์ ์ธ์ด)
๋ฐ์ดํฐ๋ฅผ ์ ์ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ธ์ด (CREATE, ALTER, DROP...) - DML (Data Manipulation Language, ๋ฐ์ดํฐ ์กฐ์ ์ธ์ด)
๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ/์์ /์ญ์ ํ๊ธฐ ์ํ ์ธ์ด (SELECT, INSERT, UPDATE ...) - DCL (Data Control Language, ๋ฐ์ดํฐ ์ ์ด ์ธ์ด)
๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ๊ทผํ๋ ๊ถํ์ ๋ค๋ฃจ๊ธฐ ์ํ ์ธ์ด (GRANT, REVOKE ...)
๐ RDBMS์ ์ข ๋ฅ
- Oracle
ํ์ฌ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ RDBMS. ์ฌ์ค์ ํ์ค์ด๋ค. - PostgreSQL
์คํ์์ค ์ปค๋ฎค๋ํฐ์์ ๊ฐ๋ฐ๋ ์ํํธ์จ์ด ์คํ์ ์ด๊ณ ์ง๋ณด์ ์ธ ๊ธฐ๋ฅ์ ์ถ๊ตฌํ์ฌ ์ฌ์ฉ์๊ฐ ํ์ํ ๋ถ๋ถ์ ๊ณ ์ํด์ ๊ฐ๋ฐ๋๋ค. - MySQL
์ฒ์์๋ ๊ฒฝ๋ DB๋ฅผ ๊ฐ์กฐํ์ฌ ์ต์ํ์ ๊ธฐ๋ฅ๋ง์ ๊ฐ์ถ์์ง๋ง, ์ง๊ธ์ ๊ธฐ๋ฅ์ด ํ์ฅ๋จ
NoSQL
๊ด๊ณํ DB๋ฅผ ์ง์ํ๋ฉฐ, ์คํค๋ง๊ฐ ์๊ฑฐ๋ ๋์จํ ์คํค๋ง๋ฅผ ์ ๊ณตํ๋ ์ ์ฅ์์ด๋ค. ๋ณต์กํ ๊ตฌ์กฐ๋ฅผ ์ฝ๊ฒ ์ ์ฅํ ์ ์์ผ๋ฉฐ, ๋๋์ ๋ถ์ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ์กฐํํ๋๋ฐ ํนํ๋ ์ธ์ด์ด๋ค.
๐ CAP ์ด๋ก
์์คํ ์ ์ผ๊ด์ฑ, ๊ฐ์ฉ์ฑ, ๋ถ๋จ ํ์ฉ์ฑ ์ค ๋ ๊ฐ์ง๋ง ๊ฐ์ง ์ ์์ผ๋ฉฐ, ์ด๋ CA/CP/AP๋ก ๋๋๋ค.

- ์ผ๊ด์ฑ (Consistency)
๋ค์ค ํด๋ผ์ด์ธํธ์์ ๊ฐ์ ์๊ฐ์ ์กฐํํ๋ ๋ฐ์ดํฐ๋ ํญ์ ๋์ผํ ๋ฐ์ดํฐ์์ ๋ณด์ฆํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ฐฉ๋ฒ
1. ๋๊ธฐ์: ๋ฐ์ดํฐ ์ ์ฅ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ๋ก ์๋ตํ๊ธฐ ์ , ๋ชจ๋ ๋ ธ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. (์๋ต์๊ฐ์ด ๋๋ฆฌ๋ค.)
2. ๋น๋๊ธฐ์: ๋ฉ๋ชจ๋ฆฌ๋ ์์ ํ์ผ์ ๊ธฐ๋กํ๊ณ ํด๋ผ์ด์ธํธ์ ๋จผ์ ์๋ตํ ๋ค์, ์ด๋ฒคํธ ๋๋ ํ๋ก์ธ์ค๋ฅผ ์ด์ฉํ์ฌ ๋ ธ๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ๋ค. (์ฐ๊ธฐ ๋ ธ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๊ฐ ์์ค๋ ์ ์๋ค.) - ๊ฐ์ฉ์ฑ (Availability)
๋ชจ๋ ํด๋ผ์ด์ธํธ์ ์ฝ๊ธฐ์ ์ฐ๊ธฐ ์์ฒญ์ ๋ํ์ฌ ํญ์ ์๋ต์ด ๊ฐ๋ฅํจ์ ๋ณด์ฆํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ํด๋ฌ์คํฐ ๋ด ๋ช ๊ฐ์ ๋ ธ๋๊ฐ ๋ง๊ฐ์ง๋๋ผ๋ ์ ์์ ์ธ ์๋น์ค๊ฐ ๊ฐ๋ฅํ๋ค.
์ด๋ฅผ ์ํด ๋ช๋ช NoSQL์ ๋ฐ์ดํฐ ๋ณต์ ๋ฅผ ์ฌ์ฉํ๋ค.
1. Master-Slave: ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง ์ ์ฅ์๋ฅผ ํ๋ ๋ ์์ฑ
2. Peer-to-Peer: ๋ฐ์ดํฐ ๋จ์๋ก ์ค๋ณต ์ ์ฅ - ๋คํธ์ํฌ ๋ถํ ํ์ฉ์ฑ (Partition tolerance)
์ง์ญ์ ์ผ๋ก ๋ถํ ๋ ๋คํธ์ํฌ ํ๊ฒฝ์์ ๋์ํ๋ ์์คํ ์์ ๋คํธ์ํฌ๊ฐ ๋จ์ ๋๊ฑฐ๋ ๋คํธ์ํฌ ๋ฐ์ดํฐ์ ์ ์ค์ด ์ผ์ด๋๋ ๊ฐ ์ง์ญ์ ์์คํ ์ ์ ์์ ์ผ๋ก ๋์ํจ์ ๋ณด์ฆํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๊ด๊ณํ DB๋ CA ์์คํ
์ด๋ค. ๋ฐ๋ผ์ ๋ค๋์ ์๋ฒ๋ฅผ ์ด์ฉํ๋ ํด๋ฌ์คํฐ๋ง์ ์ ํฉํ์ง ์๋ค.
๋๋ถ๋ถ์ NoSQL์ ๋์ฉ๋ ๋ถ์ฐ ์์คํ
์ ๊ตฌ์ถํ๋๋ฐ ์๋ง์ CP๋ AP ์์คํ
์ด๋ค.
๐ ์ ์ฅ ๋ฐฉ์์ ๋ฐ๋ฅธ NoSQL ๋ถ๋ฅ
Key-Value, Document, Column์ผ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
1. Key-Value Model
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํํ. ์ ์ฅ๊ณผ ์กฐํ๋ผ๋ ๊ฐ์ฅ ๊ฐ๋จํ ์์น์ ์ถฉ์คํ DB.
ํ๋์ ํค์ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์กฐํํ ์ ์๋ ๊ตฌ์กฐ์ด๋ค. - ๊ฐ์ ๋ชจ๋ ๋ฐ์ดํฐ ํ์ ์ ํ์ฉํจ → ๊ฐ๋ฐ์๋ค์ด ๋ฐ์ดํฐ ์ ๋ ฅ ๋จ๊ณ์์ ๊ฒ์ฆ๋ก์ง์ ์ ๋๋ก ๊ตฌํํด์ผ ํจ
- ํ๋์ ์๋น์ค ์์ฒญ์ ๋ค์์ ๋ฐ์ดํฐ ์กฐํ ๋ฐ ์์ ์ฐ์์ด ๋ฐ์ํ๋ฉด ํธ๋์ญ์ ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ์ฌ ์ ํฉ์ฑ์ ๋ณด์ฅํ ์ ์๋ค. (AP)
- ๊ฐ๋จํ DB๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฃผ ์ฝ๊ณ ์ฐ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
- ์ฅ๋ฐ๊ตฌ๋ ์ ๋ณด์ ๊ฐ์ ์ผ์์ ์์ฑ ์ถ์
- ์ฌ์ฉ์ ๋ฐ์ดํฐ ์ ๋ณด์ ๊ตฌ์ฑ ์ ๋ณด ์ ์ฅ
- ์ด๋ฏธ์ง๋ ์ค๋์ค ํ์ผ๊ฐ์ ๋์ฉ๋ ๊ฐ์ฒด ์ ์ฅ
- Redis. AWS DynamoDB.
2. Document Model
- key-value Model์ ํ์ฅํ ๊ตฌ์กฐ. ํ๋์ ํค์ ํ๋์ ๊ตฌ์กฐํ๋ ๋ฌธ์๋ฅผ ์ ์ฅํ๊ณ ์กฐํํ๋ค.
์ฌ๊ธฐ์ ๋ฌธ์๋ JSON์ด๋ XML๊ฐ์ ํ์ค ํ์์ ๊ฐ์ง ๋ฌธ์์ด๋ค. (Key-Value์ ์ฐจ์ด์ ) - B ํธ๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ 2์ฐจ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ค. ๋ฐ๋ผ์ ์ฐ๊ธฐ์ ์ฑ๋ฅ์ด ๋จ์ด์ง๊ฒ ๋๋ค. (์ฝ๊ธฐ:์ฐ๊ธฐ = 7:3 → ์ด์์ )
- ์๋์ ๊ฐ์ด ์ฌ์ฉ๋๋ค.
- ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ์น ์ฌ์ดํธ์ฉ ๋ฐฑ์๋ ์ง์
- ์ ํ์ฒ๋ผ ๋ค์ํ ์์ฑ์ด ์๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ
- ๋ค์ํ ์ ํ์ ๋ฉํ๋ฐ์ดํฐ ์ถ์
- JSON ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ์ฑ
- ๋น์ ๊ทํ๋ ์ค์ฒฉ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ์ฑ
- MongoDB.
Document Model์ ์๋ ์๋์ ๊ฐ๋ค.
{
"_id": "10006546",
"listing_url": "https://www.airbnb.com/rooms/10006546",
"name": "Ribeira Charming Duplex",
"summary": "Fantastic duplex apartment with three bedrooms, located in the historic area of Porto, Ribeira (Cube)...",
"house_rules": "Make the house your home...",
"property_type": "House",
"calendar_last_scraped": {
"$date": {
"$numberLong": "1550293200000"
}
},
"amenities": [
"TV",
"Cable TV",
"Wifi",
"Kitchen",
"Paid parking off premises",
"Smoking allowed",
"Microwave"
]
}
3. Column Model
- Rowํ์ผ๋ก ์ ์ฅํ๋ ๋์ Column์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค.
- c1 ์ด์ ๊ฐ์ ์กฐํํ๊ณ ์ถ์ ๋ ์ฐ๋ฆฌ๋ ๋ชจ๋ ํ์ ์ฝ์ด์ผํ๋ค.

์ถ์ฒ: https://nesoy.github.io/articles/2019-10/Column-Oriented-DBMS - ์๋ ์ฒ๋ผ ํ๋ฒ์ ์กฐํ๋ก c1 ์ด์ ๊ฐ์ ๋ชจ๋ ๊ฐ์ ธ์ค๊ณ ์ถ๋ค. → Column Model ์ฌ์ฉ

์ถ์ฒ: https://nesoy.github.io/articles/2019-10/Column-Oriented-DBMS
- c1 ์ด์ ๊ฐ์ ์กฐํํ๊ณ ์ถ์ ๋ ์ฐ๋ฆฌ๋ ๋ชจ๋ ํ์ ์ฝ์ด์ผํ๋ค.
- ํ๋์ ํค์ ์ฌ๋ฌ ๊ฐ์ ์นผ๋ผ ์ด๋ฆ๊ณผ ์นผ๋ผ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์กฐํํ๋ค. ์ ์ฅ์ ๊ธฐ๋ณธ ๋จ์๋ Column์ด๋ฉฐ, Column ์๊ฐ ๋ง๋ค๋ฉด ์ด๋ฅผ ๋ฌถ์ด Column Family๋ก ๊ตฌ์ฑํ๋ค.
- ๋ค์์ ํด๋ฌ์คํฐ์์ ์ด์๋๋ค. ๋ง์ฝ ๋จ์ผ์๋ฒ์์ ์ด์ํด๋ ๋ ๋งํผ ๋ฐ์ดํฐ๊ฐ ์ ๋ค๋ฉด ์ ํฉํ์ง ์๋ค.
- ์ฝ๊ธฐ๋ณด๋ค ์ฐ๊ธฐ์ ํนํ๋์ด ์๋ค. ๋น ๋ฅธ ์๊ฐ ์์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํ๊ณ ์กฐํํ๋ ์๋น์ค๋ฅผ ๊ตฌํํ ๋ ๊ฐ์ฅ ์ข์ ์ฑ๋ฅ์ ๋ณด์ธ๋ค.
- ์๋ฐฑ๋ง ํ ๋ผ๋ฐ์ดํธ ์ ๋์ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ์ฑ
- ์ง๋ฆฌ์ ์ผ๋ก ์ฌ๋ฌ ๋ฐ์ดํฐ ์ผํฐ์ ๋ถ์ฐ๋์ด ์๋ ์ฑ
- ๋์ ํ๋๋ฅผ ์ฒ๋ฆฌํ๋ ์ฑ
- BigTable. Cassandra. HBase.
'Engineering ๐ป > CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [DB] Index๋ (feat. B+-Tree) (0) | 2022.02.13 |
|---|---|
| [PostgreSQL] Python์์ ๋ค์ค ํ์ Insertํ๋ ๋ค์ํ ๋ฐฉ๋ฒ๊ณผ ๋น๊ต (0) | 2022.02.10 |
| [CS] ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ (0) | 2022.01.16 |
| [DB] ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ์ด (0) | 2022.01.10 |