Spring

[Spring] Dirty Checking(더티 체킹) μ΄λž€?

DAHLIA CHOI 2023. 10. 27. 10:48

μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ‹€κ°€ repository.save()λ₯Ό ν•˜μ§€ μ•Šμ•„λ„ update 쿼리가 μ‹€ν–‰λ˜μ–΄ DB에 λ°˜μ˜λ˜λŠ” ν˜„μƒμ„ 보고 Dirty Checking에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μ•˜λ‹€ πŸ€”

 

 

βš™οΈ Dirty Checkingμ΄λž€?

Spring JPAμ—μ„œ 더티 μ²΄ν‚Ήμ΄λž€ μ˜μ†μ„± μ»¨ν…Œμ΄λ„ˆκ°€ κ΄€λ¦¬ν•˜λŠ” μ—”ν‹°ν‹°μ˜ μƒνƒœλ₯Ό κ°μ§€ν•΄μ„œ λ³€κ²½λœ 뢀뢄이 μžˆλ‹€λ©΄ μžλ™μœΌλ‘œ νŠΈλžœμž­μ…˜μ΄ λλ‚˜λŠ” μ‹œμ μ— λ°μ΄ν„°λ² μ΄μŠ€μ— λ°˜μ˜ν•˜λŠ” κΈ°λŠ₯이닀. 

dirty : λ³€κ²½λœ μ—”ν‹°ν‹° 데이터
dirty checking : λ³€κ²½λœ λΆ€λΆ„ 감지

 

 

Dirty Checking은 μ–Έμ œ μΌμ–΄λ‚ κΉŒ?

  • μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ—μ„œ κ΄€λ¦¬λ˜λŠ” μ—”ν‹°ν‹°
    • μ€€μ˜μ†/λΉ„μ˜μ† μƒνƒœμ˜ μ—”ν‹°ν‹°λŠ” 더티 μ²΄ν‚Ήμ˜ λŒ€μƒμ΄ λ˜μ§€ μ•ŠλŠ”λ‹€.
  • Transaction(νŠΈλžœμž­μ…˜)이 μ»€λ°‹λ˜μ—ˆμ„ λ•Œ
    • νŠΈλžœμž­μ…˜μ΄ μ»€λ°‹λ˜κΈ° μ „κΉŒμ§€ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλŠ” 변경사항을 μΆ”μ ν•˜κΈ°λ§Œ ν•˜κ³  DB에 λ°˜μ˜ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€. 
      νŠΈλžœμž­μ…˜μ΄ μ»€λ°‹λ˜μ–΄μ•Ό μ˜μ†μ„± μ»¨ν…μŠ€νŠΈκ°€ μ—”ν‹°ν‹°μ˜ λ³€κ²½λœ μƒνƒœλ₯Ό DB에 λ°˜μ˜ν•œλ‹€.

 

Dirty Checking이 μ–΄λ–»κ²Œ μΌμ–΄λ‚ κΉŒ?

JPAμ—μ„œλŠ” μ—”ν‹°ν‹°λ₯Ό μ‘°νšŒν•  λ•Œ ν•΄λ‹Ή μ—”ν‹°ν‹°μ˜ μƒνƒœλ₯Ό 기반으둜 μŠ€λƒ…μƒ·μ„ λ§Œλ“ λ‹€. 

νŠΈλžœμž­μ…˜μ΄ λλ‚˜λŠ” μ‹œμ μ— 이 μŠ€λƒ…μƒ·κ³Ό λΉ„κ΅ν•΄μ„œ 변경이 μžˆλ‹€λ©΄ Update 쿼리λ₯Ό λ°œμƒμ‹œν‚¨λ‹€. 

 

 

μ€€μ˜μ†/λΉ„μ˜μ† μƒνƒœ

μ€€μ˜μ†

μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ €μž₯λ˜μ—ˆλ‹€κ°€ λΆ„λ¦¬λœ μƒνƒœλ‘œ ν˜•μž¬λŠ” μ˜μ† μƒνƒœκ°€ μ•„λ‹Œ μƒνƒœμ΄λ‹€. 

 

λΉ„μ˜μ†

JPA와 관계없이 객체만 μƒμ„±ν•œ μƒνƒœμ΄λ‹€.

 

 

βž• μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ˜ 관리λ₯Ό λ°›κΈ° μœ„ν•΄μ„œλŠ” μ‹λ³„μž (@Id)κ°€ ν•„μš”ν•˜λ‹€. 

μ€€μ˜μ† μƒνƒœλŠ” μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ˜ 관리λ₯Ό 더이상 받지 μ•Šμ§€λ§Œ μ—¬μ „νžˆ μ‹λ³„μžλŠ” μ‘΄μž¬ν•œλ‹€.