μ°λ¦¬κ° μ¬μ©νλ μλΉμ€λ€μ λλΆλΆ λ°μ΄ν°λ² μ΄μ€(DB)λ₯Ό μ¬μ©νλ€.
μλ₯Ό λ€μ΄:
μ΄λ° κΈ°λ₯λ€μ λ¨μν ν λ²μ μμ
μΌλ‘ λλμ§ μλλ€.
μ¬λ¬ κ°μ λ°μ΄ν° λ³κ²½ μμ
μ΄ ν¨κ» μΌμ΄λλ€.
λ¬Έμ λ μ΄ μμ λ€ μ€ μΌλΆλ§ μ±κ³΅νλ©΄ λ°μ΄ν°κ° κΌ¬μΌ μ μλ€λ κ²μ΄λ€.
κ·Έλμ λ±μ₯ν κ°λ μ΄ λ°λ‘ νΈλμμ (Transaction) μ΄λ€.
νΈλμμ μ: λ°μ΄ν°λ² μ΄μ€μμ νλμ λ Όλ¦¬μ μΈ μμ λ¨μμ΄λ€.
μ½κ² λ§νλ©΄: "μ¬λ¬ μμ μ νλλ‘ λ¬Άμ΄μ μ²λ¦¬νλ κ²"μ΄λ€.
νΈλμμ νΉμ§:
μ² μκ° μν¬μκ² 10,000μμ μ‘κΈνλ€κ³ κ°μ ν΄λ³΄μ.
UPDATE account SET money = money - 10000;
UPDATE account SET money = money + 10000;
λ μμ μ΄ λͺ¨λ μ±κ³΅νλ©΄:
β μ΄μ²΄ μλ£
μμ
μ΄λ° λ¬Έμ κ° μκΈ°λ©΄ μ΄λ»κ² λ κΉ?
π λ°μ΄ν°κ° κΉ¨μ§λ€.
νΈλμμ μ μμ λ€μ νλλ‘ λ¬Άλλ€.
μ΅μ’ μ μ₯
"λͺ¨λ μμ
μ±κ³΅ β DBμ λ°μ"
μ΄μ μνλ‘ λλ리기
"μ€κ°μ μ€ν¨ β μμ
μ 체 μ·¨μ"
"λ°μ΄ν°μ μμ μ±μ 보μ₯νκΈ° μν΄ μ¬λ¬ μμ μ νλλ‘ λ¬Άλ κΈ°μ "
νΈλμμ μ ACIDλΌλ 4κ°μ§ νΉμ§μ κ°μ§λ€.
π μ΄λ° μν©μ νμ©λμ§ μλλ€.
νΈλμμ μ νμ λ°μ΄ν°λ νμ μ μ μνλ₯Ό μ μ§ν΄μΌ νλ€.
μμ
Springμμλ λ³΄ν΅ @Transactional μ΄λ
Έν
μ΄μ
μ μ¬μ©νλ€.
@Transactional
public void transfer() {
withdraw();
deposit();
}
@Transactional : μ΄ λ©μλ μμ μμ
λ€μ νλμ νΈλμμ
μΌλ‘ λ¬Άλλ€.
@Transactional μ¬μ©νΈλμμ μ λ§μΉ κ²μμ μ μ₯ μμ€ν κ³Ό λΉμ·νλ€.
μ¦:
Rollback = λλ리기 λ²νΌ
Commit = μ μ₯ λ²νΌ
μ²λΌ μκ°νλ©΄ μ΄ν΄νκΈ° μ½λ€.