DataBase & SQL, Schema design, DataBase μ€κ³, Node.jsμμ λ°μ΄ν°λ² μ΄μ€ μ¬μ©
βοΈ Today I Learned
1. DataBase & SQL
1-1. DataBase
λ°μ΄ν°λ² μ΄μ€λ IN-MEMORY, FILE I/O λ°©μμ νκ³μ κ΄λ¦¬νλ λ°μ΄ν°μ μμ΄ λ°©λν΄μ§μλ°λΌ ν¨μ¨μ μ΄κ³ λ°μ΄ν°μ 무결μ±μ μ§ν€κΈ° μν΄ κ³ μλ λ°μ΄ν°μ νΉνλ μλ²μ΄λ€.
μ΄ λ°μ΄ν°λ² μ΄μ€κ° νμ©λλ ꡬ쑰λ μ΄μ μ β2-TIER μν€ν μ³βμΈ ν΄λΌμ΄μΈνΈ/μλ²μ ꡬ쑰μμ λ λμκ°, μΉ&μ±μμ μ·¨κΈνλ λ°μ΄ν°λ₯Ό λ°λ‘ λΆλ¦¬ νλ β3-TIER μν€ν μ³βλΌ λΆλ¦¬μ°λ©° 보μμ±, λμ©λ μλΉμ€μμμ κ°μ μ μ§λμ μκ² λμλ€.
1-2. SQL
-
νλμ μΈμ΄μΈ Structured Query Language (SQL) μ λ°μ΄ν°λ² μ΄μ€ μΈμ΄λ‘, μ£Όλ‘ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μμ μ¬μ©νλ€.
μλ₯Ό λ€μ΄ MySQL, Oracle, SQLite, PostgreSQL λ± λ€μν λ°μ΄ν°λ² μ΄μ€μμ SQL ꡬ문μ μ¬μ©νμ¬ λ°μ΄ν°λ² μ΄μ€μ 쿼리(Query) λ₯Ό λ³΄λ΄ μνλ λ°μ΄ν°λ₯Ό κ°μ Έμ€κ±°λ μ½μ ν μ μλ€.
SQLμ μ¬μ©ν μ μλ λ°μ΄ν°λ² μ΄μ€μ λ¬λ¦¬, λ°μ΄ν°μ κ΅¬μ‘°κ° κ³ μ λμ΄ μμ§ μμ λ°μ΄ν°λ² μ΄μ€λ₯Ό NoSQLμ΄λΌκ³ νλ€.
κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μλ λ¬λ¦¬, ν μ΄λΈμ μ¬μ©νμ§ μκ³ λ°μ΄ν°λ₯Ό λ€λ₯Έ ννλ‘ μ μ₯μ νλ€. NoSQLμ λνμ μΈ μμλ MongoDB μ κ°μ λ¬Έμ μ§ν₯ λ°μ΄ν°λ² μ΄μ€κ° μλ€.
-
SQL λ¬Έλ²μ λ§ν¬λ₯Ό ν΅νμ¬ νμ΅νμλ€.
1-3. ACID
ACID(μμμ±, μΌκ΄μ±, κ³ λ¦½μ±, μ§μμ±) λ λ°μ΄ν°λ² μ΄μ€ νΈλμμ μ΄ μμ νκ² μνλλ€λ κ²μ 보μ₯νκΈ° μν μ±μ§μ κ°λ¦¬ν€λ μ½μ΄μ΄λ€.
μ¬κΈ°μ νΈλμμ μ΄λ? λ°μ΄ν°λ² μ΄μ€μ μνλ₯Ό λ³νμν€λ λ Όλ¦¬μ κΈ°λ₯μ μννκΈ° μν΄ νν΄μ§λ νλ μ΄μμ 쿼리λ₯Ό λͺ¨μ λμ μμ μ λ¨μ μ΄λ€.
-
μμμ±(Atomicity) μ νΈλμμ κ³Ό κ΄λ ¨λ μμ λ€μ΄ λΆλΆμ μΌλ‘ μ€νλλ€κ° μ€λ¨λμ§ μλ κ²μ 보μ₯νλ λ₯λ ₯μ΄λ€. μλ₯Ό λ€μ΄, μκΈ μ΄μ²΄λ μ±κ³΅ν μλ μ€ν¨ν μλ μμ§λ§ 보λ΄λ μͺ½μμ λμ λΉΌ μ€λ μμ λ§ μ±κ³΅νκ³ λ°λ μͺ½μ λμ λ£λ μμ μ μ€ν¨ν΄μλ μλλ€. μμμ±μ μ΄μ κ°μ΄ μ€κ° λ¨κ³κΉμ§ μ€νλκ³ μ€ν¨νλ μΌμ΄ μλλ‘ νλ κ²μ΄λ€.
-
μΌκ΄μ±(Consistency) μ νΈλμμ μ΄ μ€νμ μ±κ³΅μ μΌλ‘ μλ£νλ©΄ μΈμ λ μΌκ΄μ± μλ λ°μ΄ν°λ² μ΄μ€ μνλ‘ μ μ§νλ κ²μ μλ―Ένλ€. λ¬΄κ²°μ± μ μ½μ΄ λͺ¨λ κ³μ’λ μκ³ κ° μμ΄μΌ νλ€λ©΄ μ΄λ₯Ό μλ°νλ νΈλμμ μ μ€λ¨λλ€.
-
λ 립μ±(Isolation) μ νΈλμμ μ μν μ λ€λ₯Έ νΈλμμ μ μ°μ° μμ μ΄ λΌμ΄λ€μ§ λͺ»νλλ‘ λ³΄μ₯νλ κ²μ μλ―Ένλ€. μ΄κ²μ νΈλμμ λ°μ μλ μ΄λ€ μ°μ°λ μ€κ° λ¨κ³μ λ°μ΄ν°λ₯Ό λ³Ό μ μμμ μλ―Ένλ€. μν κ΄λ¦¬μλ μ΄μ²΄ μμ μ νλ λμ€μ 쿼리λ₯Ό μ€ννλλΌλ νΉμ κ³μ’κ° μ΄μ²΄νλ μ μͺ½μ λ³Ό μ μλ€. 곡μμ μΌλ‘ κ³ λ¦½μ±μ νΈλμμ μ€νλ΄μμ μ°μμ μ΄μ΄μΌ ν¨μ μλ―Ένλ€. μ±λ₯κ΄λ ¨ μ΄μ λ‘ μΈν΄ μ΄ νΉμ±μ κ°μ₯ μ μ°μ± μλ μ μ½ μ‘°κ±΄μ΄λ€. μμΈν λ΄μ©μ κ΄λ ¨ λ¬Έμλ₯Ό μ°Έμ‘°ν΄μΌ νλ€.
-
μ§μμ±(Durability) μ μ±κ³΅μ μΌλ‘ μνλ νΈλμμ μ μμν λ°μλμ΄μΌ ν¨μ μλ―Ένλ€. μμ€ν λ¬Έμ , DB μΌκ΄μ± μ²΄ν¬ λ±μ νλλΌλ μ μ§λμ΄μΌ ν¨μ μλ―Ένλ€. μ νμ μΌλ‘ λͺ¨λ νΈλμμ μ λ‘κ·Έλ‘ λ¨κ³ μμ€ν μ₯μ λ°μ μ μνλ‘ λλ릴 μ μλ€. νΈλμμ μ λ‘κ·Έμ λͺ¨λ κ²μ΄ μ μ₯λ νμλ§ commit μνλ‘ κ°μ£Όλ μ μλ€.
2. Schema design
2-1. μ€ν€λ§(Schema)
-
μ€ν€λ§λ λ°μ΄ν°λ² μ΄μ€μ ꡬ쑰μ μ μ½ μ‘°κ±΄μ κ΄ν μ λ°μ μΈ λͺ μΈλ₯Ό κΈ°μ ν λ©νλ°μ΄ν°μ μ§ν©μ΄λ€.
-
μ€ν€λ§λ λ°μ΄ν°λ² μ΄μ€λ₯Ό ꡬμ±νλ λ°μ΄ν° κ°μ²΄(Entity), μμ±(Attribute), κ΄κ³(Relationship) λ° λ°μ΄ν° μ‘°μ μ λ°μ΄ν° κ°λ€μ΄ κ°λ μ μ½ μ‘°κ±΄ λ±μ κ΄ν΄ μ λ°μ μΌλ‘ μ μνλ€.
-
μ€ν€λ§λ μ¬μ©μμ κ΄μ μ λ°λΌ μΈλΆ μ€ν€λ§, κ°λ μ€ν€λ§, λ΄λΆ μ€ν€λ§λ‘ λλ μ§λ€.
2-2. Schema design (μΈμ€νκ·Έλ¨ μμ )
-
κ²μλ¬Ό(Post) μμ± κΈ°λ₯ : μΈμ€νκ·Έλ¨μμλ μ¬λ¬ κ°μ μ¬μ§(A)μ μ¬λ¦΄ μ μλ€. μ¬μ§μ μ λ‘λν λ, μ¬μ§μ μ€λͺ νλ κ°λ¨ν κΈ(C)μ΄ μ¬λΌκ°λ€.
-
κ²μλ¬Όμ λκΈ λ¬κΈ° λ° μ’μμ κΈ°λ₯ : κ²μλ¬Όμ΄ μ λ‘λλλ©΄ λ€λ₯Έ μ¬μ©μλ μ΄ κ²μλ¬Όμ λκΈ(E)μ λ¬ μ μκ³ , μ’μμ(B) λ₯Ό λλ¬ κ΄μ¬μ νν μ μλ€.
-
ν΄μνκ·Έ κΈ°λ₯ : κ²μλ¬Όμ #κ°μ± #λ§μ§ λ±μ ν΄μνκ·Έ(D)λ₯Ό λ¨κΈΈ μ μμΌλ©°, μ΄ ν΄μνκ·Έλ₯Ό λλ₯΄λ©΄ μ΄ ν΄μνκ·Έκ° μ¬μ©λ λͺ¨λ κ²μλ¬Όμ ν λ° λͺ¨μ λ³Ό μ μλ€.
-
follow κΈ°λ₯ : μΈμ€νκ·Έλ¨μμ μΉκ΅¬ κ΄κ³λ νλ‘μ(follower)μ νλ‘μ(following)μΌλ‘ λλλ€. κΉμ½λ©μ΄ μ΅ν΄μ»€λ₯Ό following νλ©΄, μ΅ν΄μ»€μ νΌλκ° κΉμ½λ©μ ν νλ©΄μ λνλλ€. μ΅ν΄μ»€μ μ μ₯μμλ κΉμ½λ©μ΄ followerλ‘ μΆκ°λλ€.
-
ν΄λΉ λ΄μ©μ DB diagramμμ μ€ν€λ§ λμμΈμ ν΄λ³΄λ©΄ λ€μ κ·Έλ¦Όκ³Ό κ°λ€.
3. κ΄κ³ν λ°μ΄ν°λ² μ΄μ€
-
ꡬ쑰νλ λ°μ΄ν°λ νλμ ν μ΄λΈλ‘ ννν μ μλ€. μ¬μ μ μ μλ ν μ΄λΈμ relation μ΄λΌκ³ λ λΆλ₯΄κΈ° λλ¬Έμ, ν μ΄λΈμ μ¬μ©νλ λ°μ΄ν°λ² μ΄μ€λ₯Ό κ΄κ³ν λ°μ΄ν°λ² μ΄μ€(Relational database)λΌκ³ νλ€.
-
κ΄κ³μ μ’ λ₯λ λ€μκ³Ό κ°λ€.
-
1:1 κ΄κ³ : νλμ λ μ½λκ° λ€λ₯Έ ν μ΄λΈμ λ μ½λ ν κ°μ μ°κ²°λ κ²½μ°, κ·Έλ¬λ 1:1 κ΄κ³λ μμ£Ό μ¬μ©νμ§ μλλ€. 1:1λ‘ λνλΌ μ μλ κ΄κ³λΌλ©΄ κ΄κ³λ₯Ό λ§ΊκΈ°λ³΄λ€ μ§μ μ μ₯νλ κ² λμ μ μλ€.
-
1:N κ΄κ³ : νλμ λ μ½λκ° μλ‘ λ€λ₯Έ μ¬λ¬ κ°μ λ μ½λμ μ°κ²°λ κ²½μ°μ΄λ€. 1:N(μΌλλ€) κ΄κ³λ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μμ κ°μ₯ λ§μ΄ μ¬μ©νλ€.
-
N:N κ΄κ³ : μ¬λ¬ κ°μ λ μ½λκ° λ€λ₯Έ ν μ΄λΈμ μ¬λ¬ κ°μ λ μ½λμ κ΄κ³κ° μλ κ²½μ°μ΄λ€. N:N(λ€λλ€) κ΄κ³λ₯Ό μν΄ μ€ν€λ§λ₯Ό λμμΈν λμλ, Join ν μ΄λΈμ λ§λ€μ΄ κ΄λ¦¬ν΄μΌνλ€. 1:N(μΌλλ€) κ΄κ³μ λΉμ·νμ§λ§, μλ°©ν₯μμ λ€μμ λ μ½λλ₯Ό κ°μ§ μ μλ€.
-
Self Referencing κ΄κ³ : λλ‘λ ν μ΄λΈ λ΄μμλ κ΄κ³κ° νμνλ€. μλ₯Ό λ€μ΄ μΆμ²μΈμ΄ λꡬμΈμ§ νμ νκΈ° μν΄ μ¬μ©ν μ μλ€. μ΄ κ΄κ³λ 1:N(μΌλλ€) κ΄κ³μ μ μ¬νλ€κ³ μκ°ν μ μλ€. κ·Έλ¬λ μΌλ°μ μΌλ‘ 1:N κ΄κ³λ μλ‘ λ€λ₯Έ ν μ΄λΈμ κ΄κ³λ₯Ό λνλΌ λ νννλ λ°©λ²μ΄λ€.
-
4. Node.jsμμ λ°μ΄ν°λ² μ΄μ€ μ¬μ©
-
.env
νκ²½λ³μ νμΌμ ν΅νμ¬dotenv
ν¨ν€μ§λ‘ νκ²½λ³μλ₯Ό λ³μμ²λΌ κ°μ Έμ μ¬μ© ν μ μμμ μ΄λ―Έ μ°λ¦¬λ νμ΅νμλ€.μ΄λ₯Ό ν΅νμ¬Node.js νκ²½μμ λ°μ΄ν°λ² μ΄μ€μ μ°κ²°νλ λΆλΆμ μ΄λ―Έ μμ±λ μμ λ₯Ό ν΅νμ¬ SQL μ€μ΅μ μ§ννμλ€.
μμΈν λ΄μ©μ λ§ν¬ μ°Έμ‘°.
π€ Understanding
SQL μλ‘μ΄ μΈμ΄λ₯Ό λ°°μ λ€. μ°μ 첫 λλμ λμ§ μΆμλλ° μ λ§ μμ κ³Ό μ μ¬νλ€β¦? λλμ΄λ€. μ¬λ¬ μ 보λ€μ μνΈ(λ°μ΄ν°λ² μ΄μ€)μ λ΄κ³ νμν νκ³Ό μ΄μ μ μ₯λ λ°μ΄ν° μ 보λ₯Ό νν°λ‘ μνλκ°μ μΆλ ₯νλ λλμ λ°μλ€.
μ€μ λ‘λ SQL Serverμ λ΄κΈ΄ μ 보λ₯Ό Excel νμΌλ‘ λ΄λ³΄λΌ μ μλ κΈ°λ₯λ μλ€λ κ±Έ κ²μμΌλ‘ μκ²λμλ€. (μμ¨λ΄€μ§λ§ λͺΉμ μ μ©ν΄ 보μΈλ€..)
μΌλ¨ λ¬Έλ²λ μ¬λμ΄ μ½κΈ° μ’μ ννμ λ¬Έλ²μ΄κΈ°λλ¬Έμ λ³΄κ³ μ°κΈ°μ μ΄λ ΅μ§ μμ§λ§, νμ΅ν λ΄μ©μ΄ μ‘°κΈ λ°©λν΄λ³΄μΈλ€.. μ€λ¬΄μμλ λ°μ΄ν°λ² μ΄μ€λ§ λ°λ‘ κ΄λ¦¬νλ DB κ΄λ¦¬μκ° μλ€λ μκΈ°λ μΌν λ€μλ€.
μμ§ λ¨μνκ² SQLμ μ¨μ μνλ κ°μ μΆλ €λ΄λ μ λλΏμ΄λ€. μμΌλ‘ μ€μ μμ λ₯Ό ν΅ν΄μ λ°μ΄ν°λ² μ΄μ€λ₯Ό νμ©νλ κ²½νμ΄ νμνλ€.