NOSQL์ด๋?
Not Only SQL์ ์ฝ์. RDBMS์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก, RDBMS์ ๊ฐ์ด ๊ณ ์ ๋ ์คํค๋ง๋ JOIN์ด ์กด์ฌํ์ง ์๋ ๋ค์ ์์ ๋ก์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค.
| SQL | NOSQL |
|---|---|
| ์ ํด์ง ๊ท๊ฒฉ์ด ์กด์ฌํจ (Schema, Table-Column) | ์ ํด์ง ๊ท๊ฒฉ์ด ๋ฐ๋ก ์์ |
| JOIN์ด ๊ฐ๋ฅ | JOIN ๋ถ๊ฐ๋ฅ |
| ํธ๋์ญ์ ์ฌ์ฉ | ํธ๋์ญ์ ์๋จ |
| ๋ถ์ฐ์ฒ๋ฆฌ ์ด๋ ค์ | ๋ถ์ฐ์ฒ๋ฆฌ ์ฌ์ |
์ฅ์
์์์๋ ๋งํ๋ฏ์ด RDBMS์๋ ์ด๋์ ๋ ํ๊ณ๊ฐ ์๋ค. ๋ณต์ก๋์ ์ฉ๋์ ์ธ ์ธก๋ฉด์์ ํ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ํ์ฉ์๋ ์ ์ฝ์ด ๊น๊นํ๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ์ ์ ์ฅ์ ์ด๋ฉด์๋ ๋จ์ ์ผ๋ก ๋ค๊ฐ์จ๋ค.
NoSQL์ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ด ๋ ๋ฐ์ด๋๊ธฐ ๋๋ฌธ์ ๋ง์ ๊ฒฝ์ฐ SQL๋ณด๋ค ์ ํธ๋ฉ๋๋ค. NoSQL ์์คํ ์ฌ์ฉ์ ์ฃผ์ ์ด์ ์ ๊ฐ๋ฐ์๊ฐ ๊ธฐ์กด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ค๋ฒํค๋ ์์ด ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ์ ์ฅํ๊ณ ์ก์ธ์คํ ์ ์๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์ ํจ์ ์์ด์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์คํ ๋ฆฌ์ง ๊ตฌํ์ ๋ํ ๊ฑฑ์ ์์ด ๊ธฐ๋ฅ ๋ฐ ์ฝ์ด ๋น์ฆ๋์ค ๋ก์ง์ ๋ ๋น ๋ฅด๊ฒ ์ ๊ณตํ๋ ๋ฐ ์ง์คํ ์ ์๋ค.
์ด๋ฅผ ์ ๋ฆฌํด๋ณด๋ฉด
- ์ ์ฐ์ฑ : ์คํค๋ง ์ ์ธ ์์ด ํ๋์ ์ถ๊ฐ ๋ฐ ์ญ์ ๊ฐย ์์ ๋ก์ด Schema-less ๊ตฌ์กฐ
- ํ์ฅ์ฑ : ์ค์ผ์ผ ์์์ ์ํย ์๋ฒ ํ์ฅ์ด ์ฉ์ด
- ๊ณ ์ฑ๋ฅ : ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ย ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ค
- ๊ฐ์ฉ์ฑ : ์ฌ๋ฌ ๋์ ๋ฐฑ์ ์๋ฒ ๊ตฌ์ฑ์ด ๊ฐ๋ฅํ์ฌ ์ฅ์ ๋ฐ์ ์์๋ย ๋ฌด์ค๋จ ์๋น์ค๊ฐ ๊ฐ๋ฅ ๋ฑ์ ์ฅ์ ์ ๊ฐ์ง๋ค.
๋จ์
ํ์ง๋ง ์ด๋ ๊ฒ ์ ์ฐ์ฑ๊ณผ ๊ฐ์ ์ฅ์ ์ ๋จ์ ์ผ๋ก๋ ์์ฉํ ์ ์๋ ์ ์ด ์๋ค. ์คํค๋ง๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋งํผ ์ ์ฐํ์ง๋ง, ์ ์ฐํ ๋งํผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ผ๊ด์ฑ์ ์ฝํ๋ค. ์ถ๊ฐ์ ์ผ๋ก
- key๊ฐ์ ๋ํ ์ ์ถ๋ ฅ๋ง ์ง์
- ์คํค๋ง๊ฐ ์ ํด์ ธ ์์ง ์์, ๋ฐ์ดํฐ์ ๋ํ ๊ท๊ฒฉํ๊ฐ ๋์ด ์์ง ์๋ค.
- ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ์ปฌ๋ ์ ์ ์ค๋ณต๋์ด ์์ด์ ๋ฐ์ดํฐ๋ฅผย UPDATE ํ๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ปฌ๋ ์ ์์ ์ํํด์ผํ๊ธฐ ๋๋ฌธ์ ๋๋ฆฌ๋ค.
- ๋ฐ์ดํฐ ์ค๋ณต์ผ๋ก ์ธํ ์์ ์์
์ ๋ฒ๊ฑฐ๋ก์

