[Database] SQL vs NoSQL
π― SQL vs NoSQL
SQL(Structured Query Language)
SQL(Structured Query Language)μ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μμ μ¬μ©νλ 쿼리 μΈμ΄μ
λλ€.
SQLμ μ¬μ©νλ©΄ λ°μ΄ν°λ² μ΄μ€μ μ μ₯λ λ°μ΄ν°λ₯Ό κ²μνκ±°λ μ‘°μνλ λ±μ μμ
μ ν μ μμ΅λλ€. SQLμ λ°μ΄ν°μ ꡬ쑰μ μ νμ μ μνκ³ , λ°μ΄ν°λ₯Ό μ½μ
, μμ , μμ , κ²μνλλ° μ¬μ©λ©λλ€. SQLμ λ°μ΄ν°λ² μ΄μ€μ μ€ν€λ§λ₯Ό μ μνλ λ°μ΄ν° μ μ μΈμ΄(DDL), λ°μ΄ν°λ₯Ό μ‘°μνλ λ°μ΄ν° μ‘°μ μΈμ΄(DML), λ°μ΄ν°λ₯Ό κ²μνλ λ°μ΄ν° κ²μ μΈμ΄(DQL), λ°μ΄ν°λ₯Ό μ μ΄νλ λ°μ΄ν° μ μ΄ μΈμ΄(DCL)λ‘ κ΅¬μ±λμ΄ μμ΅λλ€.
SQLμ λλΆλΆμ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ€ν
(RDBMS)μμ μ§μλ©λλ€.
βοΈ SQLμ μ₯μ
- κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μ κ°μ₯ κ°λ ₯ν νΉμ§μΈ λ°μ΄ν°μ μΌκ΄μ±κ³Ό 무결μ±μ 보μ₯ν©λλ€.
- λ°μ΄ν°λ² μ΄μ€ κ΅¬μ‘°κ° νμ€νκ² μ μλμ΄ μμ΄ λ°μ΄ν°λ² μ΄μ€ μ€κ³μ μ΄μμ΄ λΉκ΅μ μ½μ΅λλ€.
- SQLμ λ¬Έλ²μ΄ μ§κ΄μ μ΄κ³ κ°κ²°νκΈ° λλ¬Έμ λΉκ΅μ μ½κ² λ°°μΈ μ μμ΅λλ€.
- λ°μ΄ν° κ²μ, νν°λ§, μ λ ¬, κ·Έλ£Ήν λ± λ€μν λ°μ΄ν° μ²λ¦¬ κΈ°λ₯μ μ 곡ν©λλ€.
ποΈ SQLμ λ¨μ
- κ³ μ λ μ€ν€λ§
- SQL λ°μ΄ν°λ² μ΄μ€λ 미리 μ μλ μ€ν€λ§λ₯Ό μ¬μ©ν©λλ€. λ°λΌμ λ°μ΄ν° μ€ν€λ§κ° λ³κ²½λ κ²½μ°, λͺ¨λ λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈμ μμ ν΄μΌ ν©λλ€. μ΄λ μ€ν€λ§ λ³κ²½μ΄ λΉλ²ν κ²½μ° λ¬Έμ κ° λ μ μμ΅λλ€.
- μμ§μ νμ₯ μ΄λ €μ
- SQL λ°μ΄ν°λ² μ΄μ€λ μΌλ°μ μΌλ‘ λ¨μΌ μλ²μμ μλνλ©°, μλ² μ©λμ΄ νκ³μ λλ¬νλ©΄ μ±λ₯μ΄ μ νλ©λλ€. λκ·λͺ¨ νΈλν½μ΄ λ°μνλ κ²½μ°, μλ²μ μ±λ₯μ λμ΄κΈ° μν΄ λΉμΌ νλμ¨μ΄λ₯Ό ꡬμ νκ±°λ, μμ§μ μΌλ‘ νμ₯νλ λ°©λ²λ°μ μμ΅λλ€.
- λμ μ μ§λ³΄μ λΉμ©
- SQL λ°μ΄ν°λ² μ΄μ€μ κ²½μ°, λ°μ΄ν° ꡬ쑰μ μ€ν€λ§λ₯Ό μ€κ³νκ³ μ μ§λ³΄μνλ λ° λ§μ μκ°κ³Ό λΉμ©μ΄ λ€μ΄κ°λλ€. λ°λΌμ μμ κ·λͺ¨μ νλ‘μ νΈλ κ°μΈμ μΈ λͺ©μ μΌλ‘ μ¬μ©νκΈ°μλ λΉμ© λλΉ ν¨μ¨μ΄ λ¨μ΄μ§ μ μμ΅λλ€.
- 볡μ‘ν μ‘°μΈ μμ
- SQL λ°μ΄ν°λ² μ΄μ€μμλ μ¬λ¬ ν μ΄λΈμ μ‘°μΈν΄μΌ νλ κ²½μ°κ° λ§μ΅λλ€. νμ§λ§ μ΄λ¬ν μ‘°μΈ μμ μ λ§€μ° λ³΅μ‘νλ©°, μ²λ¦¬ μλκ° λ릴 μ μμ΅λλ€.
- μ€ν€λ§ μμ μ΄ μ΄λ €μ
- SQL λ°μ΄ν°λ² μ΄μ€μμλ μ€ν€λ§ λ³κ²½μ΄ λ§€μ° μ΄λ ΅μ΅λλ€. λ°λΌμ μ€ν€λ§ μμ μ ν λλ§λ€ λκ·λͺ¨μ λ°μ΄ν°λ₯Ό λ°±μ νκ³ , λ€μ 볡μν΄μΌ νλ λ± λ³΅μ‘ν κ³Όμ μ κ±°μ³μΌ ν©λλ€.
NoSQL(Not Only SQL)
NoSQLμ "Not Only SQL"μ μ½μ΄λ‘, κ΄κ³ν λ°μ΄ν°λ² μ΄μ€ λͺ¨λΈκ³Ό λ¬λ¦¬ μ€ν€λ§λ₯Ό 미리 μ μνμ§ μλ λΉκ΄κ³ν λ°μ΄ν°λ² μ΄μ€ λͺ¨λΈμ λ§ν©λλ€.
NoSQL λ°μ΄ν°λ² μ΄μ€λ λ°μ΄ν° ꡬ쑰μ μμ±μ΄ λ€μνλ©°, μνμ μΌλ‘ νμ₯μ΄ κ°λ₯ν λΆμ° μμ€ν
μν€ν
μ²λ₯Ό κ°μ§λλ€.
NoSQLμ ν¬κ² 4κ°μ§ μ νμΌλ‘ λΆλ₯λ©λλ€.
- Key-Value Stores
- κ°κ°μ μμ΄ν μ΄ keyμ valueλ‘ μ μ₯λλ λ°μ΄ν° λͺ¨λΈμ λλ€. Redis, Riak λ±μ΄ μ΄ μ νμ ν΄λΉλ©λλ€.
- Document Databases
- key-value storesμ μ μ¬νμ§λ§, valueκ° κ΅¬μ‘°νλ λ¬ΈμμΌ μ μμ΅λλ€. MongoDB, CouchDB λ±μ΄ μ΄ μ νμ ν΄λΉλ©λλ€.
- Column-Family Stores
- BigTable λ°μ΄ν° λͺ¨λΈμ κΈ°λ°μΌλ‘ νλ©°, μ¬λ¬ κ°μ columnμΌλ‘ μ΄λ£¨μ΄μ§ λ μ½λλ₯Ό μ μ₯ν©λλ€. Cassandra, HBase λ±μ΄ μ΄ μ νμ ν΄λΉλ©λλ€.
- Graph Databases
- λ°μ΄ν°λ₯Ό λ Έλ(node)μ μ£μ§(edge)μ κ·Έλν ννλ‘ μ μ₯ν©λλ€. Neo4j, OrientDB λ±μ΄ μ΄ μ νμ ν΄λΉλ©λλ€.
βοΈ NoSQLμ μ₯μ
- μ μ°μ±
- λ°μ΄ν° λͺ¨λΈμ΄ 미리 μ μλμ΄ μμ§ μμμ μλ‘μ΄ μμ±μ μΆκ°νκ±°λ μμ ν λ μ μ°ν©λλ€.
- νμ₯μ±
- μνμ μΌλ‘ μ½κ² νμ₯μ΄ κ°λ₯ν©λλ€.
- λμ κ°μ©μ±
- λΆμ° μμ€ν μν€ν μ²λ₯Ό κ°μ§κ³ μμ΄μ μ₯μ κ° λ°μν΄λ λ°μ΄ν° μ μ€μ΄ λ°μνμ§ μμ΅λλ€.
- λΉ λ₯Έ μ²λ¦¬ μλ
- λλΆλΆμ NoSQLμ λ©λͺ¨λ¦¬μ λ°μ΄ν°λ₯Ό μ μ₯νκΈ° λλ¬Έμ λΉ λ₯Έ μλ΅ μλλ₯Ό κ°μ§κ³ μμ΅λλ€.
ποΈ NoSQLμ λ¨μ
- νκ³λ κΈ°λ₯
- NoSQLμ κ°κ°μ μ νμ λ°λΌ νΉνλ κΈ°λ₯μ κ°μ§κ³ μμ΄μ νΉμ ν μμ μ μ ν©νμ§λ§, λͺ¨λ μμ μ λν΄μλ SQLλ³΄λ€ μ νμ μΈ κΈ°λ₯μ κ°μ§κ³ μμ΅λλ€.
- λ°μ΄ν° μΌκ΄μ± 보μ₯ μ΄λ €μ
- λ°μ΄ν° μΌκ΄μ±μ΄ 보μ₯λμ§ μλ κ²½μ°κ° μμ΅λλ€.
- νμ΅ λΉμ©
- SQLλ³΄λ€ NoSQLμ νμ΅νλ λ° λμ λΉμ©μ΄ νμν©λλ€.
SQL vs NoSQL
SQLκ³Ό NoSQLμ κ°κ° κ²°μ ν λ λͺ κ°μ§ μμλ₯Ό κ³ λ €ν΄μΌ ν©λλ€.
- λ°μ΄ν° ꡬ쑰μ μ€ν€λ§
- SQLμ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ‘ ꡬ쑰νλ λ°μ΄ν°λ₯Ό λ€λ£¨λ λ° μ ν©ν©λλ€. μ€ν€λ§κ° λͺ ννκ² μ μλμ΄ μκ³ , κ΄κ³κ° 볡μ‘ν λ°μ΄ν°λ₯Ό λ€λ£¨λ λ° μ©μ΄ν©λλ€. λ°λ©΄ NoSQLμ μ€ν€λ§κ° μ μ°νκ³ μμ λ‘μ΄ ννλ‘ λ°μ΄ν°λ₯Ό μ μ₯ν μ μμ΅λλ€. λ°μ΄ν°μ κ΅¬μ‘°κ° λΆλͺ ννκ±°λ λ³κ²½ κ°λ₯μ±μ΄ λμ κ²½μ° NoSQLμ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
- λ°μ΄ν° μκ³Ό μ²λ¦¬ μλ
- λμ©λ λ°μ΄ν° μ²λ¦¬μ λΉ λ₯Έ μ½κΈ°/μ°κΈ° μλλ₯Ό μꡬνλ κ²½μ° NoSQLμ΄ μ ν©ν©λλ€. NoSQLμ μνμ νμ₯μ΄ μ©μ΄νκ³ λΆμ° μ²λ¦¬μ μ ν©ν ꡬ쑰λ₯Ό κ°μ§κ³ μμ΅λλ€. SQLμ λμ©λ λ°μ΄ν° μ²λ¦¬μλ μ ν©νμ§λ§, NoSQL보λ€λ μ²λ¦¬ μλκ° λλ¦¬κ³ , μμ§μ νμ₯μ νκ³κ° μμ μ μμ΅λλ€.
- νΈλμμ
μ²λ¦¬μ μΌκ΄μ±
- SQLμ ACID(μμμ±, μΌκ΄μ±, κ³ λ¦½μ±, μ§μμ±) νΈλμμ μ μ§μνλ©°, λ°μ΄ν° μΌκ΄μ±κ³Ό 무결μ±μ 보μ₯ν©λλ€. λ°λΌμ λ°μ΄ν°μ μΌκ΄μ±μ΄ λ§€μ° μ€μν κ²½μ° SQLμ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€. NoSQLμ μΌκ΄μ±μ΄ 보μ₯λμ§ μμ μ μμ§λ§, λμ λΆμ° μ²λ¦¬κ° μ©μ΄νκ³ , νμ₯μ±κ³Ό κ°μ©μ±μ΄ λμ΅λλ€.
- κ°λ°μ λ° μΈνλΌ μλ
- SQLκ³Ό NoSQLμ κ°κ° λ€λ₯Έ κ°λ° λ° μ΄μ λ°©μμ΄ νμν©λλ€. SQLμ κ΄κ³ν λͺ¨λΈκ³Ό SQL 쿼리λ₯Ό λ€λ£¨λ λ°μ λμ μλμ΄ νμνκ³ , λμ©λ μ²λ¦¬λ₯Ό μν΄ λ³΅μ‘ν μΈνλΌλ₯Ό ꡬμΆν΄μΌ ν μλ μμ΅λλ€. NoSQLμ κ° λ°μ΄ν°λ² μ΄μ€λ§λ€ λ€λ₯Έ λ¬Έλ²κ³Ό APIλ₯Ό κ°μ§κ³ μμΌλ©°, 볡μ‘ν μΈνλΌλ₯Ό ꡬμΆν νμλ μμ§λ§, λΆμ° μ²λ¦¬ λ° μ΄μ κ²½νμ΄ νμν©λλ€.