
νΈλμμ μ΄λ
νΈλμμ μ λ°μ΄ν°λ² μ΄μ€μμ μνλλ μμ λ€μ λ Όλ¦¬μ μΈ μμ λ¨μλ‘ λ¬Άμ΄ μμ νκ² μ€νν μ μλλ‘ λμμ£Όλ κ²μ΄λ€.
πΉ ACID μ±μ§
- μμμ± : νΈλμμ
κ³Ό κ΄λ ¨λ μμ
λ€μ΄ λΆλΆμ μΌλ‘ μ€νλλ€κ° μ€λ¨λμ§ μλ κ² λ³΄μ₯
- MVCC β Undo Log ν΅ν΄μ νΈλμμ μ€ν¨ μ rollback
- μΌκ΄μ± : νΈλμμ
μ΄ μ€νμ μ±κ³΅μ μΌλ‘ μλ£νλ©΄ μΈμ λ μΌκ΄μ± μλ λ°μ΄ν°λ² μ΄μ€ μνλ‘ μ μ§ π λ°μ΄ν°μ λ¬΄κ²°μ± λ³΄μ₯
- μ μ½ μ‘°κ±΄ ν΅ν΄μ μΌκ΄μ± 보μ₯ β ex) μ λν¬ μ μ½, μΈλν€ μ μ½ λ±
- λ
λ¦½μ± : νΈλμμ
μ μν μ λ€λ₯Έ νΈλμμ
μ μ°μ° μμ
μ΄ λΌμ΄λ€μ§ λͺ»νλλ‘ λ³΄μ₯ π μ±λ₯ κ΄λ ¨ μ΄μ λ‘ μΈν΄ κ°μ₯ μ μ°μ± μλ μ μ½ μ‘°κ±΄
- νΈλμμ 격리λ 벨 ν΅ν΄μ 보μ₯
- μ§μμ± : μ±κ³΅μ μΌλ‘ μνλ νΈλμμ
μ μμν λ°μλμ΄μΌ ν¨. μ μ€ X
- WAL(Write-Ahead Logging) λ‘κ·Έ ν΅ν΄μ 보μ₯
@Transactional
μ€νλ§μμλ @Transactional
μ΄λ
Έν
μ΄μ
μ ν΅ν΄ νΈλμμ
μ²λ¦¬λ₯Ό μ§μνλ€.
@Transactional
μ νλ‘μ ν¨ν΄μ μ¬μ©νμ¬ κ΅¬νλκΈ° λλ¬Έμ μ λλ‘ λμνμ§ μλ κ²½μ°κ° μλ€.
π‘ νλ‘μ ν¨ν΄μ΄λ ?
π λμ μλ³Έ κ°μ²΄λ₯Ό λμ μ²λ¦¬νλ λ°©μμΌλ‘ λ€λ₯Έ κ°μ²΄μ λν μ κ·Όμ μ μ΄νκ±°λ κ·Έ κ°μ²΄μ λν μΆκ°μ μΈ κΈ°λ₯μ μ 곡νκΈ° μν΄ μ¬μ©λλ€.
ex) inner ν¨μμμμ @Transactional
β μ λλ‘ λμ X
public Member create(RegisterMemberCommand command){
// νμμ 보(μ΄λ©μΌ, λλ€μ, μλ
μμΌ) λ±λ‘
return getMember(command);
}
@Transactional
private Member getMember(RegisterMemberCommand command) {
var member = Member.builder()
.nickname(command.nickname())
.email(command.email())
.birthday(command.birthday())
.build();
var savedMember = memberRepository.save(member);
saveMemberNicknameHistory(savedMember);
return savedMember;
}
@Transactional
μ μ€νλ§ AOP κΈ°λ°μΌλ‘ λμνκ³ , AOPλ Proxyλ₯Ό μμ±ν΄μ νΈλμμ
κ΄λ ¨ λμμ μννλ€.
λ΄λΆν¨μκ° κ°μ²΄ λ΄λΆμμ νΈμΆλ λ ν΄λΉ ν΄λμ€μ λ©μλλ₯Ό μ§μ νΈμΆνκΈ° λλ¬Έμ Proxyλ₯Ό ν΅ν νΈμΆμ΄ μλλ―λ‘ μ μ©λμ§ μμ μ μλ€.
μΈλΆμμ νΈμΆν΄μΌ μ μ©λλ€.
π‘ νΈλμμ λμμ connection poolμ μ μ νκ³ μκΈ° λλ¬Έμ κ³ κ°λμ§ μλλ‘ νκΈ° μν΄μ νΈλμμ λ²μλ μ§§κ² κ΅¬μ±νλ κ²μ΄ μ’λ€.
'CS > ποΈ Data' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Data] μΈλ±μ€λ‘ μ‘°ν μ΅μ νμν€κΈ° (0) | 2023.12.10 |
---|---|
[μλ£κ΅¬μ‘°] Priority Queue (μ°μ μμ ν) (0) | 2023.08.31 |