[JPA] Dirty Checking
๐ Dirty Checking์ด๋?
Dirty Checking
(๋ณ๊ฒฝ ๊ฐ์ง)๋ JPA๊ฐ ์์ ์ํ์ธ ์ํฐํฐ์ ๊ฐ์ด ๋ฐ๋์๋์ง๋ฅผ ์๋์ผ๋ก ๊ฐ์งํด, ํธ๋์ญ์
์ย flush
ํ๋ ์๊ฐ ํ์ํย UPDATE
ย ์ฟผ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ์์ฑํ์ฌ ์คํํ๋ ๊ธฐ๋ฅ์ด๋ค. ๋ฐ๋ก save
๋๋ saveAndFlush
๋ฉ์๋๋ฅผ ํธ์ถํ์ง ์์๋ ํธ๋์ญ์
์ด ๋๋ ๋ ์๋์ผ๋ก ์ํฐํฐ ๋ณ๊ฒฝ ๋ด์ฉ์ด DB์ ๋ฐ์๋๋ค.
์ค์์ ๋๋ ๋น์์ ์ํฐํฐ๋ Dirty Checking ๋์์ด ์๋๋ค. ์ฆ, ์ด๋ค์ ํธ๋์ญ์ ์ด ๋๋๋ ๋ณ๊ฒฝ ๋ด์ฉ์ด DB์ ์๋์ผ๋ก ๋ฐ์๋์ง ์๋๋ค.
๐ ๋์ ๊ณผ์
persist
, find
๋ฉ์๋ ๋ฑ์ผ๋ก ์ํฐํฐ๊ฐ ์์ ์ํ๊ฐ ๋๋ฉด, ์ค์ ์ํฐํฐ ๊ฐ์ฒด๋ 1์ฐจ ์บ์์ ์ ์ฅ๋๊ณ , ์ํฐํฐ์ ์ค๋
์ท ๋ํ ํจ๊ป ๋ณด๊ด๋๋ค.
ํธ๋์ญ์ ๋ด์์ ์ํฐํฐ์ ํ๋๋ฅผ ์์ ํด๋ ์ฆ์ ์ฟผ๋ฆฌ๋ฌธ์ด DB์ ๋ ๋ผ๊ฐ๋ ๊ฒ์ด ์๋๋ค. ๋ณ๊ฒฝ ๋ด์ฉ์ ์์์ฑ ์ปจํ ์คํธ์๋ง ๋ฐ์๋๋ค.
ํธ๋์ญ์
์ด ์ปค๋ฐ๋๋ฉด flush
๊ฐ ํธ์ถ๋๊ฒ ๋๋๋ฐ, JPA๋ flush ์์ ์์ 1์ฐจ ์บ์์ ์ค๋
์ท๊ณผ ์ํฐํฐ๋ฅผ ํ๋๋ณ๋ก ๋น๊ตํ์ฌ ๋ฌ๋ผ์ง ์ ์ด ์๋์ง ํ์ธํ๋ค. ๋ง์ฝ ์๋ค๋ฉด, ์ฐ๊ธฐ ์ง์ฐ SQL ์ ์ฅ์์ UPDATE
์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ฌ ๋ฃ๋๋ค.
flush
๋ง์ง๋ง ๋จ๊ณ์์ ์ฐ๊ธฐ ์ง์ฐ SQL ์ ์ฅ์์ ์ฟผ๋ฆฌ๋ฅผ DB์ ์ ์กํ๊ณ , ์ค์ ํธ๋์ญ์
์ปค๋ฐ์ด ์ผ์ด๋๋ฉด์ ๋ณ๊ฒฝ ์ฌํญ์ DB์ ๋ฐ์๋๊ฒ ๋๋ค.
๐ ํน์ง
์์ฑ๋๋ UPDATE
์ฟผ๋ฆฌ๋ ๋ณ๊ฒฝ๋ ํ๋๊ฐ ์๋๋ผ ๋ชจ๋ ํ๋๊ฐ ํฌํจ๋ ์ฟผ๋ฆฌ์ด๋ค. ๋ณ๊ฒฝ๋ ํ๋๊ฐ ๋ง์ถฐ ์ฟผ๋ฆฌ๋ฅผ ํ์ฑํ๋ ๋น์ฉ๋ณด๋ค ๋ชจ๋ ํ๋๋ฅผ ์ ์กํ๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ๋น์ฉ์ด ๋ ์ ์ ์ ์์ผ๋ฉฐ, ํญ์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ฟผ๋ฆฌ๋ฅผ ์บ์ํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
๋ค๋ง ์ํฐํฐ์ ์ค๋
์ท์ ๋ฉ๋ชจ๋ฆฌ์ ๋ณด๊ดํ๊ธฐ ๋๋ฌธ์, ์ํฐํฐ์ ์๊ฐ ๋ง๊ฑฐ๋ ํ๋๊ฐ ๋ง๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๊ฒ ๋๋ค. ๋ํ flush ์์ ์์ ์์ ์ํฐํฐ์ ํ๋ ๊ฐ ๋น๊ต ์ ๋น์ฉ๋ ์ฆ๊ฐํ๋ค. ๊น์ํ ๋์ โ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐโ์ ์ํ๋ฉด, ํ๋๊ฐ 30๊ฐ๊ฐ ๋์ด๊ฐ๋ฉด ์ ์ฒด ํ๋ UPDATE
์ฟผ๋ฆฌ๋ฌธ์ ์ฅ์ ์ด ํด์๋๋ค๊ณ ํ๋ค.
์ด ๊ฒฝ์ฐ, @DynamicUpdate
๋ฅผ ์ฌ์ฉํ๋ฉฐ ์์ ๋ ํ๋์ ๋ํด์๋ง UPDATE
์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋๋ก ํ ์ ์๋ค. ๋ค๋ง, ํ๋๊ฐ 30๊ฐ๊ฐ ๋์ด๊ฐ๋ ์ํฉ์ด๋ผ๋ฉด ํ
์ด๋ธ ์ค๊ณ๋ฅผ ๋ค์ ์ดํด ๋ณผ ํ์๊ฐ ์๋ค.
๋๋ ํน์ ํ๋๋ง ์
๋ฐ์ดํธํ๋ JPQL
์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ๋ ์๋ค. ๋ค๋ง ์ด ๋ฐฉ๋ฒ์ DB์ ์์์ฑ ์ปจํ
์คํธ ๊ฐ ๋ถ์ผ์นํ๋ ์ํฉ์ด ๋ฐ์ํ ์ ์๋ค. JPQL ์ฟผ๋ฆฌ๋ ์์์ฑ ์ปจํ
์คํธ๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ฐ๋ก DB์ ์ฟผ๋ฆฌ๋ฅผ ์ ์กํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ง์ฝ ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์
์ด๋ผ๋ฉด, @Transaction(readOnly = true)
๋ฅผ ํตํด Dirty Checking์ ์๋ตํ ์ ์๋ค.
๐ ์ฐธ๊ณ
https://jojoldu.tistory.com/415