1️⃣ νŠΈλžœμž­μ…˜μ΄λž€?

νŠΈλžœμž­μ…˜(Transaction)μ΄λž€ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μˆ˜ν–‰λ˜λŠ” ν•˜λ‚˜ μ΄μƒμ˜ μž‘μ—…μ„ ν•˜λ‚˜μ˜ 논리적인 λ‹¨μœ„λ‘œ 묢은 것을 λ§ν•œλ‹€.

즉, "λͺ¨λ“  μž‘μ—…μ΄ 성곡해야 μ €μž₯ν•˜κ³ , ν•˜λ‚˜λΌλ„ μ‹€νŒ¨ν•˜λ©΄ μ „λΆ€ λ˜λŒλ¦°λ‹€"λŠ” κ°œλ…

βœ… 핡심 μ—°μ‚°

πŸ’° μ˜ˆμ‹œ: A β†’ B κ³„μ’Œ μ†‘κΈˆ

@Transactional
public void transfer(Account from, Account to, int amount) {
    from.withdraw(amount);   // A κ³„μ’Œμ—μ„œ 좜금
    to.deposit(amount);      // B κ³„μ’Œλ‘œ μž…κΈˆ
}

μž…κΈˆ 쀑 였λ₯˜κ°€ λ‚˜λ©΄ μΆœκΈˆλ„ λ˜λŒλ €μ•Ό ν•œλ‹€. 이것이 νŠΈλžœμž­μ…˜

2️⃣ νŠΈλžœμž­μ…˜μ˜ 4λŒ€ νŠΉμ„±: ACID

νŠΈλžœμž­μ…˜μ€ μ•„λž˜ λ„€ κ°€μ§€ νŠΉμ„±μ„ λ§Œμ‘±ν•΄μ•Ό ν•œλ‹€.

νŠΉμ„± μ„€λͺ…
Atomicity (μ›μžμ„±) λͺ¨λ‘ μ„±κ³΅ν•˜κ±°λ‚˜, λͺ¨λ‘ μ‹€νŒ¨ν•΄μ•Ό ν•œλ‹€.
Consistency (일관성) νŠΈλžœμž­μ…˜ μ „ν›„ DB μƒνƒœκ°€ 무결성을 λ§Œμ‘±ν•΄μ•Ό ν•œλ‹€.
Isolation (고립성) λ‹€λ₯Έ νŠΈλžœμž­μ…˜κ³Ό μƒν˜Έ 간섭이 μ—†μ–΄μ•Ό ν•œλ‹€.
Durability (지속성) μ»€λ°‹λœ λ°μ΄ν„°λŠ” 영ꡬ적으둜 μ €μž₯λ˜μ–΄μ•Ό ν•œλ‹€.

고립성(Isolation)이 μ€‘μš”ν•œ 이유

고립성이 μ—†μœΌλ©΄ λ‹€μŒκ³Ό 같은 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.

문제 μœ ν˜• μ„€λͺ…
Dirty Read 아직 μ»€λ°‹λ˜μ§€ μ•Šμ€ 데이터λ₯Ό 읽음
Non-repeatable Read 같은 rowλ₯Ό 두 번 μ½μ—ˆλŠ”λ° 값이 λ°”λ€œ
Phantom Read 같은 쑰건으둜 μΏΌλ¦¬ν–ˆλŠ”λ° ν–‰μ˜ μˆ˜κ°€ λ°”λ€œ