π£οΈ DBMSλ?
DBMS (Database Management Sysyem, λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ€ν ) λ λ°μ΄ν°λ² μ΄μ€ λ΄ λ°μ΄ν°μ μ κ·Όνλλ‘ λμμ£Όλ μμ€ν μ λλ€. DBMSλ ν¬κ² μ§μμ²λ¦¬κΈ°μ μ μ₯μμ€ν μΌλ‘ μ΄λ£¨μ΄μ Έ μμ΅λλ€. DBλ₯Ό μ¬μ©νμ§ μκ³ , OSμ μ’ μμ μΈ νμΌ μμ€ν μ μ¬μ©νλ©΄ νλ‘κ·Έλ¨μ νμ₯μ±μ ν΄μΉκ³ κ²μ ν¨μ¨μ΄ ν¬κ² λ¨μ΄μ§λλ€. λν νμΌ μμ€ν μ λ°μ΄ν° μ€λ³΅, λΉμΌκ΄μ±, κ²μ λ±μ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
λ리 μ¬μ©λλ DBMS μ€ μΌλΆλ MySql, Oracle λ±μ λλ€.
π£οΈ RDBMSλ?
κ΄κ³ν λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ€ν (RDBMS)μ λ°μ΄ν°λ² μ΄μ€μ λ³λμ ν μ΄λΈμ μ μ₯λ κ΄κ³ν λ°μ΄ν° λͺ¨λΈμ κΈ°λ°μΌλ‘νλ©° κ³΅ν΅ μ΄μ μ¬μ©κ³Ό κ΄λ ¨μ΄ μμ΅λλ€. SQL (Structured Query Language)μ μ¬μ©νμ¬ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν°μ μ½κ² μ‘μΈμ€ ν μ μμ΅λλ€.
π£οΈ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ΄μ©ν΄ κ°λ°ν΄ λ³Έ κ²½νμ΄ μλμ?
μ λ OOνλ‘μ νΈλ₯Ό μννλ©° OOμ λν λ°μ΄ν°λ² μ΄μ€λ₯Ό κ΅¬μΆ λ° νμ©νμ΅λλ€. OOν μ΄λΈμ μμ±νκ³ , κ²ΉμΉλ OOκ° μλ€λ μ μ κ³ λ €ν΄ OOμ κΈ°λ³Έ ν€λ‘ μ€μ νμ΅λλ€. κ·Έλ¦¬κ³ νμν μ 보 OOμ λ°λΌ JOIN μ°μ°μ μ΄μ©ν΄ ν μ΄λΈμ μ‘°νν΄ μ¬μ©μμκ² μ 곡νμ΅λλ€.
ꡬμΆνλ λ°μ΄ν°λ² μ΄μ€μ μ μ₯ν μ 보, ν μ΄λΈμ ꡬμ±, ν€ κ°μ μκ°ν΄ λ³΄κ³ λ΅λ³μ μ€λΉν΄μΌ ν©λλ€.
ꡬμΆνλ λ°μ΄ν°λ² μ΄μ€μ ν€ κ°μ λν μ ν¨μ±μ 묻거λ, ERDλ₯Ό κ°λ΅ν 그리λ κ²μ μꡬν μ μμ΅λλ€.
μΆκ°λ‘ μ΄λ€ DBMSλ₯Ό μ¬μ©νκ³ , μ μ¬μ©νλμ§, μ₯λ¨μ μ 무μμΈμ§λ₯Ό μκ³ μμ΄μΌ ν©λλ€.
π£οΈ NoSQLμ΄ λ¬΄μμΈμ§ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μ λΉκ΅ν΄ μ€λͺ ν΄ λ³΄μΈμ.
NoSQLμ λΉκ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ‘, 2μ°¨μ ννμ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ³΄λ€ μ μ°ν λ°μ΄ν° ꡬ쑰λ₯Ό κ°μ§ μ μμ΅λλ€. κ·Έλμ Document, Key-Value, Graph λ± λ€μν ννλ‘ λ°μ΄ν°λ₯Ό μ μ₯ν μ μμ΅λλ€. λν, μλ² μ¦μ€μ ν΅ν λ°μ΄ν°λ² μ΄μ€ νμ₯μ΄ κ°λ₯ν΄μ λ°©λν μμ λ°μ΄ν°λ₯Ό μ μ₯νλ λ° μ 리ν©λλ€. νμ§λ§ μ€λ³΅ λ°μ΄ν°λ₯Ό νμ©νλ―λ‘ λ°μ΄ν°λ₯Ό κ°±μ νλ κ²½μ° κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ³΄λ€ μ²λ¦¬ λΉμ©μ΄ λ§μ΄ λ λ€λ λ¨μ μ΄ μμ΅λλ€.
RDB(κ΄κ³ν λ°μ΄ν°λ² μ΄μ€)
μ ν΄μ§ μ€ν€λ§μ λ°λΌ λ°μ΄ν°λ₯Ό 'ν μ΄λΈ'μ μ μ₯νλ λ°μ΄ν°λ² μ΄μ€
λ°μ΄ν° κ΅¬μ‘°κ° λ³΄μ₯λμ΄μκ³ , μ€λ³΅μ νΌν μ μμ΅λλ€.
SQLμ μ¬μ©ν΄ RDBMSμμ λ°μ΄ν°λ₯Ό μ μ₯, μμ , μμ λ° κ²μν μ μμ΅λλ€.
μμ§μ νμ₯μ΄ κ°λ₯ν©λλ€. (μλ²μ μ±λ₯μ ν₯μμν€λ κ²)
κ΄κ³λ₯Ό λ§Ίκ³ μλ λ°μ΄ν°μ λ³κ²½μ΄ μ¦μ κ²½μ° / λ³κ²½λ μ¬μ§κ° μκ³ , λͺ νν μ€ν€λ§κ° μ¬μ©μμ λ°μ΄ν°μκ² μ€μν κ²½μ°μ μ¬μ©ν©λλ€.
NoSQL
μ€ν€λ§κ° μκ±°λ, λμ¨ν μ€ν€λ§λ‘ λ°μ΄ν° κ°μ κ΄κ³ μμ΄ μμ λ‘μ΄ ννλ‘ λ°μ΄ν°λ₯Ό μ μ₯νλ λ°μ΄ν°λ² μ΄μ€ (λΉμ ν)
μ μ°νκΈ° λλ¬Έμ λ°μ΄ν° μ‘°μ κ³Ό μλ‘μ΄ νλ μμ±μ΄ μμ λ‘μ΅λλ€.
μ€λ³΅μ κ³μν΄μ μ λ°μ΄νΈ ν΄μ€μΌ νλ λ¨μ μ΄ μμ΅λλ€.
μνμ νμ₯μΌλ‘ νΈλν½ λΆμ° λ° λμ©λ μ²λ¦¬κ° κ°λ₯ν©λλ€.
μ½κΈ°λ₯Ό μμ£Όνμ§λ§ λ°μ΄ν° λ³κ²½μ μμ£Ό μλ κ²½μ° / λΉμ νμ λ°μ΄ν° ꡬ쑰λ₯Ό κ°μ§ κ²½μ° / λ§λν μμ λ°μ΄ν°μ μν΄ λ°μ΄ν°λ² μ΄μ€λ₯Ό μνμ μΌλ‘ νμ₯ν΄μΌ νλ κ²½μ°μ μ¬μ©
νλ‘ κ°λ¨ν μ 리νλ©΄ λ€μκ³Ό κ°μ΅λλ€.
κ΅¬λΆ | κ΄κ³ν λ°μ΄ν°λ² μ΄μ€ | NoSQL λ°μ΄ν°λ² μ΄μ€ |
λ°μ΄ν° μ μ₯ | 2μ°¨μ ν μ΄λΈ | λΆμ°ν ꡬ쑰λ‘, λ€μν νν |
λ°μ΄ν° μ€λ³΅ | μμ | μλ€. κ°±μ μ μ΄λ₯Ό μ²λ¦¬ν΄μΌ ν¨ |
μ€ν€λ§ | μ€ν€λ§κ° μμ΄μ λ°μ΄ν°μ 무결μ±μ 보μ₯ν¨ | μ€ν€λ§κ° μκ³ μ μ°ν λ°μ΄ν° μ²λ¦¬ κ°λ₯ |
λ°μ΄ν° νμ₯ | μμ§μ νμ₯ μ§μ (μλ² μ체 μ±λ₯ ν₯μ) | μνμ νμ₯ μ§μ (λΆμ°νμΌλ‘ μλ² μΆκ°) |
DBMS | Oracle, MySQL, SQLite | MongoDB |
π£οΈ λ°μ΄ν°λ² μ΄μ€μμμ 'ν€' μ λν΄ μλλλ‘ μ€λͺ ν΄ μ£ΌμΈμ.
κ²μ, μ λ ¬ μ νν(ν, λ μ½λ) μ ꡬλΆνλ κΈ°μ€μ΄ λλ μμ±μ μλ―Έν©λλ€.
ν€λ μ μΌμ±κ³Ό μ΅μμ±μ΄λΌλ λ κ°μ§ νΉμ±μ κ°μ§ μ μμ΅λλ€.
μ μΌμ± : νλμ ν€ κ°μΌλ‘ ννμ μλ³ν μ μλ€. λͺ¨λ λ μ½λμμ ν΄λΉ νλμ μ€λ³΅λ κ°μ΄ λνλμ§ μλλ€λ μμ±
μ΅μμ± : ννμ μλ³νλ λ° νμν μμ±λ§μΌλ‘ μ΄λ£¨μ΄μ Έ μλ€. μ΅μνμ νλλ‘ λ μ½λλ₯Ό μ μΌνκ² κ΅¬λ³ν μ μμ΄μΌ νλ€λ μμ±
π μνΌν€ (Super Key)
ν μ΄λΈμ μ‘΄μ¬νλ νλλ€μ λΆλΆμ§ν©μΌλ‘μ¨, μ μΌμ±μ λ§μ‘±ν΄μΌ νλ ν€μ λλ€.
λΆλΆ μ§ν©μ΄λ―λ‘ νλ νλλ μνΌν€κ° λ μ μκ³ , νλ μ¬λ¬ κ°κ° λ¬ΆμΈ ν€λ μνΌν€κ° λ μ μμ΅λλ€.
νλκ° μ¬λ¬ κ°κ° λ¬ΆμΈ ν€λ₯Ό '볡ν©ν€'λΌκ³ λ λΆλ¦ λλ€.
π νλ³΄ν€ (Candidate Key)
ν보ν€λ κΈ°λ³Έ ν€κ° λ μ μλ νλ³΄κ° λλ ν€λ€μ μλ―Έν©λλ€. μνΌν€ μ€μμ μ΅μμ±μ λ§μ‘±νλ ν€λ₯Ό μλ―Έν©λλ€.
λ°λΌμ ν보ν€λ, μ μΌμ± + μ΅μμ±μ λ§μ‘±νλ ν€λ€μ μλ―Έν©λλ€.
π κΈ°λ³Έν€ (Primary Key)
κΈ°λ³Έ ν€λ ν μ΄λΈμμ νΉμ λ μ½λλ₯Ό ꡬλ³νκΈ° μν΄ ν보 ν€ μ€μμ μ νλ νλμ κ³ μ ν μλ³μλ₯Ό μλ―Έν©λλ€.
μ€λ³΅λλ κ°μ΄λ NULLκ°μ κ°μ§ μ μμ΅λλ€.
νλ³΄ν€ μ€μμ κ°μ΄ μμ£Ό λ³κ²½λμ§ μκ³ , κ°μ΄ λ¨μν κ²μ μ ννλ κ²μ΄ μ’μ΅λλ€.
π λμ²΄ν€ (Alternate Key)
ν보 ν€ μ€μμ κΈ°λ³Έ ν€λ‘ μ νλ κ²λ€μ μ μΈν λλ¨Έμ§ λͺ¨λ κ²μ λ체ν€λΌκ³ λΆλ¦ λλ€.
π μΈλν€ (Foreign Key)
ν ν μ΄λΈμ ν€ μ€μμ λ€λ₯Έ ν μ΄λΈμ λ μ½λλ₯Ό μ μΌνκ² μλ³ν μ μλ ν€λ₯Ό μλ―Έν©λλ€.
νλμ νλ λλ μ 체 νλμ λΆλΆμ§ν©μΌλ‘ ꡬμ±λκ³ , μ€λ³΅λ κ°κ³Ό NULLκ°μ κ°μ§ μ μμΌλ©°
λ°λμ μ°Έμ‘°λλ ν μ΄λΈμμ μ μΌν κ°μ κ°λ νλλ₯Ό μ°Έμ‘°ν΄μΌ ν©λλ€.
λ°μ΄ν°λ² μ΄μ€μμλ μ°Έμ‘° 무결μ±μ μν΄ μ°Έμ‘° λμμ΄ μ‘΄μ¬νμ§ μλ μΈλ ν€λ₯Ό νμ©νμ§ μμ΅λλ€. μ¦, μ΄λ ν μΈλ ν€ BBκ° AAλ₯Ό μ°Έμ‘°νλ€λ©΄, AAλ λ°λμ λ°μ΄ν°λ² μ΄μ€μ μ‘΄μ¬ν΄μΌ ν©λλ€. μΈλ ν€λ μ°Έμ‘° 무결μ±μ μ§ν€κΈ° μν΄ RESTRICTEDμ CASCADE, SET NULLμ΄λΌλ κ°λ μ μΈλ ν€μ μ μ©ν μ μλλ‘ κΈ°λ₯μ μ 곡ν©λλ€.
RESTRICTED : λ μ½λλ₯Ό λ³κ²½ λλ μμ νκ³ μ ν λ ν΄λΉ λ μ½λλ₯Ό μ°Έμ‘°νκ³ μλ κ°μ²΄κ° μλ€λ©΄, λ³κ²½ λλ μμ μ°μ°μ μ·¨μνλ€.
CASCADE : λ μ½λλ₯Ό λ³κ²½ λλ μμ νλ©΄, ν΄λΉ λ μ½λλ₯Ό μ°Έμ‘°νκ³ μλ κ°μ²΄λ λ³κ²½ λλ μμ λλ€.
SET NULL : λ μ½λλ₯Ό λ³κ²½ λλ μμ νλ©΄, ν΄λΉ λ μ½λλ₯Ό μ°Έμ‘°νκ³ μλ κ°μ²΄μ κ°μ NULLλ‘ μ€μ νλ€.
π£οΈ μνΌ ν€μ ν보 ν€μ μ°¨μ΄μ μ μ€λͺ ν΄ λ³΄μΈμ.
μνΌ ν€μ ν보 ν€ λͺ¨λ ννμ μλ³ν μ μλ, μ μΌμ±μ λ§μ‘±νλ ν€μ λλ€. νμ§λ§ μνΌ ν€λ μ΅μμ±μ λ§μ‘±νμ§ μμλ λ©λλ€. λ°λΌμ μνΌ ν€μλ ννμ μλ³ν μ μλ μμ±μ΄ ν¬ν¨λ μ μμ΅λλ€. λ°λ©΄μ ν보 ν€λ μ΅μμ±μ λ§μ‘±ν΄μΌ ν©λλ€. λ°λΌμ ννμ μλ³νλ λ° νμν μμ±μΌλ‘λ§ κ΅¬μ±λμ΄μΌ ν©λλ€.
π£οΈ λ°μ΄ν°λ² μ΄μ€μ 무결μ±μ κ΄ν΄ μ€λͺ ν΄ λ³΄μΈμ.
무결μ±μ λ°μ΄ν°λ² μ΄μ€μ μ μ₯λ λ°μ΄ν°μ μ€μ λ°μ΄ν°κ° μΌμΉνλμ§?μ λν μ νμ±, μ ν¨μ± κ·Έλ¦¬κ³ λ°μ΄ν°μ μΌκ΄μ±μ μλ―Έν©λλ€. μ΄λ₯Ό 보μ₯νκΈ° μν΄ μ μ₯, μμ , μμ μ μ μ½νκΈ° μν μ‘°κ±΄μ΄ λ¬΄κ²°μ± μ μ½ μ‘°κ±΄μ λλ€.
λ°μ΄ν°λ² μ΄μ€μ 무결μ±μΌλ‘λ κΈ°λ³Έ ν€κ° κ³ μ ν κ°μ κ°μ ΈμΌ νλ€λ κ°μ²΄ 무결μ±, μμ± κ°μ΄ λλ©μΈμ μν΄μΌ νλ€λ λλ©μΈ 무결μ±, μΈλ ν€ κ°μ μ°Έμ‘°νλ ν μ΄λΈμ κΈ°λ³Έ ν€ κ°μ΄μ΄μΌ νλ€λ μ°Έμ‘° 무결μ±μ΄ μμ΅λλ€.
κ°μ²΄ λ¬΄κ²°μ± : λͺ¨λ ν μ΄λΈμ΄ κΈ°λ³Έ ν€λ₯Ό κ°μ ΈμΌ νλ€. κΈ°λ³Έ ν€λ null, μ€λ³΅ κ° λΆκ°λ₯νλ€.
λλ©μΈ λ¬΄κ²°μ± : ν μ΄λΈμ μμ± κ°μ λλ©μΈμ μν΄μΌ νλ€. λλ©μΈμ μμ±μ΄ κ°μ§ μ μλ κ°μ μ§ν©μ μλ―Ένλ€.
μ°Έμ‘° λ¬΄κ²°μ± : μΈλ ν€λ nullμ΄κ±°λ μ°Έμ‘° ν μ΄λΈμ κΈ°λ³Έ ν€ κ°κ³Ό λμΌν΄μΌ νλ€.
π£οΈ Index κ° λ¬΄μμΈκ°μ?
Index (μμΈ) λ νλμ λ°μ΄ν°λ² μ΄μ€ κ°μ²΄μ΄λ©°, λ°μ΄ν°λ² μ΄μ€ ν¬κΈ°μ μ½ 10% μ λμ μ μ₯곡κ°μ νμλ‘ ν©λλ€.
λ°μ΄ν°λ² μ΄μ€μμ νν κ²μ μ±λ₯μ ν₯μνκΈ° μν΄ μμ± κ°κ³Ό ννμ΄ μ μ₯λ μ£Όμλ₯Ό μΈλ±μ€ ν μ΄λΈμ μ μ₯νλ λ°©μμ λλ€.
Key-Value ννλ‘ 'μμ± κ°-νν μ£Όμ'λ₯Ό μΈλ±μ€ ν μ΄λΈμ μ μ₯ν©λλ€. μμ± κ°μ κΈ°μ€μΌλ‘ μ λ ¬ μνλ₯Ό μ μ§ν©λλ€.
Indexλ ν μ΄λΈμ μ²μλΆν° λκΉμ§ κ²μνμ§ μκ³ , μΈλ±μ€λ₯Ό κ²μν΄μ ν΄λΉ μλ£μ ν μ΄λΈμ μ κ·Όνλ λ°©λ²μ μλ―Έν©λλ€.
Indexλ νμ μ λ ¬λ μνλ₯Ό μ μ§νλ―λ‘ νν κ²μλ³΄λ€ μνλ κ°μ κ²μνλ λ° μλκ° λΉ λ₯Έ μ₯μ μ κ°μ§κ³ μμ΅λλ€.
νμ§λ§ μλ‘μ΄ κ°μ μΆκ°νκ±°λ μμ , μμ νλ κ²½μ°μλ μΈλ±μ€ λ³κ²½ λ° μ λ ¬ κ³Όμ μ΄ νμν΄μ DML μ€ν μλκ° λλ¦° λ¨μ μ΄ μμ΅λλ€. λν Index μ μ₯μ μν μΆκ° 곡κ°μ΄ νμνλ€λ λ¨μ μ΄ μμ΅λλ€.
DML(Data Manipulation Language)
λ°μ΄ν°λ₯Ό μ‘°μνλ λͺ λ Ήμ΄ ex) INSERT, DELETE, UPDATE
μ¦, Indexλ λ°μ΄ν°μ μ μ₯ μ±λ₯μ ν¬μνλ λμ , λ°μ΄ν°μ κ²μ μλλ₯Ό λμ΄λ κΈ°λ₯μ λλ€.
μ°Έκ³ λ‘ Primary Keyλ Indexλ₯Ό μμ±ν νμκ° μμ΅λλ€. (ν΄λ¬μ€ν°λ μΈλ±μ€, λ
Όν΄λ¬μ€ν°λ μΈλ±μ€ μ§λ¬Έ μ λ)
π£οΈ μΈλ±μ€λ₯Ό μ¬μ© μ€μΌ λ λ°μ΄ν°λ₯Ό μμ νλ©΄ λ°μν μ μλ λ¬Έμ λ 무μμΌκΉμ?
λ°μ΄ν° μμ κ° μ¦μ κ²½μ°, μ μ₯ 곡κ°μ λλΉν μ μλ€λ λ¬Έμ μ μ΄ μμ΅λλ€. μΈλ±μ€λ λ°μ΄ν°λ² μ΄μ€μ κ²μ ν¨μ¨μ λμ΄κΈ° μν΄ μΈλ±μ€ ν μ΄λΈμ μ¬μ©ν©λλ€. μμ μ°μ°μ΄ μΌμ΄λλ©΄ λ°μ΄ν°λ² μ΄μ€μμλ ν΄λΉ ννμ΄ μμ λμ§λ§, μΈλ±μ€ ν μ΄λΈμμλ ν΄λΉ ννμ 'μ¬μ©νμ§ μμ' μΌλ‘ μ²λ¦¬νκ³ μ€μ λ‘ λ°μ΄ν°λ μμ νμ§ μμ΅λλ€. κ·Έλμ μ¦μ λ°μ΄ν° μμ κ° μΌμ΄λλ©΄ μΈλ±μ€ ν μ΄λΈμ λΆνμν λ°μ΄ν°κ° λ¨μ μ μ₯ 곡κ°μ λλΉνκ² λ©λλ€.
π£οΈ ν΄λ¬μ€ν°λ μΈλ±μ€, λ Όν΄λ¬μ€ν°λ μΈλ±μ€μ λν΄ μ€λͺ ν΄ μ£Όμκ² μ΄μ?
μ± μ λΉμ νμλ©΄,
- ν΄λ¬μ€ν°λ μΈλ±μ€λ νμ΄μ§λ₯Ό μκΈ° λλ¬Έμ λ°λ‘ κ·Έ νμ΄μ§λ₯Ό ν΄λ κ²
- λ ν΄λ¬μ€ν°λ μΈλ±μ€λ λ€μ λͺ©μ°¨μμ μ°Ύκ³ μ νλ λ΄μ©μ νμ΄μ§λ₯Ό μ°Ύκ³ κ·Έ νμ΄μ§λ‘ μ΄λνλ κ².
- ν μ΄λΈ μ€μΊμ μ²μλΆν° ν μ₯μ© λκΈ°λ©΄μ λ΄μ©μ μ°Ύλ κ²μ λλ€.
ν΄λ¬μ€ν°λ μΈλ±μ€λ κ²μ μλλ₯Ό ν₯μμμΌμ£Όμ§λ§ μλ‘μ΄ λ°μ΄ν°λ₯Ό μ½μ ν λλ λ§μ λΉμ©μ΄ μλͺ¨λ©λλ€.
λ Ό ν΄λ¬μ€ν°λ μΈλ±μ€λ λ§ κ·Έλλ‘ ν΄λ¬μ€ν° νμ λ°λμΈ κ΅°μ§ν λμ΄μμ§ μμ μΈλ±μ€ νμ μ λλ€. κ·Έλ¬λ―λ‘ ν μ΄λΈμ μ μ₯λ 물리μ μμμ λ°λΌ λ°μ΄ν°λ₯Ό μ λ ¬νμ§ μμ΅λλ€. μ¦, μμλλ‘ μ λ ¬λμ΄ μμ§ μμ΅λλ€.
μΆμ²
https://gocoder.tistory.com/1826
https://gwang920.github.io/database/clusterednonclustered/
π£οΈ νΈλμμ μ΄ λ¬΄μμΈμ§ μλλλ‘ μ€λͺ ν΄ μ£ΌμΈμ.
λ°μ΄ν°λ² μ΄μ€μ μνλ₯Ό λ³νμν€λ νλμ λ Όλ¦¬μ μΈ μμ λ¨μλ₯Ό μλ―Έν©λλ€. λ Όλ¦¬μ μΈ μμ μ 쿼리 κ°μμ κ΄κ³ μμ΄ νΈλμμ μΌλ‘ λ¬Άμ΄λμ μμ λ¨μ μ μ²΄κ° 100% μ μ©λκ±°λ μ무κ²λ μ μ©λμ§ μμμΌ ν¨μ 보μ₯ν©λλ€. (all or nothing)
νΈλμμ μ νΉμ§μ μ κΈμλ₯Ό λ°μ ACID λΌ λΆλ¦ λλ€.
Atomicity (μμμ±) : νΈλμμ μ ꡬμ±νλ μ°μ° μ μ²΄κ° λͺ¨λ μ μμ μΌλ‘ μ€νλκ±°λ λͺ¨λ μ·¨μλμ΄μΌ νλ€.
Consistency (μΌκ΄μ±) : νΈλμμ μ΄ μ€νμ μ±κ³΅μ μΌλ‘ μλ£νλ©΄ μΈμ λ μΌκ΄μ± μλ λ°μ΄ν°λ² μ΄μ€ μνλ‘ μ μ§νλ€.
Isolation (κ³ λ¦½μ±) : λ κ° μ΄μμ νΈλμμ μ΄ λμμ λ°μν λ, μλ‘μ μ°μ°μ μν₯μ μ£Όλ©΄ μ λλ€.
Durability (μꡬμ±) : 컀λ°λ νΈλμμ μ λ΄μ©μ μꡬν λ°μλλ€.
νΈλμμ μ μνλ νλ, μ₯μ , μ² ν, λΆλΆμλ£, μλ£ κ° μμ΅λλ€.
νλ (Active) : νΈλμμ μ΄ μ€ν μ€μΈ μν
μ₯μ (Fail) : νΈλμμ μ΄ μ€νμ μ€λ₯κ° λ°μν΄ μ€λ¨ν μν
μ² ν (Aborted) : νΈλμμ μ΄ λΉμ μμ μΌλ‘ μ’ λ£λμ΄ Rollback (νΈλμμ μ°μ° μ΄μ μ μνλ‘ λμκ°) μ μννλ μν
λΆλΆ μλ£ (Partitially Commit) : νΈλμμ μ΄ λ§μ§λ§ μ°μ°κΉμ§ μ€ννμ§λ§, Commit μ°μ°μ΄ μ€νλκΈ° μ§μ μ μν
μλ£ (Committed) : νΈλμμ μ΄ μ±κ³΅μ μΌλ‘ μ’ λ£λμ΄ commit μ°μ°μ μ€νν νμ μν
νΈλμμ μ μ²λ¦¬νλ μ€ μ΄μ νμμ΄ λ°μν μ μμ΅λλ€. μμ± κ° μ’ μμ΄λ λ°μ΄ν°μ μ€λ³΅μΌλ‘ λ°μν©λλ€.
μ½μ μ΄μ, κ°±μ μ΄μ, μμ μ΄μμ΄ μμΌλ©°, μμ± κ° μ’ μμ ν΄μ νκ³
λ°μ΄ν°λ² μ΄μ€μ μ€λ³΅μ μ κ±°νκΈ° μν΄ ν μ΄λΈμ λΆν΄νλ λ°μ΄ν°λ² μ΄μ€ μ κ·νλ₯Ό μ§ννκ² λ©λλ€.
π£οΈ DBμμ λ½μ 무μμΈκ°μ?
λ½μ νΈλμμ μ΄ μ²λ¦¬λλ μμλ₯Ό 보μ₯ν΄ λ¬΄κ²°μ±μ μ μ§νλ λ°©λ²μ λλ€. λ½μλ 곡μ λ½κ³Ό λ² ν λ½μ΄ μμ΅λλ€. 곡μ λ½μ λ°μ΄ν°λ₯Ό μ½κΈ° μν λ½μΌλ‘, λ°μ΄ν°κ° λ³κ²½λμ§ μμ΅λλ€. λ°λΌμ νΉμ νΈλμμ μ μν μ€μΌ λ 곡μ λ½μ κ°μ§ λ€λ₯Έ νΈλμμ μ΄ λμμ μ κ·Όν μ μμ΅λλ€. λ°λ©΄μ λ² ν λ½μ λ°μ΄ν°λ₯Ό μμ νλ λ½μΌλ‘, νλμ νΈλμμ μ μν μ€μΌ λ μ κ·Όν μ μμ΅λλ€. μ΄μ κ°μ΄ λ½μ μ΄μ©ν λ νΈλμμ μ΄ κ΅μ°© μνμ λΉ μ§ μ μμ΅λλ€.
π£οΈ λ μμΈν μ€λͺ ν΄μ£ΌμΈμ!
DB Lockμ νΈλμμ μ²λ¦¬μ μμ°¨μ±μ 보μ₯νκΈ° μν λ°©λ²μΌλ‘, λ°μ΄ν°μ μ κ·ΌνκΈ° μ μ Lockμ μμ²ν΄μ Lockμ΄ νλ½λλ©΄ ν΄λΉ λ°μ΄ν°μ μ κ·Όν μ μλλ‘ νλ κΈ°λ²μ λλ€.
DB Lockμ μ’ λ₯λ ν¬κ² λ κ°μ§λ‘, λΉκ΄μ λ½κ³Ό λκ΄μ λ½μ΄ μμ΅λλ€.
λΉκ΄μ λ½κ³Ό λκ΄μ λ½μ μ¬μ© κΈ°μ€μ 'μ½κΈ°μ μμ λΉμ¨μ΄ μ΄λμ κ°κΉμ΄μ§'μ λλ€.
μμ μ λΉμ¨μ΄ λλ€λ©΄ (μΆ©λμ΄ λ°μν κ²μΌλ‘ μμλλ©΄) λΉκ΄μ λ½μ,
μ½κΈ°μ λΉμ€μ΄ λλ€λ©΄ (μΆ©λμ΄ λ°μνμ§ μμ κ²μ΄λΌ μμλλ©΄) λκ΄μ λ½μ μ¬μ©ν©λλ€.
λΉκ΄μ λ½ (Pessimistic Lock) : λ°μ΄ν° κ°±μ μ μΆ©λμ΄ λ°μν κ²μΌλ‘ μμν΄ λ½μ κ±°λ λ°©μ
- 곡μ λ½(Shared Lock) : μ¬μ© μ€μΈ λ°μ΄ν°λ₯Ό λ€λ₯Έ νΈλμμ μ΄ μ½κΈ° νμ©, μ°κΈ° λΉνμ©
- λ² νλ½(Exclusive Lock) : μ¬μ© μ€μΈ λ°μ΄ν°λ₯Ό λ€λ₯Έ νΈλμμ μ΄ μ½κΈ°, μ°κΈ° λͺ¨λ λΉνμ©
- λ°μ΄ν° μμ μ¦μ νΈλμμ μΆ©λμ κ°μ§ν μ μμ΅λλ€.
- λ‘€λ°±μ κ°λ°μκ° μΌμΌν νκΈ° νλ κ²½μ°, μΆ©λμ΄ μΌμ΄λ¬μ λ λ‘€λ°± λΉμ©μ΄ λ§μ΄ λλ κ²½μ°, μ£Όλ¬Έ μμ μΏ ν° μ¬μ©, μλ¦Ό μ 곡, μ£Όλ¬Έμ μμ± λ± μ¬λ¬ κΈ°λ₯μ΄ ν νΈλμμ μ λ¬Άμ¬μλ κ²½μ°μ μ ν©ν©λλ€.
λκ΄μ λ½ (Optimistic Lock) : λ°μ΄ν° κ°±μ μ μΆ©λμ΄ λ°μνμ§ μμ κ²μ΄λΌ κ°μ ν΄ λ½μ κ±Έμ§ μκ³ , λ²μ κ΄λ¦¬ κΈ°λ₯μ ν΅ν΄μ νΈλμμ 격리μ±μ κ΄λ¦¬νλ λ°©μ.
- Version 컬λΌμ λ³λλ‘ μΆκ°ν΄μ μΆ©λμ λ°©μ§ν©λλ€. Version μ 보λ₯Ό μ¬μ©νλ©΄ μ΅μ΄ 컀λ°λ§ μΈμ μ΄ λκ³ , Bulk Insertλ λ²μ μ 무μνκΈ° λλ¬Έμ Bulk Insertμμ λ²μ μ μ¦κ°μν€λ €λ©΄ λ²μ νλλ₯Ό κ°μ λ‘ μ¦κ°μμΌμΌ ν©λλ€.
- DBκ° μ 곡νλ λ½ κΈ°λ₯μ μ¬μ©νμ§ μκ³ , JPAκ° μ 곡νλ λ²μ κ΄λ¦¬ κΈ°λ₯(Application Levelμ Lock)μ μ¬μ©ν©λλ€.
- μ»€λ° μ κΉμ§λ μΆ©λμ μ μ μμ΅λλ€.
- μΆ©λμ΄ λλ©΄ λ‘€λ°± μ²λ¦¬λ κ°λ°μμ λͺ«μ λλ€.
Why?
λ°μ΄ν° μμ μ¦μ νΈλμμ μΆ©λμ κ°μ§νκ³ λ‘€λ°±μ΄ κ°λ₯νλ―λ‘ μμ μ΄ λ§μ κ²½μ° λΉκ΄μ λ½μ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
μ½κΈ° μμ μ΄ λ§λ€λ©΄ JPAμ λ²μ κ΄λ¦¬ κΈ°λ₯μ νμ©ν΄ κ°λ°νλ κ²μ΄ λμ± νΈλ¦¬νκΈ° λλ¬Έμ λκ΄μ λ½μ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
π£οΈ DBμ κ΅μ°© μνκ° λ¬΄μμ λκΉ?
λ°μ΄ν°λ² μ΄μ€μ κ΅μ°© μνλ νλμ νΈλμμ μ΄ μ²λ¦¬ μ€μΈλ° λ°μ΄ν°μ λν΄ λ½μ κ°μ§κ³ μλ μνμμ λ€λ₯Έ νΈλμμ μ΄ μ²λ¦¬ μ€μΈ λ°μ΄ν°μ λν΄ λ½μ μμ²νλ©΄μ 무ν λκΈ° μνμ λΉ μ§λ νμμ λλ€. κ΅μ°© μνλ₯Ό ν΄κ²°νλ λ°©λ²μΌλ‘λ μλ°© κΈ°λ²κ³Ό ννΌ κΈ°λ²μ΄ μμ΅λλ€. μλ°© κΈ°λ²μ νΈλμμ μ μννκΈ° μ μ 미리 λ½μ νλνλ λ°©μμ΄κ³ , ννΌ κΈ°λ²μ νΈλμμ μ΄ λ€μ΄μ¨ μμμ λ°λΌ λ½μ νλνκ±°λ νΈλμμ μ μ’ λ£νλ λ°©μμ λλ€.
π£οΈ νΈλμμ μ 격리μ±μ μμλμ?
λμμ μ¬λ¬ νΈλμμ μ΄ μ²λ¦¬λ λ, νΈλμμ λΌλ¦¬ μΌλ§λ μλ‘ κ³ λ¦½λμ΄ μλμ§λ₯Ό λνλ΄λ κ²μ νΈλμμ μ 격리 μμ€μ΄λΌκ³ λ§ν©λλ€.
κ°λ¨ν νννμλ©΄, νΉμ νΈλμμ μ΄ λ€λ₯Έ νΈλμμ μ λ³κ²½ν λ°μ΄ν°λ₯Ό λ³Ό μ μλλ‘ νμ©ν μ§ λ§μ§λ₯Ό κ²°μ νλ κ² μ λλ€.
Read Uncommitted
- λ€λ₯Έ νΈλμμ μμ 컀λ°λμ§ μμ λ΄μ©μ μ κ·Ό κ°λ₯ (Dirty Read)
- λ½ λ°μ X
Read Committed
- 컀λ°λ λ΄μ©λ§ μ κ·Ό κ°λ₯
- ν νΈλμμ λ΄μμ κ²μ κ²°κ³Όκ° λΉμΌκ΄μ μΈ νμ λ°μ (Nonrepeatable read)
- λ½ λ°μ X
Repeatable Read
- 컀λ°μ΄ μλ£λ λ°μ΄ν°λ§ μ½μ μ μμΌλ©°, νΈλμμ λ²μ λ΄μμ μ‘°νν λ΄μ©μ΄ νμ λμΌν¨μ 보μ₯
- μΌμ λ²μμ λ μ½λλ₯Ό λλ² μ΄μ μ½μ λ, 첫 λ²μ¬ 쿼리μμ μλ μ λ Ή λ μ½λκ° λλ²μ§Έ 쿼리μμ λνλλ νμμ Phantom read
- λ½ λ°μ O
Serializable
- ν νΈλμμ μμ μ¬μ©νλ λ°μ΄ν°λ λ€λ₯Έ νΈλμμ μ΄ μ κ·Ό λΆκ°λ₯
- λ½ λ°μ O
π£οΈ DBμ νΈλμμ μν μ€ μ€λ₯κ° λ°μνλ©΄ μ΄λ»κ² μ²λ¦¬ν κΉμ?
λ°μ΄ν°λ² μ΄μ€μμ νΈλμμ μν κ³Όμ μ€ μ€λ₯κ° λ°μνλ©΄ ROLLBACKμ ν΅ν΄ νΈλμμ μ μννκΈ° μ μνλ‘ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ볡ν΄μΌ ν©λλ€. μ΄λ κ² μ²λ¦¬νλ μ΄μ λ νΈλμμ μν κ²°κ³Όκ° λ°μ΄ν°λ² μ΄μ€μ μμ ν λ°μλκ±°λ μμ λ°μλμ§ μμμΌ νκΈ° λλ¬Έμ λλ€.
π£οΈ Commit, Rollback μ΄λ 무μμ λκΉ?
Commit : νΈλμμ μ΄ μ±κ³΅ν΄ νΈλμμ κ²°κ³Όλ₯Ό μꡬμ μΌλ‘ λ°μνλ μ°μ°μ λλ€.
Rollback : νΈλμμ μ μ€νμ μ·¨μνμμ μ리λ μ°μ°μ΄λ©°, νΈλμμ μ΄ μνν κ²°κ³Όλ₯Ό μλμ μν(νΈλμμ μ°μ° μ΄μ μ μν)λ‘ μμ 볡κ·μν€λ μ°μ°μ μλ―Έν©λλ€.
π£οΈ DBμμ λμμ± μ μ΄λ 무μμ λκΉ?
DBMSλ λ€μμ μ¬μ©μλ₯Ό κ°μ νκΈ° λλ¬Έμ λ€μ€ νΈλμμ μ μνΈ κ°μ μμ© μ€, DBλ₯Ό 보νΈν΄μΌ ν©λλ€. λμμ μ¬λ¬ κ°μ νΈλμμ μ΄ μνλ λ, νΈλμμ λ€μ΄ DBμ μΌκ΄μ±μ νκ΄΄νμ§ μλλ‘ νΈλμμ κ°μ μνΈμμ©μ μ μ΄νλ κ²μ μλ―Έν©λλ€.
λμμ± μ μ΄ κΈ°λ²μ μ’ λ₯λ λ€μκ³Ό κ°μ΅λλ€.
Reference
https://hoons-dev.tistory.com/93