μ£Όλμ΄ κ°λ°μ λ©΄μ μ€λΉ - DB
2023. 1. 10. 15:07γλ©΄μ μ€λΉ
ν΄λΉ ν¬μ€ν μ λ©΄μ μ€λΉλ₯Ό νλ©΄μ 곡λΆν λ΄μ©λ€μ κΈ°λ‘νκ³ νμ λ€μ 보기 μν΄ μμ±νμ΅λλ€! λ§μ½ μλͺ»λ λ΄μ©μ΄ μλ€λ©΄ μ κ·Ήμ μΌλ‘ νΌλλ°±ν΄μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€.
λ°μ΄ν°λ² μ΄μ€μ νΉμ§
- μ€μκ° μ κ·Όμ±(Real-Time Accessibility)
- μ¬μ©μμ λ°μ΄ν° μꡬμ μ€μκ°μΌλ‘ μλ΅ κ°λ₯
- μ§μμ μΈ λ³ν(Continuous Evolution)
- μ§μμ μΌλ‘ λ³ννλ νμ€ μΈκ³λ₯Ό μ νν λ°μνκΈ° μν΄ DB λν μ§μμ μΌλ‘ λ³ν κ°λ₯
- λμ 곡μ κ°λ₯(Concurrent Sharing)
- μ¬λ¬ μ¬μ©μκ° λ¬Έμ μμ΄ λμμ μ΄μ© κ°λ₯
- λ΄μ©μ μν μ°Έμ‘°(Content Reference)
- λ°μ΄ν°κ° μ μ₯λ λμ€ν¬μ μμΉ, μ£Όμκ° μλ λ°μ΄ν°μ κ°μ ν΅ν΄ μ°Έμ‘° κ°λ₯
λ°μ΄ν°λ² μ΄μ€ μΈμ΄
- DDL(μ μμ΄: Data Definition Language)
- μλ‘μ΄ λ°μ΄ν°λ² μ΄μ€λ₯Ό ꡬμΆνκΈ° μν΄ μ€ν€λ§λ₯Ό μ μνκ±°λ κΈ°μ‘΄ μ€ν€λ§λ₯Ό μμ , μμ νκΈ° μν΄ μ¬μ©
- DML(μ‘°μμ΄: Data Manipulation Language)
- λ°μ΄ν°λ² μ΄μ€ λ΄ λ°μ΄ν°μ μ½μ , μμ , μμ , κ²μ λ±μ μν΄ μ¬μ©
- μ μ°¨μ λ°μ΄ν° μ‘°μμ΄
- μ¬μ©μκ° μνλ λ°μ΄ν°κ° 무μμΈμ§, λ ν΄λΉ λ°μ΄ν°λ₯Ό μ»μΌλ €λ©΄ μ΄λ»κ² μ²λ¦¬ν΄μΌνλμ§κΉμ§ μ€λͺ
- λΉμ μ°¨μ λ°μ΄ν° μ‘°μμ΄
- μ¬μ©μκ° μνλ λ°μ΄ν°κ° 무μμΈμ§λ§ μ€λͺ
- DCL(μ μ΄μ΄: Data Control Language)
- λ°μ΄ν°λ² μ΄μ€μ 무결μ±, 보μ, ν볡, λμμ±μ μν΄ νμν κ·μΉμ΄λ κΈ°λ²μ μ μνκΈ° μν΄ μ¬μ©
SELECT λ¬Έμ μ€ν μμ
- FROM, ON, JOIN
- WHERE, GROUP BY, HAVING
- SELECT
- DISTINCT
- ORDER BY
- LIMIT
Index(μΈλ±μ€)λ?
- μΈλ±μ€λ ν μ΄λΈμ μ²μλΆν° λκΉμ§ κ²μνλ Full Table Scanμλ λ¬λ¦¬ μΈλ±μ€λ₯Ό ν΅ν΄ νΉμ λ°μ΄ν°λ₯Ό κ²μνλ λ°©λ²
- μΈλ±μ€λ₯Ό ν΅νλ©΄ λ°μ΄ν°λ₯Ό νμ μ λ ¬λ μνλ‘ μ μ§νκΈ° λλ¬Έμ κ²μμ΄ λΉ¨λΌμ§μ§λ§, λ°μ΄ν°μ μΆκ°, μμ , μμ μ μμ΄μλ 쿼리 μ€ν μλκ° λλ €μ§
Indexμμ μ¬μ©λλ μλ£ κ΅¬μ‘°
- B+Tree μΈλ±μ€ μλ£κ΅¬μ‘°
- B-Treeλ₯Ό κ°μ ν ꡬ쑰λ‘, B-Treeμ 리ν λ Έλλ₯Ό μ°κ²° 리μ€νΈλ‘ μ°κ²°νμ¬ μμ°¨ κ²μμ΄ μ©μ΄.
- μκ°λ³΅μ‘λ: O(log2 N)
- ν΄μν
μ΄λΈ
- μΉΌλΌ λ°μ΄ν° κΈ°λ°μΌλ‘ μμ±λ ν΄μλ₯Ό ν΅ν μΈλ±μ€ ꡬν
- μκ°λ³΅μ‘λκ° μ°μνμ§λ§ μμ°¨ κ²μμ΄ λΆκ°νκΈ° λλ¬Έμ μ μ°μ΄μ§ μμ
- μκ°λ³΅μ‘λ: O(1)
μ΄μνμ
- ν μ΄λΈμ μλͺ»λ μ€κ³λ‘ μΈν΄ λ°μνλ λ Όλ¦¬μ μ€λ₯λ₯Ό μΉν¨
- μ½μ
μ΄μ
- μλ£λ₯Ό μ½μ ν λ νΉμ μμ±μ ν΄λΉνλ κ°μ΄ μμ΄ NULLμ μ λ ₯ ν΄μΌ νλ νμ
- κ°±μ μ΄μ
- μ€λ³΅λ λ°μ΄ν° μ€ μΌλΆλ§ μμ λμ΄ λ°μ΄ν°μ λͺ¨μμ΄ λ°μνλ νμ
- μμ μ΄μ
- νΉμ μ 보μ μμ μ, μλμΉ μμ λ€λ₯Έ μ 보κΉμ§ μμ λλ νμ
DB μ κ·ν
- νλμ 릴λ μ΄μ μ νλμ μλ―Έλ§ μ‘΄μ¬νλλ‘ λ¦΄λ μ΄μ μ λΆν΄νλ κ³Όμ . λ°μ΄ν°μ μΌκ΄μ±, μ΅μνμ λ°μ΄ν° μ€λ³΅, μ΅λνμ λ°μ΄ν° μ μ°μ±μ μν¨.
- DBμμ λ°μνλ κ°μ’ μ΄μνμ(μ½μ , κ°±μ , μμ )μ ν΄κ²°νλ©° λ λμκ° νμ₯μ μ©μ΄ν DB ꡬ쑰λ₯Ό κ΅¬μΆ κ°λ₯.
- μ 1μ κ·ν
- ν μ΄λΈμ μΉΌλΌμ΄ μμ κ°(Atomic Value; νλμ κ°)μ κ°λλ‘ λΆν΄
- μ 2μ κ·ν
- μ 1μ κ·ν λ§μ‘±
- κΈ°λ³Έν€κ° μλ μμ±μ΄ κΈ°λ³Έν€μ λν΄ μμ ν¨μ μ’
μμ΄ λλλ‘ λΆν΄
- ν¨μ μ’ μ: Xκ° κ²°μ λμμ λ Yκ°μ΄ μ μ λ‘ κ²°μ λλ κ΄κ³λ₯Ό ν¨μ μ’ μμ΄λΌκ³ ννν¨.(X→Y)
- μ 3μ κ·ν
- μ 2μ κ·ν λ§μ‘±
- κΈ°λ³Έν€κ° μλ λͺ¨λ μμ±μ΄ κΈ°λ³Έν€μ μ΄νμ ν¨μ μ’
μμ΄ λμ§ μλλ‘ λΆν΄
- μ΄νμ ν¨μ μ’ μ: X→Y, Y→Z μ λ Όλ¦¬μ μΌλ‘ X→Zκ° μ±λ¦½νλλ°, μ΄λ₯Ό μ΄νμ ν¨μ μ’ μμ΄λΌκ³ νν.
μμ κ·ν μ΄μ
- μ κ·ν λ¨κ³κ° λμμ§μλ‘ λ°μ΄ν° μ§μ μ JOINμ΄ λ§μμ§λλ°, μ΄λ 쿼리μ μ±λ₯μ μ νμν€λ μμΈμ΄κΈ° λλ¬Έ
SQL Injection 곡격
- 곡격μκ° μ μμ μΈ μλμ SQL ꡬ문μ μ λ ₯νμ¬ DBλ₯Ό λΉμ μμ μΌλ‘ μ‘°μνλ 곡격
- λ°©μ§
- μ λ ₯κ° κ²μ¦
- 쿼리 μ€ν μ μ λ ₯κ°μ λν κ²μ¦μ κ±°μΉ¨
- Prepared Statements μ΄μ©
- μ΄λ―Έ ꡬ문 λΆμμ΄ λλ 쿼리λ₯Ό λ°νμμ μ¬μ©νλ λ°©λ²
RDBMS vs NoSQL
- RDBMS
- λͺ¨λ λ°μ΄ν°λ₯Ό 2μ°¨μ ν μ΄λΈ ννλ‘ κ΄λ¦¬
- μ₯μ : μ€ν€λ§λ₯Ό λκ³ μ΄λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό κ΄λ¦¬νκΈ° λλ¬Έμ λ°μ΄ν°μ μ ν©μ± 보μ₯ μ©μ΄
- λ¨μ : μμ€ν μ΄ μ»€μ§μλ‘ μΏΌλ¦¬κ° λ³΅μ‘ν΄μ§κ³ μ±λ₯μ΄ μ νλλ©° scale-outμ΄ μ΄λ €μ(scale-upλ§ κ°λ₯)
- NoSQL
- λ°μ΄ν° κ°μ κ΄κ³λ₯Ό μ μνμ§ μλ μ€ν€λ§λ¦¬μ€ ꡬ쑰. λ°μ΄ν° κ΄λ¦¬μ μμ λκ° λΆμ¬λ¨
- μ₯μ : μ€ν€λ§ μμ΄ λ°μ΄ν°λ₯Ό κ΄λ¦¬νμ¬ μμ λ‘μ΄ κ΄λ¦¬ κ°λ₯. scale-up λΏ μλλΌ scale-outμλ μ©μ΄.
- λ¨μ : λ°μ΄ν°μ μ€λ³΅μ΄ λ°μν μ μκ³ , μ€λ³΅λ λ°μ΄ν°κ° μμ λ κ²½μ° λͺ¨λ 컬λ μ μ λν μμ μ κ±°μ³μΌ ν¨.(μ ν©μ± 보μ₯μ΄ μ΄λ €μ)
νΈλμμ
- νΈλμμ μ μμ μ μμ μ±(무결μ±, μΌκ΄μ±)μ 보μ₯νλ μν μ ν¨. μμ λ€μ΄ λͺ¨λ μ±κ³΅μ μΌλ‘ μνλκ±°λ, νΉμ μμ μ€ μΌλΆμμ λ¬Έμ κ° λ°μ μ μμ μ€μ΄λ λͺ¨λ λ³κ²½ μ¬νμ μΌκ΄ μ·¨μνμ¬ μ΄λ₯Ό 보μ₯.
- Commit μ°μ°κ³Ό Rollback μ°μ°
- νΉμ±(ACID)
- μμμ±(Atomicity)
- νΈλμμ μ ꡬμ±νλ λͺ¨λ μ°μ°μ all-or-nothing λ°©μμ μ΄μ©.
- μΌκ΄μ±(Consistency)
- νΈλμμ μ΄ μ±κ³΅μ μΌλ‘ μνλ νμλ λ°μ΄ν°λ² μ΄μ€κ° μΌκ΄λ μνλ₯Ό μ μ§ν΄μΌν¨.
- 격리μ±(Isolation)
- νμ¬ μν μ€μΈ νΈλμμ μ΄ μλ£λ λκΉμ§ νΈλμμ μ΄ μμ±ν μ€κ° μ°μ° κ²°κ³Όμ λ€λ₯Έ νΈλμμ μ΄ μ κ·Όν μ μμ.
- μμμ±(Durability)
- νΈλμμ μ ν΅ν΄ λ°μ΄ν°λ² μ΄μ€μ λ°μλ κ²°κ³Όλ μꡬμ μ΄μ΄μΌ ν¨.
- μμμ±(Atomicity)
DB λ½
- DB λ½μ νΈλμμ μ²λ¦¬μ μμ°¨μ±μ 보μ₯νκΈ° μν λ°©λ²
- 곡μ λ½
- νΈλμμ μ΄ μ½κΈ° μμ μ μνν λ μ€νλλ λ½μ΄λ©°, 곡μ λ½λΌλ¦¬λ λμμ μ κ·Όμ΄ κ°λ₯.(λ¨, 곡μ λ½λ λ°μ΄ν°μ λ°°νλ½μ μ κ·Ό λΆκ°)
- λ°°νλ½
- νΈλμμ μ΄ λ°μ΄ν°λ₯Ό λ³κ²½ν λ μ€νλλ λ½. κ°μ₯ λμ κ°λμ λ½μ΄ μνλλ©°, μ΄μλ μ΄λ ν μ’ λ₯μ λ½λ μ κ·Ό λΆκ°.
μ΅ν°λ§μ΄μ λ?
- SQLμ κ°μ₯ λΉ λ₯΄κ³ ν¨μ¨μ μΌλ‘ μννκΈ° μν΄ μ΅μ μ μν κ²½λ‘λ₯Ό μμ±ν΄μ£Όλ DBMSμ ν΅μ¬ μμ§.
- SQLμ μ€νκ³νλ€μ μ립 ν κ·Έ μ€ μ΅μ μ€νκ³νμ ν΅ν΄ 쿼리λ₯Ό μνμν΄.