NoSQL์ ์ด๊ณ ์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฑ ์ฑ๋ฅ์ ํนํ๋ ๋ชฉ์ ์ ์ํด, ๋น๊ด๊ณํ ๋ฐ์ดํฐ ์ ์ฅ์์, ๋น๊ตฌ์กฐ์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ถ์ฐ ์ ์ฅ ์์คํ ์ด๋ค.
NoSQL
NoSQL์ด ๋ฌด์์ ์ฝ์์ธ์ง๋ ์ฌ๋์ ๋ฐ๋ผ No SQL, Not Only SQL, Non-Relational Operational Database SQL๋ก ์๊ฐ๋ฆฌ๋ ์๊ฒฌ๋ค์ด ์์ง๋ง, ํ์ฌ Not Only SQL๋ก ํ์ด ์ค๋ช
ํ๋ ๊ฒ์ด ๋ค์๋ฅผ ์ฐจ์งํ๊ณ ์๋ค.
์ด ๋ง์ ์๋ฏธ๋ฅผ ํ์ด๋ณด๋ฉด, ๋จ์ํ ๊ธฐ์กด ๊ด๊ณํ DBMS๊ฐ ๊ฐ๊ณ ์๋ ํน์ฑ๋ฟ๋ง ์๋๋ผ, ๋ค๋ฅธ ํน์ฑ๋ค์ ๋ถ๊ฐ์ ์ผ๋ก ์ง์ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ฌ์ฉํด์ผ ํ๋ ์ด์
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํ์ฌ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ ๋น๋กฏํด ๊ณ ์ฑ๋ฅ์ ๋งค์ฐ ๊ธฐ๋ฅ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์๋ก ํ๋ ๋ชจ๋ฐ์ผ, ์น์ด๋ ๊ฒ์ด๋ฐ๊ณผ ๊ฐ์ ๋ค์ํ ํ๋์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค.
- ์ ์ฐ์ฑ: NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฐํ ์คํค๋ง๋ฅผ ์ ๊ณตํ์ฌ ๋ณด๋ค ๋น ๋ฅด๊ณ ๋ฐ๋ณต์ ์ธ ๊ฐ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํด์ค๋๋ค. ์ด๊ฐ์ ์ ์ฐํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ฐ์ ํ ๋ฐ ๋น์ ํ ๋ฐ์ดํฐ์ ์ด์์ ์ผ๋ก ๋ง๋ค์ด ์ค๋๋ค.
- ํ์ฅ์ฑ: NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๋ฐ์ ์ผ๋ก ๊ณ ๊ฐ์ ๊ฐ๋ ฅํ ์๋ฒ๋ฅผ ์ถ๊ฐํ๋ ๋์ ๋ถ์ฐํ ํ๋์จ์ด ํด๋ฌ์คํฐ๋ฅผ ์ด์ฉํด ํ์ฅํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ผ๋ถ ํด๋ผ์ฐ๋ ์ ๊ณต์๋ค์ ์์ ๊ด๋ฆฌํ ์๋น์ค๋ก์ ์ด๋ฐ ์ด์ ์์ ์ ๋ณด์ด์ง ์๊ฒ ์ฒ๋ฆฌํฉ๋๋ค.
- ๊ณ ์ฑ๋ฅ: NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํน์ ๋ฐ์ดํฐ ๋ชจ๋ธ ๋ฐ ์ก์ธ์ค ํจํด์ ๋ํด ์ต์ ํ๋์ด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํตํด ์ ์ฌํ ๊ธฐ๋ฅ์ ์ถฉ์กฑํ๋ ค ํ ๋๋ณด๋ค ๋ฐ์ด๋ ์ฑ๋ฅ์ ์ป๊ฒ ํด์ค๋๋ค.
- ๊ณ ๊ธฐ๋ฅ์ฑ: NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ฐ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ง์ถฐ ํน๋ณํ ๊ตฌ์ถ๋ ๋ฐ์ด๋ ๊ธฐ๋ฅ์ API์ ๋ฐ์ดํฐ ์ ํ์ ์ ๊ณตํฉ๋๋ค.
RDBMS vs NoSQL
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค | NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค | |
์ต์ ์ ์ํฌ๋ก๋ | ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๊ด์ฑ์ด ๋ฐ์ด๋ ์จ๋ผ์ธ ํธ๋์ญ์ ํ๋ก์ธ์ฑ(OLTP) ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด ์ค๊ณ๋์ด ์จ๋ผ์ธ ๋ถ์ ํ๋ก์ธ์ฑ(OLAP)์ ์ ํฉํฉ๋๋ค. | NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฎ์ ์ง์ฐ ์๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌํจํ ์๋ง์ ๋ฐ์ดํฐ ์ก์ธ์ค ํจํด์ ๋ง๋๋ก ์ค๊ณ๋์์ต๋๋ค. NoSQL ๊ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฐ์ ํ ๋ฐ์ดํฐ์์ ๋ถ์์ ์ํด ์ค๊ณ๋์์ต๋๋ค |
๋ฐ์ดํฐ ๋ชจ๋ธ | ๊ด๊ณํ ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ํ๊ณผ ์ด๋ก ๊ตฌ์ฑ๋ ํ ์ด๋ธ๋ก ์ ๊ทํํฉ๋๋ค. ์คํค๋ง๋ ํ ์ด๋ธ, ํ, ์ด, ์ธ๋ฑ์ค, ํ ์ด๋ธ ๊ฐ ๊ด๊ณ, ๊ธฐํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์๋ฅผ ์ ํํ๊ฒ ๊ท์ ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ ์ด๋ธ ์ฌ์ด์ ๊ด๊ณ์์ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ์คํํฉ๋๋ค. | NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํค-๊ฐ, ๋ฌธ์, ๊ทธ๋ํ, ์ธ๋ฉ๋ชจ๋ฆฌ, ๊ฒ์ ๋ฑ ์ฑ๋ฅ๊ณผ ๊ท๋ชจ ํ์ฅ์ ์ต์ ํ๋ ๋ค์ํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ ๊ณตํฉ๋๋ค. (DynamoDB, MongoDB, Neptune, Redis, Elasticsearch) |
ACID ์์ฑ | ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์์๊ฐ, ์ผ๊ด์ฑ, ๊ฒฉ๋ฆฌ์ฑ ๋ฐ ์ง์์ฑ(ACID, atomicity, consistency, isolation, and durability)์ ์์ฑ์ ์ ๊ณตํฉ๋๋ค:
|
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํํ ์ํ์ผ๋ก ํ์ฅํ ์ ์๋ ๋ณด๋ค ์ ์ฐํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ํด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๋ถ ACID ์์ฑ์ ์ํํจ์ผ๋ก์จ ์กฐ์ ํฉ๋๋ค. ์ด๋ก์จ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋จ์ผ ์ธ์คํด์ค์ ํ๊ณ๋ฅผ ๋์ด ์ํ์ผ๋ก ํ์ฅํด์ผ ํ๋ ์ฌ์ฉ ์ฌ๋ก์์ ๋์ ์ฒ๋ฆฌ๋, ๋ฎ์ ์ง์ฐ ์๊ฐ์ ์ํ ํ์ํ ์ ํ์ด ๋ฉ๋๋ค. |
์ฑ๋ฅ | ์ฑ๋ฅ์ ์ผ๋ฐ์ ์ผ๋ก ๋์คํฌ ํ์ ์์คํ ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ์ต๊ณ ์ฑ๋ฅ์ ๋ฌ์ฑํ๊ธฐ ์ํด์๋ ์ฟผ๋ฆฌ, ์ธ๋ฑ์ค ๋ฐ ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ์์ฃผ ์ต์ ํํด์ผ ํฉ๋๋ค. | ์ฑ๋ฅ์ ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๋ณธ ํ๋์จ์ด ํด๋ฌ์คํฐ ํฌ๊ธฐ, ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ ๋ฐ ํธ์ถ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ ๋๋ค. |
ํ์ฅ | ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๋ฐ์ ์ผ๋ก ํ๋์จ์ด์ ๊ณ์ฐ ์ฑ๋ฅ์ ๋์ด๊ฑฐ๋ ์ฝ๊ธฐ ์ ์ฉ ์ํฌ๋ก๋์ ๋ณต์ ๋ฌผ์ ์ถ๊ฐํจ์ผ๋ก์จ ํ์ฅ๋ฉ๋๋ค. | NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฑฐ์ ๋ฌด์ ํ์ ์ธ ๋ฒ์์์ ์ผ๊ด๋ ์ฑ๋ฅ์ ์ ๊ณตํ๋ ์ฒ๋ฆฌ๋ ์ ๊ณ ๋ฅผ ์ํด ๋ถ์ฐํ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํด ์ก์ธ์ค ํจํด์ด ํ์ฅ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ถํ ์ฑ์ด ์์ต๋๋ค. |
API | ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ ๋ฐ ๊ฒ์ํ๊ธฐ ์ํ ์์ฒญ์ SQL(๊ตฌ์กฐํ ์ง์ ์ธ์ด)์ ์ค์ํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ฌ๋ฉ๋๋ค. ์ฟผ๋ฆฌ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํด ๊ตฌ๋ฌธ ๋ถ์๋๊ณ ์คํ๋ฉ๋๋ค. | ๊ฐ์ฒด ๊ธฐ๋ฐ API๋ฅผ ํตํด ์ฑ ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฝ๊ฒ ์ ์ฅ ๋ฐ ๊ฒ์ํ ์ ์์ต๋๋ค. ํํฐ์ ํค๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ์์ ํค-๊ฐ ํ์ด, ์ด ์ธํธ ๋๋ ์ผ๋ จ์ ์ฑ ๊ฐ์ฒด ๋ฐ ์์ฑ์ ํฌํจํ๋ ๋ฐ์ ํ ๋ฌธ์๋ฅผ ๊ฒ์ํ ์ ์์ต๋๋ค. |
- ๊ด๊ณํ ๋ชจ๋ธ์ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ ํ ์ด๋ธ๊ฐ์ ์กฐ์ธ ๊ธฐ๋ฅ ์์
- ์ง์ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ๋ฑ์ ๋นSQL ์ธํฐํ์ด์ค๋ฅผ ํตํ ๋ฐ์ดํฐ ์ก์ธ์ค
- ๋๋ถ๋ถ ์ฌ๋ฌ ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๋ฅผ ๋ฌถ์ด์(ํด๋ฌ์คํฐ๋ง) ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌ์ฑ
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ์ง์ํ๋ Data์ฒ๋ฆฌ ์๊ฒฐ์ฑ(Transaction ACID ์ง์) ๋ฏธ๋ณด์ฅ
- ๋ฐ์ดํฐ์ ์คํค๋ง์ ์์ฑ๋ค์ ๋ค์ํ๊ฒ ์์ฉ ๋ฐ ๋์ ์ ์ (Schema-less)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ค๋จ ์๋ ์๋น์ค์ ์๋ ๋ณต๊ตฌ ๊ธฐ๋ฅ์ง์
- ๋ค์๊ฐ Open Source๋ก ์ ๊ณต
- ํ์ฅ์ฑ(์์ง์ /์ํ์ ), ๊ฐ์ฉ์ฑ, ๋์ ์ฑ๋ฅ
์ฉ์ด๋น๊ต
SQL | MongoDB | DynamoDB | Cassandra | Couchbase |
ํ ์ด๋ธ | ์ปฌ๋ ์ | ํ ์ด๋ธ | ํ ์ด๋ธ | ๋ฐ์ดํฐ ๋ฒํท |
ํ | ๋ฌธ์ | ํญ๋ชฉ | ์ด | ๋ฌธ์ |
์ปฌ๋ผ | ํ๋ | ์์ฑ | ์ปฌ๋ผ | ํ๋ |
๊ธฐ๋ณธ ํค | ObjectId | ๊ธฐ๋ณธ ํค | ๊ธฐ๋ณธ ํค | ๋ฌธ์ ID |
์ธ๋ฑ์ค | ์ธ๋ฑ์ค | ๋ณด์กฐ ์ธ๋ฑ์ค | ์ธ๋ฑ์ค | ์ธ๋ฑ์ค |
๋ณด๊ธฐ | ๋ณด๊ธฐ | ๊ธ๋ก๋ฒ ๋ณด์กฐ ์ธ๋ฑ์ค | ๊ตฌ์ฒดํ๋ ๋ณด๊ธฐ | ๋ณด๊ธฐ |
์ค์ฒฉ๋ ํ ์ด๋ธ ๋๋ ๊ฐ์ฒด | ํฌํจ ๋ฌธ์ | ๋งต | ๋งต | ๋งต |
๋ฐฐ์ด | ๋ฐฐ์ด | ๋ชฉ๋ก | ๋ชฉ๋ก | ๋ชฉ๋ก |
CAP ์ด๋ก
๋ถ์ฐ ์์คํ
์์๋ 3๊ฐ ์์ฑ์ ๋ชจ๋ ๊ฐ์ง๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค. ๊ฐ ์์ฑ์ ์๋์ ๊ฐ์ด 3๊ฐ์ง์ด๋ค.
Consistency (์ผ๊ด์ฑ)
- CAP์ด๋ก ์์ ๋งํ๋ Consistency๋ ACID์ ‘C’๊ฐ ์๋๋ค! ACID์ ‘C’๋ '๋ฐ์ดํฐ๋ ํญ์ ์ผ๊ด์ฑ ์๋ ์ํ๋ฅผ ์ ์งํด์ผ ํ๊ณ ๋ฐ์ดํฐ์ ์กฐ์ ํ์๋ ๋ฌด๊ฒฐ์ฑ์ ํด์น์ง ๋ง์์ผ ํ๋ค'๋ ์์ฑ์ด๋ค.
- CAP์ ‘C’๋ 'Single request/response operation sequence'์ ์์ฑ์ ๋ํ๋ธ๋ค. ์ฐ๊ธฐ ๋์์ด ์๋ฃ๋ ํ ๋ฐ์ํ๋ ์ฝ๊ธฐ ๋์์ ๋ง์ง๋ง์ผ๋ก ์ฐ์ฌ์ง ๋ฐ์ดํฐ๋ฅผ ๋ฆฌํดํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ๋ชจ๋ ๋ ธ๋๊ฐ ๊ฐ์ ์๊ฐ์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค์ผ ํ๋ค. (์ ์ฅ๋ ๋ฐ์ดํฐ๊น์ง ๋ชจ๋ ๊ฐ์ ํ์๋ ์์)
Availability (๊ฐ์ฉ์ฑ)
- 'ํน์ ๋ ธ๋๊ฐ ์ฅ์ ๊ฐ ๋๋ ์๋น์ค๊ฐ ๊ฐ๋ฅํด์ผ ํ๋ค'๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
- ๋ฐ์ดํฐ ์ ์ฅ์์ ๋ํ ๋ชจ๋ ๋์(read, write ๋ฑ)์ ํญ์ ์ฑ๊ณต์ ์ผ๋ก ๋ฆฌํด๋์ด์ผ ํ๋ค.
- ๋ช ํํด ๋ณด์ด๋ ๋จ์ด์ด๊ธฐ๋ ํ์ง๋ง ๋ถ์ฐ ์์คํ ์์์ ํน์ง์ ๋งํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ '์๋น์ค๊ฐ ๊ฐ๋ฅํ๋ค'์ '์ฑ๊ณต์ ์ผ๋ก ๋ฆฌํด'์ด๋ผ๋ ํํ์ด ์ ๋งคํ๋ค. ์ผ๋ง๋์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ ๊น์ง๋ฅผ ์ฑ๊ณต์ ์ด๋ผ๊ณ ํ ์ ์๋๋์ ๋ํ ๋ฌธ์ ๊ฐ ๋จ์์๋ค. '20์๊ฐ์ ๋ ๊ธฐ๋ค๋ ธ๋๋ ๋ฆฌํด์ด ์์ด! Availability๊ฐ ์๋ ์์คํ ์ด์ผ!'๋ผ๊ณ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ค์ํ๋ฒ '์ฑ๊ณต์ ์ผ๋ก ๋ฆฌํด'์ ๋ํด์ ๋ณด๋ฉด ๋ชจ๋ ๋์์ ๋ํด์ ์์คํ ์ด 'Fail!!'์ด๋ผ๋ ๋ฆฌํด์ ์ฑ๊ณต์ ์ผ๋ก ๋ณด๋ด์ค๋ค๋ฉด ๊ทธ๊ฒ์ Availability๊ฐ ์๋ค๊ณ ํด์ผ ํ๋๋์ ๋ํด์๋ ์ ๋งคํ๋ค. CAP๋ฅผ ์ค๋ช ํ๋ ๋ฌธ์๋ค ์ค 'Fail!!'์ด๋ผ๊ณ ๋ฆฌํด์ ํ๋ ๊ฒฝ์ฐ๋ '์ฑ๊ณต์ ์ธ ๋ฆฌํด'์ด๋ผ๊ณ ์ค๋ช ํ๋ ๊ฒ์ ๋ณด์๋ค.
Partitions Tolerance (๋ถ๋ฆฌ ๋ด๊ตฌ์ฑ)
- ์๋๋ Tolerance to network Partitions์ธ๋ฐ ๋ณดํต์ Partition-tolerance๋ผ๊ณ ๋ ํ๋ค.
- ๋ ธ๋๊ฐ์ ํต์ ๋ฌธ์ ๊ฐ ์๊ฒจ์ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ง ๋ชปํ๋ ์ํฉ์ด๋ผ๋ ๋์ํด์ผ ํ๋ค.
- Availablity์์ ์ฐจ์ด์ ์ Availability๋ ํน์ ๋ ธ๋๊ฐ ์ฅ์ ๊ฐ ๋ฐ์ํ ์ํฉ์ ๋ํ ๊ฒ์ด๊ณ Tolerance to network Partitions๋ ๋ ธ๋์ ์ํ๋ ์ ์์ด์ง๋ง ๋คํธ์ํฌ ๋ฑ์ ๋ฌธ์ ๋ก ์๋ก๊ฐ์ ์ฐ๊ฒฐ์ด ๋์ด์ง ์ํฉ์ ๋ํ ๊ฒ์ด๋ค
์ฐธ๊ณ
'๐CS > DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] SQL Injection (0) | 2021.10.13 |
---|---|
[DB] ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ์ฑ๋ฅ (0) | 2021.08.04 |
[DB] ํธ๋์ญ์ ์ ํ ์ค์ (0) | 2021.05.02 |
[DB] ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค(Transaction Isolation Level) (0) | 2021.04.23 |
[DB] ํธ๋์ญ์ (Transaction) (0) | 2021.04.23 |
๋๊ธ