Databaseμ λν κ°κ΄μ μΈ λ΄μ©μΌλ‘ DB, DBMS, RDBMS, ACID λ±μ λν λ΄μ©μ ν¬ν¨ν©λλ€. π
λ°μ΄ν°(Data)λ 무μμΈκ°. CSμμ λ°μ΄ν°λ μ»΄ν¨ν°κ° μ²λ¦¬ν μ μλ λ¬Έμ, μ리, κ·Έλ¦Ό λ±μ ννλ‘ λ μλ£λ₯Ό μλ―Ένλ€. μ»΄ν¨ν° μ κΈ°λ‘μ΄λΌλ μλ―Έλ€. κ·Έλ¬ν λ°μ΄ν°κ° μΌλ°μ μΌλ‘ μ 리λ λ°μ΄ν°μ μ§ν©μ λ°μ΄ν°λ² μ΄μ€(Database)λΌκ³ μ μνλ€.
κ·Έλ λ€λ©΄ λ°μ΄ν°λ² μ΄μ€κ° μΉμμ μ΄λ ν κ³Όμ μΌλ‘ μμ²λκ³ μ λ¬λλμ§ μμ보μ.
ν¬κ² ν΄λΌμ΄μΈνΈμ μλ², λ°μ΄ν°λ² μ΄μ€λ‘ ꡬλΆμ§μμ λ, ν΄λΌμ΄μΈνΈμμ μλ²μ νμν λ°μ΄ν°λ₯Ό μμ²νλ€. κ·Έλ λ€λ©΄ μλ²λ μμ²ν μ 보λ₯Ό κ°κ³΅νκ³ μ λ¬ν΄μΌνκΈ° λλ¬Έμ, λ°μ΄ν°λ² μ΄μ€λ‘ λΆν° μ 보λ₯Ό μμ²νκ³ κ·Έμ λ°λ₯Έ μλ΅μ λ°λ κ³Όμ μ΄ μ§νλλ€. μ΄ κ³Όμ μμ DBMS(Database Management System)κ° κ°μ
νμ¬ κ·Έ μν μ μννλ€.
DBMSλ λ§ κ·Έλλ‘ λ°μ΄ν°λ² μ΄μ€λ₯Ό κ΄λ¦¬νλ μμ€ν
μΌλ‘ μλ²μμ λ°μ΄ν°λ² μ΄μ€μ μμ²ν λ μ΄λ₯Ό μ μ΄νκ³ κ΄λ¦¬νλ μν μ μννλ μμ€ν
μ΄λ€. ν λ§λλ‘, μ μ₯λ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ μ€μ§μ μ£Όμ²΄μΈ κ²μ΄λ€.
κ·Έλ λ€λ©΄ κΈ°λ‘μ μ μ₯νκΈ° μν΄ DB/DBSMμ μ¬μ©νλ μ΄μ λ 무μμΌκΉ? π§
DBμ κ²½μ° λ°μ΄ν° 보쑴과 체κ³μ κ΄λ¦¬μ μΈ‘λ©΄μ΄ μλ€.
μ°μ λ°μ΄ν° 보쑴μ κ²½μ° μ₯κΈ°κ° λ³΄κ΄ν΄μΌνλ λͺ©μ μ λ°μ΄ν°μ κ²½μ° νλ°μ± λ°μ΄ν° μ μ₯ λ°©μμ λΉν¨μ¨μ μΈ κ²°κ³Όλ₯Ό λΆλ¬μ¨λ€. κ·Έλ κΈ°μ μ₯κΈ°κ° λ°μ΄ν° 보κ΄μ νλ €λ©΄ μ΄λ¬ν λ°μ΄ν°λ² μ΄μ€ ννλ‘ λ³΄κ΄ν¨μ΄ μ©μ΄νλ€λ μ₯μ μ΄ μλ€.
체κ³μ κ΄λ¦¬μ κ²½μ° λ
Όλ¦¬μ μΌλ‘ μ°κ΄μ± μλ λ°μ΄ν°λ₯Ό λΆμ°λ μνκ° μλ μ λ¦¬κ° λ μνλ‘ μ μ΄νκ³ κ΄λ¦¬νκΈ° λλ¬Έμ, λ°μ΄ν° μμ²μ μν΄ μ΄λ₯Ό κ°μ Έμ¬ λλ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μλ€λ μ₯μ μ΄ μλ€.
DBMSλ μμ°μ±, κΈ°λ₯μ±, μ λ’°μ± λ±μ μ¬μ©μ κ·Όκ±°λ‘ λ§ν μ μλ€.
μμ°μ± λΆλΆμμ μ€λͺ
νμλ©΄ λ°μ΄ν° μμ²μ λͺ©μ μ ν¬κ² λ€ κ°μ§λ‘ ꡬλΆλλλ° μ΄κ²μ CRUD(Create, Read, Update, Delete)λΌκ³ νλ€. μ΄λ¬ν λ°μ΄ν°μ κ΄λ¦¬ λ° μ°μ° κΈ°λ₯μ DBMSκ° μ 곡νκΈ° λλ¬Έμ μ μ©νλ€κ³ ν μ μλ€.
κΈ°λ₯μ± μΈ‘λ©΄μμλ λ¨μν νλμ λ°μ΄ν°λ² μ΄μ€ λ§μ μΌλ°©ν₯μΌλ‘ νμ©νλ κ²λ§μ΄ μλλΌ λ€μν λ°©μμΌλ‘ μνν κ΄λ¦¬λ₯Ό μ§νν μ μλ€(볡μμ μ μ μμ² λμ κ°λ₯ λ±)λ μ μ΄ κ·Έ μ΄μ κ° λλ€.
λ§μ§λ§μΌλ‘, μ λ’°μ± λΆλΆμμ ν κ³³μ μ§μ€λλ λ°μ΄ν°λ₯Ό λΆλ¦¬νμ¬ κ΄λ¦¬ν μ μμ΄, λΆνκ° λΆμ°λκ³ λ°μ΄ν°λ₯Ό μ£ΌκΈ°μ μΌλ‘ λ°±μ
νμ¬ κ²°κ³Όμ μΌλ‘ μμ ν λ°μ΄ν° κ΄λ¦¬κ° κ°λ₯νλ€λ μ μ΄ μλ€.
νλ‘ νΈμλκ° κ΅³μ΄ λ°μ΄ν°λ² μ΄μ€μ λν΄ μμμΌ νλκ³ μκ°μ΄ λ€ μ μμ§λ§, κ·Έλ κ² μκ°νλ©΄ ν° μ€μ°μ΄λ€. μ΄μ¨λ νλ‘ νΈμλ λ¨μμ νλ μ
무λ κ²°κ³Όμ μΌλ‘ λ°±μλμμ λμ΄μ¨ λ°μ΄ν°λ₯Ό νμ©νμ¬ μμ±ν μ μλ λΆλΆμ΄κ³ κ·Έλ¬κΈ° μν΄μ λμ΄μ€λ λ°μ΄ν°κ° μ΄λ€ νμμΈμ§, μ΄λ ν λ°©μμΌλ‘ λμ΄μ€λμ§ λ±μ λν λ΄μ©μ μ΄ν΄λ₯Ό λκΈ° μν΄ μΆ©λΆν νμν λ΄μ©μ΄λ€.
λν κ°λ°μ νΌμλ νμͺ½μ μμμμλ§ μ§ννλ κ²μ΄ μλλΌ, μλ‘ λ€λ₯Έ λΆλΆλ€μ΄ ν λ‘ κ³Ό ν©μμ μν΄ μ΄λ£¨μ΄μ§λ κ²μ΄κΈ° λλ¬Έμ, μ΄μ λν λΆλΆμ 무μνκ³ "μ λλ κ·Έκ±° λ¬λΌκ³ νλλ°, μ λ§μ λͺ» μμλ¨Ήμ§?" λΌλ λ§μΈλλ₯Ό μ μ΄λκΈ° μν΄μ μλ£ κ΅¬μ‘°λ λ°μ΄ν°λ² μ΄μ€μ λν μ΄ν΄λ νμ λΆκ°κ²°ν λΆλΆμΌ κ²μ΄λ€.
κ·Έλ¬λ μμΌλ‘ μ§νλ νλ‘μ νΈμ κ³Όμ μμ μλ‘μ μμλͺ» λ°μ§λ€κ° λΌλ§ λ¨μ μΉ νμ΄μ§λ₯Ό λ¨κΈ°κΈ° μ«λ€λ©΄ λ°μ΄ν°λ² μ΄μ€μ λν΄ κ°λ¨νλΌλ λ¨Έλ¦Ώ μμ μκΈ°κ³ κ°μ.
(κ·Έλ¦¬κ³ μ΄κ±° λ°°μ°λ©΄ λλ¦ μ¬λ°κΈ°λ νλ°...π
)
Relational DataBase Management System
) ποΈDBMSλ λ°°μμ μκ² λλ°, RDBMSλ 무μμΌκΉ? RDBMSλ₯Ό ν΄μνλ©΄ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ€ν
μ΄λΌλ μλ―Έλ₯Ό κ°λλ€. κ·Έλ λ€λ©΄ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μ λν΄ μ°μ μ μΌλ‘ μμ보μ.
κ΄κ³ν λ°μ΄ν°λ² μ΄μ€(RDB)λ κ΄κ³ν λ°μ΄ν° λͺ¨λΈμ κΈ°μ΄λ₯Ό λ λ°μ΄ν°λ² μ΄μ€μ΄λ€. μ΄ λ§μ΄ λ¬΄μ¨ λ§μ΄λλ©΄, λ°μ΄ν°λ₯Ό κ΄λ¦¬νλ λ°©μμ μμ΄ λ°μ΄ν° κ°μ κ΄κ³λ₯Ό μ€μ¬μΌλ‘ μ΄λ₯Ό μ§ννλ€λ λ»μ΄λ€. λ€μ κ·Έλ¦Όλ₯Ό 보면 μ΄λ₯Ό λ μ½κ² μ΄ν΄ν μ μλ€.
μ κ·Έλ¦Όμ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€κ° μ΄λ ν ꡬ쑰λ₯Ό κ°κ³ μλμ§ λ³΄μ¬μ€λ€. κ°μ λΆλ₯λ‘ λ¬Άμ΄ μ¬λ¬κ°μ§ λ°μ΄ν°λ² μ΄μ€κ° μλ‘ κ°μ κ΄κ³μ λ°λΌ μ°κ²°λμ΄ μλ€.
RDBMSμμ λ°μ΄ν°λ² μ΄μ€λ ν(Row)κ³Ό μ΄(Column)λ‘ κ΅¬μ±λμ΄ μλ μμ
μ νμκ³Ό μ μ¬ν ννλ₯Ό κ°μ§λ€. μ΄λ¬ν ν νμμ 2μ°¨μ λ°μ΄ν°κ° ν
μ΄λΈ(Table)μ ν΄λΉνκ³ μ΄λ¬ν ν
μ΄λΈλ€μ΄ μμ κ°μ΄ κ΄κ³λ₯Ό μ΄λ£¨κ³ μλ κ²μ΄ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μΈ κ²μ΄λ€. κ·Έλ¦¬κ³ μ΄λ¬ν κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ₯Ό κ΄λ¦¬νλ κ²μ΄ RDBMSλ€. λνμ μΈ RDBMSλ‘ Oracle, MySQL, PostgreSQL λ±μ΄ μ΄μ ν΄λΉνλ€.
Not Only SQL
)μμ μ΄ μ₯κΈ°κ° λμ μ¬λ¬΄μ€μ μ§λ°°νμ§λ§, λμ΄μ RDBMSλ‘λ μ²λ¦¬ν μ μμ λ§νΌ 볡μ‘νκ³ λ°©λν λ°μ΄ν°λ€μ΄ μ겨λκΈ° μμνλ€.
κ·Έλ¬ν μ°μ λ‘ NoSQLμ λν μ€μμ±μ΄ κ°μ‘°λμλ€. NoSQLμ΄λ "Not Only SQL"μ μ½μλ‘ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μλ λ€λ₯΄κ² λ°μ΄ν°λ ν μ΄λΈ κ°μ κ΄κ³λ₯Ό μ μνμ§ μλλ€. κ·Έλ κΈ° λλ¬Έμ, μμ λ‘κ² λ°μ΄ν°λ₯Ό μ μ₯ν μ μλ€λ μ₯μ μ΄ μλ€.
그리κ³key
,Value
κ°μΌλ‘λ§ λνλ΄λ©° κ΅³μ΄ μ€ν€λ§ κ·κ²©μ λ§μΆ°μ λ°μ΄ν°λ₯Ό λ€λ£¨μ§ μμλ λλ€λ μ₯μ λλ¬Έμ λμ©λ λ°μ΄ν°μ κ΄λ¦¬μ μ 리νλ€.
νμ§λ§ RDBMSκ° μ’ λ μ νν λ λ°μ΄ν°λΌλ μ μμ μμ§κΉμ§ νμ€ν μ₯μ μ΄ μκΈ°μ, κ°κ°μ νμ λΆμΌμμ μ μ ν μ¬μ© λ¨μ μΈμ§νμ.
Primary key
2μ°¨μ λ°°μ΄μ νκ³Ό μ΄μ κ°μ§λλ° μ£Όλ‘ κ° νμ 첫 λ²μ§Έ μμλ ν΄λΉ μ΄μ μΈλ±μ€κ° λ°°μ λμ΄ μλ κ²μ νμΈν μ μλ€. μ΄λ₯Ό Primary key λΌκ³ νλ©° κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν°μ μλ³μλ‘ μ΄μ©νλ μ©λλ‘ μ£Όλ‘ μ°μΈλ€.
μμμ λ§νλ―μ΄ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ κ° ν
μ΄λΈμ΄ μνΈ μ°κ΄μ±μ κ°μ§λ©°, μ΄λ μμ ν λ
λ¦½μ΄ μ‘΄μ¬νμ§ λͺ»νλ€λ κ²μ΄λ€. κ·Έλ¦¬κ³ κ·Έλ¬ν κ΄κ³λ ν
μ΄λΈ κ°μ κ΄κ³κ° μ΄λ»κ² λμ΄ μλκ°μ λ°λΌμλ ꡬλΆμ΄ λλλ°, μ΄λ ν¬κ² 1:1(One to One), 1:M(One to Many), M:M(Many to Many)λ‘ κ΅¬λΆλλ€.
μ°μ 1:1μ κ°κ°μ ν
μ΄λΈμ μλ λ°μ΄ν°κ° νλλΉ νλμ λ°μ΄ν°λ§ μ°κ²°λμ΄ μλ κ²μ΄λ€. μ΄μ λν μμλ‘ μ¬λκ³Ό μ£Όλ―Όλ±λ‘λ²νΈλΌλ κ°κ°μ ν
μ΄λΈμ΄ μ‘΄μ¬ν λκ° μλ€.
κ°κ°μ μ¬λμ μ΄λ¦μ΄ μ νμλ ν
μ΄λΈκ³Ό κ·Έ μ¬λλ€μ μ£Όλ―Όλ±λ‘λ²νΈκ° μ μ₯λμ΄ μλ ν
μ΄λΈμ΄ μ‘΄μ¬ν λ, κ°κ°μ μ¬λλ€μ νλμ μ£Όλ―Όλ±λ‘λ²νΈ λ§μ κ°μ§ν
κ³ , λ°λλ‘λ κ°κ°μ μ£Όλ―Όλ±λ‘λ²νΈλ ν μ¬λμ μ£Όλ―Όλ±λ‘λ²νΈ λ°μ λ μ μλ€. μ΄λ κ² κ°κ°μ λ°μ΄ν°μ κ΄κ³κ° 1:1λ‘ μ΄λ£¨μ΄μ§ κ΄κ³λ₯Ό 1:1 κ΄κ³λΌκ³ νλ€.
λ€μμΌλ‘ 1:Mμ νλμ λ°μ΄ν°κ° λ€λ₯Έ ν
μ΄λΈμ μ¬λ¬ λ°μ΄ν°μ κ΄λ ¨λμ΄ μλ ννμ κ΄κ³μ΄λ€. μ΄μ λν μμλ‘ μ¬λκ³Ό κ·Έ μ¬λλ€μ κ°μ‘±μ μ΄λ¦λ€μ΄ ν¬ν¨λ ν
μ΄λΈμ κ΄κ³λ₯Ό μμλ‘ λ€ μ μλ€.
μμλ νλμ ν
μ΄λΈμλ μ¬λλ€μ μ΄λ¦μ΄ μ μ₯λμ΄ μκ³ , λ€λ₯Έ ν
μ΄λΈμλ κ·Έ μ¬λμ κ°μ‘±μ μ΄λ¦λ€μ΄ ν¬ν¨λ λͺ
λ¨μ΄ μλ€. ν μ¬λμ μ¬λ¬ λͺ
μ κ°μ‘±μ μ΄λ¦κ³Ό λμμ΄ λ μ μμ§λ§, ν΄λΉ κ°μ‘±λ€μ ν μ¬λκ³Ό μ°κ΄λμ΄ μλ ννμ κ΄κ³λ₯Ό νμΈν μ μλ€. μ΄λ¬ν κ΄κ³λ₯Ό 1:M κ΄κ³λΌκ³ μ μν μ μλ€.
λ§μ§λ§μΌλ‘ M:M κ΄κ³λ λ€μμ λ°μ΄ν°μ λ€μμ λ°μ΄ν°κ° 볡μ λ 볡μλ‘ μ°κ²°λ μ μλ κ΄κ³λ₯Ό λ§νλ€. M:M κ΄κ³λ ν μ¬λκ³Ό κ·Έ μ¬λμ΄ μ
μ μ·λ€μ μ μ₯ν ν
μ΄λΈ κ°μ κ΄κ³λ‘ μ€λͺ
ν μ μλ€.
μ΄ κ²½μ° ν μ¬λλΉ λ¨Έλ¦¬λΆν° λ°λκΉμ§ λ€μν μ·μ μ
μμν
κ³ , κ·Έ μ·λ€μ κ°κ°μ λΈλλκ° μμ κ²μ΄λ€. νμ§λ§, λ€λ₯Έ μ¬λμ΄λΌλ κ°μ μ·μ μ
μμ κ²½μ°κ° μ‘΄μ¬νκ³ μ΄λ κ² λλ©΄ ν μ¬λμ΄ μ¬λ¬κ°μ§ μ·μ μ
κ³ μμ§λ§, νλμ μ·μ΄λΌλ μ¬λ¬ μ¬λλ€μ΄ 곡ν΅μ μΌλ‘ μ
κ³ μμ μ μλ κ²μ΄λ€. μ΄λ¬ν κ΄κ³λ₯Ό M:M κ΄κ³λΌκ³ μ μνλ€.
Transaction
) π§°
νΈλμμ
(Transaction)μ΄λ κ΄Έκ³ν λ°μ΄ν°λ² μ΄μ€κ° μ 곡νλ κΈ°λ₯ μ€ νλλ‘, λ°μ΄ν°λ² μ΄μ€ μνλ₯Ό λ³νμν€λ νλμ λ
Όλ¦¬μ κΈ°λ₯μ μννκΈ° μν μμ
μ λ¨μ λλ νκΊΌλ²μ λͺ¨λ μνλμ΄μΌ νλ μΌλ ¨μ μ°μ°λ€μ μλ―Ένλ€.
νΈλμμ
μ ACIDλ₯Ό 보μ₯νλ©΄μ μμμ μΈκΈν μΌλ ¨μ μμ
μ΄ νλμ μμ
μ²λΌ μ·¨κΈλλ κ²μ΄λΌ, λͺ¨λ μ±κ³΅(Commit) μλλ©΄ λͺ¨λ μ€ν¨(Rollback)λ§μ΄ μλ κ²μ μλ―Ένλ€.
κ·Έλ λ€λ©΄ μ΄ ACIDμ λν΄ κ°λ¨ν μμ보μ.
Atomicity
)
μμμ±μ΄λ νΈλμμ
μ μ°μ°μ λ°μ΄ν°λ² μ΄μ€μ μ λΆ λ°μλλ μ§, μλλ©΄ μ ν λ°μμ΄ λμ§ μλ μ§ ν΄μΌ νλ€λ κ²μ΄λ€.
νΈλμμ
λ΄ λͺ¨λ λͺ
λ Ήμ λ°λμ μνλμ΄μΌ νλ©° νλμ λͺ
λ Ήμ΄λΌλ μ€λ₯κ° λ°μνλ€λ©΄ νΈλμμ
μ λΆκ° μ·¨μ λκ³ μλλλ‘ λλμκ°λ€.
Consistency
)
μΌκ΄μ±μ΄λ νΈλμμ
μ μ€νμ΄ μλ£λμμ λ, λ°μ΄ν°λ² μ΄μ€μ μνκ° μΌκ΄μ±μ΄ μμ΄μΌ ν¨μ μλ―Ένλ€. μμ€ν
μ κ³ μ μμλ νΈλμμ
μ νμ κ΄κ³ μμ΄ μνκ° κ°μμΌ νλ€.
Isolation
)
λ
립μ±μ νλμ λ μ΄μμ νΈλμμ
μ΄ μ€νλλ λμμλ λ€λ₯Έ νΈλμμ
μ΄ κ°μ
νμ§ λͺ»ν¨μ μλ―Ένλ€. λν μν μ€μΈ νΈλμμ
μ΄ μλ£λκΈ° μ κΉμ§λ λ€λ₯Έ νΈλμμ
μ΄ ν΄λΉ νΈλμμ
μ μν κ²°κ³Όλ₯Ό μ°Έμ‘°ν μ μλ€.
Durability
)
λ§μ§λ§μΌλ‘, μ§μμ±μ μ±κ³΅μ μΌλ‘ μλ£ν νΈλμμ
μ΄ λ§λ κ²°κ³Όλ μμ€ν
κ³ μ₯μ΄λΌλ μ μ₯μ΄ λλ©΄ μ§μμ μΌλ‘ μ μ§νλ€λ κ²μ΄λ€.
Commit/Rollback
)μμμ μΈκΈν νΈλμμ μ μ°μ°μ λν΄ μμ보μ.
μ°μ Commit μ°μ°μ ν κ°μ§μ νΈλμμ μ΄ μ±κ³΅μ μΌλ‘ λ§λ¬΄λ¦¬λ₯Ό νκ³ μΌκ΄λ μνλ₯Ό μ μ§ν λ, μ°μ°μ΄ μλ£λμμ κ΄λ¦¬μμκ² μλ €μ£Όλ κ²μ΄λ€.
κ·Έλ¦¬κ³ Rollback μ°μ°μ νλμ νΈλμμ μ²λ¦¬κ° λΉμ μμ μΈ μ’ λ£κ° λμ΄ μΌκ΄μ±μ΄ κΉ¨μ‘μ λ, μΌλΆ μ μ μ²λ¦¬λ κ²μ΄ μλλΌλ μΌκ΄μ±μ μν΄, ν΄λΉ νΈλμμ μ΄ νν λͺ¨λ μ°μ°μ μ·¨μνλ κ²μ΄λ©°, Rollbackμ κ²½μ° ν΄λΉ νΈλμμ μ μ¬μμ νΉμ νκΈ°νλ€.
μ λ΄μ©λ€μ μμ½νλ©΄ λ€μκ³Ό κ°μ΄ μ 리ν μ μλ€.
commit
) νΉμ μ€ν¨(Rollback
)λ‘λ§ μ΄λ£¨μ΄μ§λ€.
κ·ΈλΌ λ€μ ν ν½μΈ HTTPμμ λ€μ λμμ€κ² λ€.