์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- CLI๋ช ๋ น์ด
- Publishing
- ๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ
- ๋ถํธ์บ ํ
- CSS
- ๊ณ์ฐ๊ธฐ๋ง๋ค๊ธฐ
- testing
- ๊ฑฐ๋ญ์ ๊ณฑ
- fibonacci
- ๊นํ๋ธ
- ์คํ๋ง
- FilterChain
- ๋ฐ์ผ๋ฆฌ์ฝ๋ฉ
- ๋ฌธ์์ด๋ค์ง๊ธฐ
- Spring Security
- ์ฒซ๊ธ์๋๋ฌธ์
- ์ธํ ๋ฆฌ์ ์ด
- Spring Data JDBC
- ํ์ดํ๋ก๊ทธ๋๋ฐ
- ํ๊ณ
- HTML
- ๋ฐฑ์๋
- ์ปฌ๋ ์ ํ๋ ์์ํฌ
- ๊ทธ๋ฆฌ๋
- ์๋ฐ
- ์ ๋ค๋ฆญ์ค
- java
- ์๋ฃ๊ตฌ์กฐ
- spring data jpa
- ์๊ณ ๋ฆฌ์ฆ
- Today
- Total
๋์ ๋ชจ์
[DB] SQL vs NoSQL ๋ณธ๋ฌธ
๐ SQL vs NoSQL
SQL | NoSQL | |
๊ธฐ๋ฐ | ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค | ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค |
๋ฐ์ดํฐ ์ ์ฅ | SQL์ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ์ ์ ์ฅ | key-value, document, wide-column, graph ๋ฑ์ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ |
๋ฐ์ดํฐ ํ์ | ํ(์ด์ ๋ฐ์ดํฐ ํ์)๊ณผ ์ด(์์ฑ)๋ก ๊ตฌ์ฑ | ๋ฐ์ดํฐ๊ฐ ๊ณ ์ ๋์ด์์ง ์์ |
์คํค๋ง | - ์คํค๋ง์ ๋ง์ถฐ ์ฝ์ด์์ ์ง๊ด์ ์ผ๋ก ํ์
๊ฐ๋ฅ - ์ฒ๋ฆฌํ๋ ค๋ ๋ฐ์ดํฐ ์์ฑ๋ณ๋ก ์ด(column)์ ๋ํ ์ ๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์ ํด์ผ๋จ |
- ์คํค๋ง์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ด(schema on read) - ํ ์ถ๊ฐ ์ ์ฆ์ ์๋ก์ด ์ด์ ์ถ๊ฐํ ์ ์์ - ๊ฐ๋ณ ์์ฑ์ ๋ชจ๋ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋์ ์ ๋ ฅํ์ง ์์๋ ๋จ |
์ฟผ๋ฆฌ | ํ ์ด๋ธ์ ํ์๊ณผ ํ ์ด๋ธ๊ฐ์ ๊ด๊ณ์ ๋ง์ถฐ ๋ฐ์ดํฐ๋ฅผ ์์ฒญ | ๊ตฌ์กฐํ ๋์ง ์์ ์ฟผ๋ฆฌ ์ธ์ด๋ก๋ ๋ฐ์ดํฐ ์์ฒญ์ด ๊ฐ๋ฅ |
ํ์ฅ์ฑ | ์์ง์ ์ผ๋ก ํ์ฅ | ์ํ์ ์ผ๋ก ํ์ฅ |
์ข ๋ฅ | MySQL, Oracle, SQLite, PostgresSQL, MariaDB | MongoDB, Casandra |
๐ NoSQL๊ธฐ๋ฐ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ฑ
Key-Value ํ์
- ์์ฑ์ Key-Value์ ์์ผ๋ก ๋ํ๋ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์ด์ ํํ๋ก ์ ์ฅ
- Key: ์์ฑ ์ด๋ฆ
- Value: ์์ฑ์ ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ ๊ฐ
- ๋ํ์ ์ธ Key-Value ํ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค: Redis, Dynamo ๋ฑ
๋ฌธ์ํ(Document) ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ์ด ์๋ ๋ฌธ์์ฒ๋ผ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋ง์ ๋ฌธ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ JSON๊ณผ ์ ์ฌํ ํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์ํํ์ฌ ์ ์ฅ
- ๊ฐ๊ฐ์ ๋ฌธ์๋ ํ๋์ ์์ฑ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ปฌ๋ ์ ์ด๋ผ๊ณ ํ๋ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ ๊ด๋ฆฌ
- ๋ํ์ ์ธ ๋ฌธ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค: MongoDB
Wide-Column ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด(column) ๋ฐ์ดํฐ๋ฅผ ์ง์ค์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๊ฐ ์ด์๋ key-value ํ์์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๊ณ , ์ปฌ๋ผ ํจ๋ฐ๋ฆฌ(column families)๋ผ๊ณ ํ๋ ์ด ์งํฉ์ฒด ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ
- ํ๋์ ํ์ ๋ง์ ์ด์ ํฌํจํ ์ ์์ด์ ์ ์ฐ์ฑ์ด ๋์
- ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํ์ํ ์ด์ ์ ์ฐํ๊ฒ ์ ํํ ์ ์์ด์ ๊ท๋ชจ๊ฐ ํฐ ๋ฐ์ดํฐ ๋ถ์์ ์ฃผ๋ก ์ฌ์ฉ
- ๋ํ์ ์ธ wide-column ๋ฐ์ดํฐ๋ฒ ์ด์ค: Cassandra, HBase
๊ทธ๋ํ(Graph) ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์๋ฃ๊ตฌ์กฐ์ ๊ทธ๋ํ์ ๋น์ทํ ํ์์ผ๋ก ๋ฐ์ดํฐ ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋ ธ๋(nodes)์ ์์ฑ๋ณ(entities)๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
- ๊ฐ ๋ ธ๋๊ฐ ๊ด๊ณ๋ ์ (edge)์ผ๋ก ํํ
- ๋ํ์ ์ธ ๊ทธ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค: Neo4J, InfiniteGraph
๐ SQL ๊ธฐ๋ฐ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
1. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ACID ์ฑ์ง์ ์ค์ํด์ผ ํ ๋
- ACID: Atomicity(์์์ฑ), Consistency(์ผ๊ด์ฑ), Isolation(๋ ๋ฆฝ์ฑ), Durability(์ง์์ฑ)
- ACID๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์คํ๋๋ ํ๋์ ํธ๋์ญ์ (Transaction)์ ์ํ๋ณํ๋ฅผ ์ํํ๋ ๊ณผ์ ์์ ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ํ์ํ ์ฑ์ง์ด๋ค. SQL์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ ์์ฉํ๋ ๋ฐฉ์์ ์ ํํ๊ฒ ๊ท์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ๋ฐ์ํ ์ ์๋ ์์ธ์ ์ธ ์ํฉ์ ์ค์ด๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌด๊ฒฐ์ฑ์ ๋ณดํธํ ์ ์๋ค.
- ๋ชจ๋ ๊ธ์ต ์๋น์ค๋ฅผ ์ํ ์ํํธ์จ์ด ๊ฐ๋ฐ์์๋ ๋ฐ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ACID ์ฑ์ง์ ์ค์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก SQL์ ์ด์ฉํ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค.
2. ์ํํธ์จ์ด์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๊ฐ ๊ตฌ์กฐ์ ์ด๊ณ ์ผ๊ด์ ์ผ ๋
- ์ํํธ์จ์ด(ํ๋ก์ ํธ)์ ๊ท๋ชจ๊ฐ ๋ง์ ์๋ฒ๋ฅผ ํ์๋ก ํ์ง ์๊ณ ์ผ๊ด๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๋ ์ฃผ๋ก ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค. ๋ค์ํ ๋ฐ์ดํฐ ์ ํ๊ณผ ๋์ ํธ๋ํฝ์ ์ง์ํ๋๋ก ์ค๊ณ๋ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํด์ผ๋ง ํ๋ ์ด์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๐ NoSQL ๊ธฐ๋ฐ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๊ฐ ๊ฑฐ์ ๋๋ ์ ํ ์๋ ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋
- ๋๋ถ๋ถ์ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ ์ฅํ ์ ์๋ ๋ฐ์ดํฐ์ ์ ํ์ ์ ํ์ด ์๊ธฐ ๋๋ฌธ์ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ ํํ ๋์ง ์์ ๋ง์ ์์ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ NoSQL์ ์ ์ฉํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ผ ์ ์๋ค.
- ํด๋ผ์ฐ๋ ์ปดํจํ
๋ฐ ์ ์ฅ๊ณต๊ฐ์ ์ต๋ํ ํ์ฉํ ๋
- ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ์๋ฅผ ๊ตฌ์ถํ๋ฉด, ์ ๋ ดํ ๋น์ฉ์ ์๋ฃจ์ ์ ์ ๊ณต๋ฐ์ ์ ์๋ค. ์ํํธ์จ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์ฅ์ฑ์ด ์ค์ํ๋ค๋ฉด, ์ ์ฐํ๊ฒ ํ์ฅํ ์ ์๋ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
- ๋น ๋ฅด๊ฒ ์๋น์ค๋ฅผ ๊ตฌ์ถํ๋ ๊ณผ์ ์์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์์ฃผ ์
๋ฐ์ดํธํ ๋
- NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์คํค๋ง๋ฅผ ๋ฏธ๋ฆฌ ์ค๋นํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ๋ ๊ณผ์ ์์ ๋งค์ฐ ์ ๋ฆฌํ๋ค. (ex. ๋น ๋ฅด๊ฒ ํ๋กํ ํ์ ์ ์ถ์ํด์ผ ํ ๋)
- ์ํํธ์จ์ด ๋ฒ์ ๋ณ๋ก ๋ง์ ๋ค์ดํ์(๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๋ฅผ ์คํ๋ผ์ธ์ผ๋ก ์ ํํ์ฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์งํํ๋ ์์ ์๊ฐ)์์ด ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์์ฃผ ์ ๋ฐ์ดํธ ํด์ผํ๋ ๊ฒฝ์ฐ, ์คํค๋ง๋ฅผ ๋งค๋ฒ ์์ ํด์ผ ํ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณด๋ค NoSQL ๊ธฐ๋ฐ์ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋ ์ ํฉํ๋ค.
๐ Which one do we use?
ํ๋ฒ์ ์์ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ค์ ๊ด๊ณํ, ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ชจ๋ ์ฌ์ฉํ์ฌ ์๋น์ค์ ๋ง์ถฐ ์ค๊ณํ๋ค. NoSQL ๊ธฐ๋ฐ์ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํ์ฅ์ฑ์ด๋ ์๋๋ฉด์์ ๋ ๋ฐ์ด๋์ง๋ง, ๊ณ ์ฐจ์์ผ๋ก ๊ตฌ์กฐํ๋ SQL ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ ์ข์ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ๋ ์๋น์ค๋ ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ดํด๋ณด๊ณ ์ ์ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ค์ํ๋ค.
'WILT > DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] SQL - DB ๋ช ๋ น์ด ์์, ๊ธฐ๋ณธ ์ฟผ๋ฆฌ๋ฌธ ์์, ๋ด์ฅํจ์ (0) | 2022.08.07 |
---|