dirtyChecking

๋”ํ‹ฐ ์ฒดํ‚น์ด๋ž€ repository.save()๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ €์žฅํ•˜์ง€ ์•Š์•„๋„ ์—”ํ‹ฐํ‹ฐ์˜ ๋ณ€๊ฒฝ๋งŒ์œผ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ €์žฅ๋˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

์ดํ•˜ ๋ธ”๋กœ๊ทธ๊ธ€ ์ธ์šฉ

์ถœ์ฒ˜ : https://jojoldu.tistory.com/415

"repository์˜ save ๋ฉ”์†Œ๋“œ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ €์žฅํ•˜์ง€ ์•Š์•˜์Œ์—๋„ update ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์œ ๋Š” Dirty Checking ๋•๋ถ„์ธ๋ฐ์š”.

์—ฌ๊ธฐ์—์„œ Dirty๋ž€ ์ƒํƒœ์˜ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธด ์ •๋„๋กœ ์ดํ•ดํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, Dirty Checking์ด๋ž€ ์ƒํƒœ ๋ณ€๊ฒฝ ๊ฒ€์‚ฌ ์ž…๋‹ˆ๋‹ค.

JPA์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜์ด ๋๋‚˜๋Š” ์‹œ์ ์— ๋ณ€ํ™”๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ž๋™์œผ๋กœ ๋ฐ˜์˜ํ•ด์ค๋‹ˆ๋‹ค.

์ด๋•Œ ๋ณ€ํ™”๊ฐ€ ์žˆ๋‹ค์˜ ๊ธฐ์ค€์€ ์ตœ์ดˆ ์กฐํšŒ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

JPA์—์„œ๋Š” ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ•˜๋ฉด ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ์˜ ์กฐํšŒ ์ƒํƒœ ๊ทธ๋Œ€๋กœ ์Šค๋ƒ…์ƒท์„ ๋งŒ๋“ค์–ด๋†“์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŠธ๋žœ์žญ์…˜์ด ๋๋‚˜๋Š” ์‹œ์ ์—๋Š” ์ด ์Šค๋ƒ…์ƒท๊ณผ ๋น„๊ตํ•ด์„œ ๋‹ค๋ฅธ์ ์ด ์žˆ๋‹ค๋ฉด Update Query๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค."

์ •๋ฆฌ

๋‹ค์‹œ ์ •๋ฆฌํ•˜๋ฉด jpa๊ฐ€ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜์†์„ฑ ์ฝ˜ํ…์ŠคํŠธ์— ๋ณด๊ด€ํ•  ๋•Œ ์ตœ์ดˆ ์ƒํƒœ์ธ '์Šค๋ƒ…์ƒท'์„ ๋ณด๊ด€ํ•˜๋Š”๋ฐ ํ”Œ๋Ÿฌ์‹œ ์‹œ์ ์— ๋ณด๊ด€ํ–ˆ๋˜ ์Šค๋ƒ…์ƒท๊ณผ ๋ณ€๊ฒฝ๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋น„๊ตํ•ด ์–ด๋–ค ๊ฒƒ์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ์ฐพ์•„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.

  • ์˜์†์„ฑ ์ฝ˜ํ…์ŠคํŠธ๋Š” ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๊ฐ€ db์™€ ์†Œํ†ตํ•˜๊ธฐ ์ „, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜๊ตฌ ์ €์žฅํ•˜๋Š” ํ™˜๊ฒฝ์ด๋‹ค. ์˜์†์„ฑ ์ฝ˜ํ…์ŠคํŠธ๋Š” 1์ฐจ ์บ์‹œ, ๋™์ผ์„ฑ ๋ณด์žฅ, ํŠธ๋žœ์žญ์…˜์„ ์œ„ํ•œ ์“ฐ๊ธฐ ์ง€์—ฐ, ์Šค๋ƒ…์ƒท ๋ณ€๊ฒฝ ๊ฐ์ง€ ๊ฐ™์€ ํŠน์ง•์ด์ž ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • ํ”Œ๋Ÿฌ์‹œ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์ „๋ถ€ ๋‚ด๋ ค๋ณด๋‚ด๋Š” ๊ฒƒ์œผ๋กœ, ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ๊ด€๋ฆฌํ•˜๋˜ '์“ฐ๊ธฐ ์ง€์—ฐ sql ์ €์žฅ์†Œ'์˜ ์ฟผ๋ฆฌ๋“ค์„ db๋กœ ๋ณด๋‚ด๋Š” ๋‹จ๊ณ„์ด๋‹ค.

  • ํ”Œ๋Ÿฌ์‹œ๋Š” (em์€ ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €) 1. em.flush() 2. transaction commit์‹œ 3. jpql์‹คํ–‰ ์‹œ ๋ฐœ์ƒํ•œ๋‹ค.

  • ์ฐธ๊ณ ๋กœ em.persist()์‹œ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ pk๋กœ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— persist ์‹œ์ ์— pk๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋ฉด flush์—†์ด๋„ db์— ์ธ์„œํŠธ ์ฟผ๋ฆฌ ํ›„ pk๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.

@DynamicUpdate

์œ„์—์„œ๋Š” dirty-checking์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋‹ค. transactionalํ•œ ์ƒํƒœ์—์„œ๋Š” ์—”ํ‹ฐํ‹ฐ์˜ ๋ณ€๊ฒฝ๋งŒ์œผ๋กœ๋„ db์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋”ํ‹ฐ ์ฒดํ‚น์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์—…๋ฐ์ดํŠธ ํ˜น์€ ์ธ์„œํŠธ ์ฟผ๋ฆฌ๋Š” ๋ชจ๋“  ํ•„๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

์ „์ฒด ํ•„๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  1. ์ƒ์„ฑ๋˜๋Š” ์ฟผ๋ฆฌ๊ฐ€ ๊ฐ™์•„ ๋ถ€ํŠธ ์‹คํ–‰์‹œ์ ์— ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์„œ ์žฌ์‚ฌ์šฉ๊ฐ€๋Šฅ

  2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž…์žฅ์—์„œ ์ฟผ๋ฆฌ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ >> ๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ›์œผ๋ฉด ์ด์ „์— ํŒŒ์‹ฑ๋œ ์ฟผ๋ฆฌ๋ฅผ ์žฌ์‚ฌ์šฉ

ํ•˜์ง€๋งŒ ์ „์ฒด ํ•„๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ๋Š”๋ฐ ๊ทธ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด @Dynamicupdate์ด๋‹ค. ์ด ์–ด๋…ธํ…Œ์ด์…˜์€ ์—”ํ‹ฐํ‹ฐ ์œ„์— ์จ์ฃผ๋ฉด ๋ณ€๊ฒฝ๋œ ํ•„๋“œ๋งŒ sql์— ๋ฐ˜์˜ํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.

๋‹ค๋งŒ ์ด ์–ด๋…ธํ…Œ์ด์…˜์€ ํ…Œ์ด๋ธ”์— ์ปฌ๋Ÿผ์ด 20~30๊ฐœ ์ด์ƒ์ผ ๋•Œ ์ „์ฒด ํ•„๋“œ์˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋А๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๊ณ  ํ…Œ์ด๋ธ” ํ•„๋“œ๊ฐ€ ์ ๋‹ค๋ฉด ๊ตณ์ด ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

Last updated