NoSQL์ ๊ธฐ์ ์์
๊ธฐ์ ์์
- BASE
- (Basically Available, Soft State, Eventually Consistent)
๊ธฐ์ ์์ ์์ธ
Basically Available(๊ฐ์ฉ์ฑ)

Master ์๋ฒ์ ์ฅ์ ๋ฐ์ ์์๋ ์ฌ๋ฌ Slave ์๋ฒ๋ก ์ธํด ๋ฌด์ค๋จ ์๋น์ค๊ฐ ๊ฐ๋ฅํจ
Soft State(์ํํธ ์ํ)

๊ฐ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋๋ฌํ ์์ ์ ๋ฐ์ดํฐ๊ฐ ๊ฐฑ์ ๋จ
Eventually Consistent(๊ฒฐ๊ณผ์ ์ผ๊ด์ฑ)

๋ณต์ ๋ฉ์ปค๋์ฆ์ ์ํด ๋ชจ๋ ์๋ฒ์ ๋ฐ์ดํฐ ๋ณต์ ๊ฐ ๋์์ ์คํ๋ ์ ์์ ์์คํ ๋ถํ ๋ฐ ๋คํธ์ํฌ ์๋์ ๋ฐ๋ผ ์๋ฒ์ ๋ณต์ ํ๋ ์๊ฐ์ด ๋ค๋ฅผ ์ ์์ผ๋ ์ต์ข ์ ์ผ๋ก๋ ๋ชจ๋ ์๋ฒ์ ๋ฐ์ดํฐ๊ฐ ๋ณต์ ๋จ ํน์ง : ๋ฐ์ดํฐ ๊ฐ์ฉ์ฑ๊ณผ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ํฅ์๋๋๋กํ๋ค ์ค์ ์ฌํญ : ์๋น์ค ๊ฐ์ฉ์ฑ
Key-Value Database
- Key์ Value์ผ๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์ด๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๊ฐ์ฅ ๋จ์ํ ๊ตฌ์กฐ
- ์ ์ฅ๊ณผ ์กฐํ ๋ผ๋ ๊ฐ์ฅ ๊ฐ๋จํ ์์น์ ์ถฉ์คํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
ํน์ง
- ๊ธฐ๋ณธ์ ์ธ ํจํด์ผ๋ก Key, Value๊ฐ ํ๋์ ๋ฌถ์์ผ๋ก ์ ์ฅ๋๋ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋น ๋ฅด๋ฉฐ ๋ถ์ฐ ์ ์ฅ์ ์ฉ์ดํ๋ค
- ๊ฐ์ ๋ชจ๋ ๋ฐ์ดํฐ ํ์
์ด ํ์ฉ๊ฐ๋ฅํ๋ค.
- ๋์ ๋ชจ๋ ๋ฐ์ดํฐ ํ์ ์ ํ์ฉํ๋ ๋งํผ ๋ฐ์ดํฐ ์ ๋ ฅ ๋จ๊ณ์์ ๊ฒ์ฆ ๋ก์ง์ ์ ๋๋ก ๊ตฌํํด์ผ ํ๋ค
- Key๋ ์ค๋ณต๋ ์ ์๊ณ ์ด Unique Key์ ๊ฐ๊ฐ ํ๋์ Value๋ฅผ ๊ฐ์ง๊ณ ์๋ ํํ๊ฐ ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์กฐํ ๋ฐ ์ ๋ ฅํ ๋, Key๋ฅผ ๊ฐ์ง๊ณ ์ ๊ทผํ ์ ์๋ค.
ํ์ฉ
- ์ฑ๋ฅ ํฅ์์ ์ํด RDBMS ์์ ์บ์ฑ (Redis)
- ์ฅ๋ฐ๊ตฌ๋ ๊ฐ์ ์น์ ํ๋ฆฌ์ผ์ด์ ์์ ์ผ์์ ์ธ ์์ฑ ์ถ์
- ์ด๋ฏธ์ง๋ ์ค๋์ค ํ์ผ ๊ฐ์ ๋์ฉ๋ ๊ฐ์ฒด ์ ์ฅ
์ข ๋ฅ
- Redis
- AWS DynamoDB
- Riak
Document Database
Document Database ๋๋ Document-Oriented Database๋ ์์ Key-Value Database์ ๊ฐ์ด ๋ฐ์ดํฐ ์ ์ฅ์ Key-Value Type๋ฅผ ์ฌ์ฉํ๋ค.
- ํ์ง๋ง Key-Value Database์์ ์ค์ํ ์ฐจ์ด๋ย Document Database๋ ๊ฐ์ ๋ฌธ์๋ก ์ ์ฅํจ
- ๋ฌธ์๋ย semi-structured entity์ด๋ฉฐ ๋ณดํต JSON์ด๋ XML ๊ฐ์ ํ์ค ํ์
- ๊ฐ์ ์ ์ฅํ๊ธฐ ์ ์ schema๋ฅผ ๋ณ๋๋ก ์ ์ํ์ง ์์ผ๋ฉฐ, ๋ฌธ์๋ฅผ ์ถ๊ฐํ๋ฉด ๊ทธ๊ฒ ๋ฐ๋ก schema๊ฐ ๋๋ค.
- ๊ฐ ๋ฌธ์๋ณ๋ก ๋ค๋ฅธ ํ๋๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ๋ฐ๋ผ์ ๊ฐ๋ฐ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํ๋ ๋จ๊ณ์์ ์ปฌ๋ผ๊ณผ ํ๋์ ๊ด๋ฆฌ๊ฐ ์ ๋๋ก ์ด๋ฃจ์ด์ง๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํ๋ค.
- ์๋ฅผ ๋ค์ด ํ์ ์์ฑ(Null์ ํ์ฉํ์ง ์๋ ์์ฑ)์ ๋ํ ๊ด๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์์ ๊ด๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค.
์์๋ก MongoDB์ AirBnB DataSet์ ์ผ๋ถ๋ฅผ ๋ณด์. ๋ค์๊ณผ ๊ฐ์ JSON ํํ์ ๋ฌธ์๋ก ๊ด๋ฆฌ๋๋ค.
{
"_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"
]
}ํ์ฉ
Document Database ๋ ๋ค์๊ณผ ๊ฐ์ ๋ชฉ์ ์ผ๋ก ์ฃผ๋ก ํ์ฉ๋๋ค.
1. ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ์น ์ฌ์ดํธ์ฉ ๋ฐฑ์๋ ์ง์
2. ์ ํ์ฒ๋ผ ๋ค์ํ ์์ฑ์ด ์๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ
3. ๋ค์ํ ์ ํ์ ๋ฉํ๋ฐ์ดํฐ ์ถ์
4. JSON ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
5. ๋น์ ๊ทํ๋ ์ค์ฒฉ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ข ๋ฅ
- MongoDB
- CouchDB
- Couchbase
Column Family Database
์ปฌ๋ผ ํจ๋ฐ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋์ฉ๋ ๋ฐ์ดํฐ, ์ฝ๊ธฐ์ ์ฐ๊ธฐ ์ฑ๋ฅ, ๊ณ ๊ฐ์ฉ์ฑ์ ์ํด ์ค๊ณ๋์๋ค. ๊ตฌ๊ธ์ Big Table, ํ์ด์ค๋ถ์ Cassandra๊ฐ ์๋ค.
ํน์ง
- Relation Database์ ๋์ผํ ์ฉ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์คํค๋ง ์ ์
- ์ปฌ๋ผ ์๊ฐ ๋ง์ผ๋ฉด ๊ด๋ จ๋ ์ปฌ๋ผ๋ค์ ์ปฌ๋ ์ ์ผ๋ก ๋ฌถ์
- Document Database์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฏธ๋ฆฌ ์ ์๋ ์คํค๋ง๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋ ์์ ์ ์ํ๋ ๋๋ก ์ปฌ๋ผ์ ์ถ๊ฐ
- ํ ์ด๋ธ๊ฐ ์กฐ์ธ ์ง์ ์ํจ
- ์ผ๋ฐ์ ์ผ๋ก ๋น์ ๊ทํ ๋์ด ์์ผ๋ฉฐ ํ ๊ฐ์ฒด์ ๊ด๋ จ๋ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฐ๋ฅํ ๋งค์ฐ ๋๋น๊ฐ ๋์ ๋จ์ผ Row์ ๋ฃ์ด์ ๋ณด๊ดํจ
- ์ฌ๋ฌ๋๋ก ๊ตฌ์ฑ๋ ํด๋ฌ์คํฐ์์ ์ด์ ๋๋ฏ๋ก ๋ฐ์ดํฐ๊ฐ ์ ๋ค๋ฉด document๋ key-value database๊ฐ ๋์

ํ์ฉ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ธฐ ์์ ์ด ๋ง์ ์ ํ๋ฆฌ์ผ์ด์
- ์ง๋ฆฌ์ ์ผ๋ก ์ฌ๋ฌ ๋ฐ์ดํฐ ์ผํฐ์ ๋ถ์ฐ๋์ด ์๋ ์ ํ๋ฆฌ์ผ์ด์
- ๋ณต์ ๋ณธ ๋ฐ์ดํฐ๊ฐ ๋จ๊ธฐ์ ์ผ๋ก ๋ถ์ผ์นํ๋๋ผ๋ ํฐ ๋ฌธ์ ๊ฐ ์๋ ์ ํ๋ฆฌ์ผ์ด์
- ๋์ ํ๋๋ฅผ ์ฒ๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์
- ์๋ฐฑ๋ง ํ ๋ผ๋ฐ์ดํธ ์ ๋์ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ข ๋ฅ
- Hbase
- Cassandra
- GCP BigTable
- Microsoft Azure Cosmos DB**