β’
νΈλμμ
λ‘€λ°±μ΄ μ μ©λμ΄ UserServiceTest ν΄λμ€μ testTransactionRollback() ν
μ€νΈ μΌμ΄μ€κ° ν΅κ³Όνλ€.
β’
νΈλμμ
μλΉμ€μ μ ν리μΌμ΄μ
μλΉμ€κ° λΆλ¦¬λμλ€.
β’
νν°μ
λμ ν λ λλλ λ°©λ²μ μ¬λ¬κ°μ§μ΄λ€.
β¦
μ§μ/κΈ°μ/ν΄μ±
β’
λμ μ±λ₯μ°¨μ΄
β¦
select * from fruit where fruit_name=βap%β;
β¦
select fruit_name from fruit where fruit_name=βap%β;
νν°μ λ (Partitioning)
β¦
μ μ:
νλμ λ°μ΄ν°λ² μ΄μ€ λ΄μμ ν° ν
μ΄λΈμ΄λ λ°μ΄ν°λ₯Ό μ¬λ¬ μμ λ¨μ(νν°μ
)λ‘ λΆν νλ λ°©λ²μ
λλ€.
β¦
νΉμ§:
βͺ
λ
Όλ¦¬μ /물리μ λΆν :
κ°μ μλ²λ λ°μ΄ν°λ² μ΄μ€ μΈμ€ν΄μ€ λ΄μμ λ°μ΄ν°λ₯Ό λΆν νμ¬ κ΄λ¦¬ν μ μμ΅λλ€.
βͺ
κ΄λ¦¬ ν¨μ¨μ±:
λ°μ΄ν° λ°±μ
, μΈλ±μ€ μμ±, 쿼리 μ΅μ ν λ± κ΄λ¦¬ μΈ‘λ©΄μμ μ 리ν©λλ€.
βͺ
μμ:
λ μ§, λ²μ, ν΄μκ° λ±μ λ°λΌ ν
μ΄λΈμ μ¬λ¬ νν°μ
μΌλ‘ λλλ κ²½μ°.
μ€λ© (Sharding)
β¦
μ μ:
λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬λ¬ μλ²(νΉμ λ
Έλ)μ λΆμ°νμ¬ μ μ₯νλ λ°©μμ
λλ€. μ¦, νν°μ
λμ ν ννλ‘ λ³Ό μ μμ§λ§, λΆμ° μμ€ν
μμ μ£Όλ‘ μ¬μ©λ©λλ€.
β¦
νΉμ§:
βͺ
λΆμ° μ μ₯:
λ°μ΄ν°κ° μ¬λ¬ 물리μ μλ²μ κ±Έμ³ μ μ₯λλ―λ‘, λ¨μΌ μλ²μ μ±λ₯ νκ³λ₯Ό 극볡νκ³ μνμ νμ₯μ΄ κ°λ₯ν©λλ€.
βͺ
λ
립μ μΈ κ΄λ¦¬:
κ° μ€λλ λ
립μ μΈ λ°μ΄ν°λ² μ΄μ€ μΈμ€ν΄μ€λ‘ μ΄μλμ΄ μ₯μ 격리, λΆν λΆμ° λ± λΆμ° μ²λ¦¬μ μ΄μ μ μ 곡ν©λλ€.
βͺ
μμ:
λκ·λͺ¨ μ¬μ©μ κΈ°λ°μ μΉ μ ν리μΌμ΄μ
μμ, μ¬μ©μμ IDλ μ§μ λ±μ κΈ°μ€μΌλ‘ λ°μ΄ν°λ₯Ό μ¬λ¬ μλ²μ λΆμ° μ μ₯νλ κ²½μ°.
μμ½
β¦
νν°μ
λ:
λ¨μΌ λ°μ΄ν°λ² μ΄μ€ λ΄μμ λ°μ΄ν°λ₯Ό μ¬λ¬ νν°μ
μΌλ‘ λλμ΄ κ΄λ¦¬νλ κΈ°λ². μ£Όλ‘ κ΄λ¦¬ ν¨μ¨μ±μ΄λ μ±λ₯ μ΅μ νλ₯Ό μν΄ μ¬μ©λ¨.
β¦
μ€λ©:
μ¬λ¬ μλ²μ λ°μ΄ν°λ₯Ό λΆμ° μ μ₯νμ¬, μμ€ν
μ μνμ νμ₯κ³Ό λΆν λΆμ°μ λ¬μ±νκΈ° μν κΈ°λ².
μ΄μ²λΌ νν°μ
λμ κ°μ μμ€ν
λ΄μ λ°μ΄ν° λΆν μ μλ―Ένλ©°, μ€λ©μ λΆμ° μμ€ν
νκ²½μμ λ°μ΄ν°λ₯Ό μ¬λ¬ μλ²μ λλμ΄ μ μ₯νλ ννλ‘ λ³Ό μ μμ΅λλ€.
λ Έλ λΆμ°
"λ
Έλλ₯Ό λΆμ°νλ€"λ λ§μ λ°μ΄ν°λ μμ
μ νλμ μ€μ μλ²μ μ§μ€μν€μ§ μκ³ , μ¬λ¬ κ°μ λ
립μ μΈ μλ²(λ
Έλ)λ‘ λλμ΄ μ μ₯νκ±°λ μ²λ¦¬νλ κ²μ μλ―Έν©λλ€. ꡬ체μ μΌλ‘:
β’
μ¬λ¬ μλ²μ λ°μ΄ν° λΆμ°:
μλ₯Ό λ€μ΄, λμ©λ λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν°λ₯Ό νλμ μλ²μ λͺ¨λ μ μ₯νλ λμ , λ°μ΄ν°λ₯Ό μ¬λ¬ μλ²(λ
Έλ)μ λΆμ°νμ¬ μ μ₯ν¨μΌλ‘μ¨ ν μλ²μ λΆνκ° μ§μ€λμ§ μκ² ν©λλ€.
β’
μνμ νμ₯:
λ
Έλλ₯Ό λΆμ°ν¨μΌλ‘μ¨ νμμ λ°λΌ μλ²λ₯Ό μΆκ°(μ€μΌμΌ μμ)νμ¬ μ 체 μμ€ν
μ μ±λ₯μ λμΌ μ μμ΅λλ€. ν μλ²μ λ¬Έμ κ° μ겨λ λ€λ₯Έ μλ²κ° κ³μ μλνλ―λ‘ μ₯μ μ κ°ν μμ€ν
μ ꡬμΆν μ μμ΅λλ€.
β’
λΆν λΆμ°:
μ¬μ©μ μμ²μ΄λ μμ
μ μ¬λ¬ λ
Έλμ λΆμ°μμΌ μ²λ¦¬νλ©΄, κ° λ
Έλμ 걸리λ λΆνκ° μ€μ΄λ€μ΄ μλ΅ μλμ μμ μ±μ΄ κ°μ λ©λλ€.
μ¦, "λ
Έλλ₯Ό λΆμ°νλ€"λ κ²μ μμ€ν
μ μ¬λ¬ μλ²μ λλμ΄ λΆμ°μμΌ, μ±λ₯ ν₯μ, νμ₯μ±, κ·Έλ¦¬κ³ μ₯μ λμλ ₯μ λμ΄λ λΆμ° μμ€ν
μ κΈ°λ³Έ κ°λ
μ μλ―Έν©λλ€.
μ§λ¬Έ λͺ©λ‘
β’
κ·Έλ¬λ©΄ μ ν
μ΄λΈμ λν λͺ¨λ μ‘°νλ§λ€ νν°μ
κΈ°μ€μ΄ κΌ λ€μ΄κ°μΌκ² λ€μ? λ νν°μ
μ΄ λ무 λ§μμ§ κ²½μ°μλ μ΄λ»κ² λλμ??
β’
νν°μ
λ κΈ°μ€μ λ°λΌ μΌλΆ 쿼리λ μ‘°ν μ±λ₯μ΄ μ€νλ € μ νλ μλ μμΌλ €λμ?
β’
μ€λ©μ κΈ°μ€μ μ΄λ»κ² μ‘λμ? μ€λ©μ ν΅ν΄ μ¬λ¬ μλ²λ‘ DBλ₯Ό λΆν νλ©΄ μ¬μ©μκ° μ€λ© κΈ°μ€μ λ°λΌ Datasourceλ₯Ό μ ν΄μ€μΌνλμ?
β’
μ€λ©μ μ§ννλ©΄ db μλ²λ₯Ό λΆλ¦¬νλκ±΄λ° νΈλμμ
κ΄λ¦¬λ λ°λ‘ μ§νν΄μ£Όμ΄μΌνλ건κ°μ?
β’
λ μΈμ§ νν°μ
λ != μ€λ©μΈκ±΄κ°μ??,,
β’
DB λ κ²°κ΅ νλμ νμΌλ‘ κ΄λ¦¬νλ€.
νμ΄μ§ μ²λ¦¬
β’
offset
β¦
μ€ν΅νλ€ λΌκ³ νν
β¦
limit μ μΉ΄μ΄νΈν΄μΌ νλ€(λ€ μ½μ).
β’
cursor
β¦
where μ μ λ¨Όμ μ½κΈ° λλ¬Έμ λ°μ΄ν°κ° λ§μμ‘μ λ μ 리νλ€
β¦
λ¨μ μ??
μλ² μΊμ, κ²μ μμ§, λ©μμ§ ν
μꡬμ¬ν ννΈ
β’
20κ°λ cache λ₯Ό μ΄μ©νλ€.
β’
κ²μ μμ§μ μ΄μ©νλ€.
β’
μν μ λ³΄κ° λ³κ²½λμμ λ
β¦
write ν λ€
βͺ
λ©μμ§ ν
βͺ
μΊμμ λ°λ‘ write
κ³ λ―Όν λΆλΆ
β’
μλΉμ€ λ°μ΄ν° νΉμ±
β’
μλΉμ€μμ νΉλ³ν κ³ λ €ν΄μΌ ν μ€μ κΈ°λ₯
β’
κ°μ ν μΈνλΌ μν€ν
μ²μμ λ°μν μ μμ κ²μΌλ‘ μμλλ λ¬Έμ
β’
λ¬Έμ μ λν ν΄κ²° λ°©μ μμ΄λμ΄
β’
κ·λͺ¨ νμ₯μ±(scalability)
β’
μ±λ₯(performance)