๐ŸŒนย ์ •๋ฆฌ by ์žฅ๋ฏธ(https://velog.io/@newbiekim/)

Dirty Checking์ด๋ž€ ๋ณ€๊ฒฝ ๊ฐ์ง€๋ฅผ ๋งํ•œ๋‹ค.

๊ธธ๊ฒŒ ๋งํ•  ๊ฒƒ ์—†์ด ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์˜ˆ์‹œ๋กœ ์•Œ์•„๋ณด์ž.

EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin(); //[ํŠธ๋žœ์žญ์…˜] ์‹œ์ž‘

//์˜์† ์—”ํ‹ฐํ‹ฐ ์กฐํšŒ
Member memberA = em.find(Member.class, "memberA");

//์˜์† ์—”ํ‹ฐํ‹ฐ ๋ฐ์ดํ„ฐ ์ˆ˜์ •
memberA.setUsername("rose");
memberA.setAge(100);

//em.update(member) <- ์ด๋Ÿฐ ์ฝ”๋“œ๊ฐ€ ์žˆ์–ด์•ผ ํ•˜์ง€ ์•Š์„๊นŒ?

transaction.commit(); //[ํŠธ๋žœ์žญ์…˜] ์ปค๋ฐ‹

๋งŒ์•ฝ ๋‚ด๊ฐ€ ์œ ์ € ๋„ค์ž„์„ rose๋กœ, ๋‚˜์ด๋ฅผ 100์‚ด๋กœ ๋ฐ”๊ฟจ๋‹ค๊ณ  ํ•ด๋ณด์ž.

๊ทธ๋Ÿผ ์ด ๋•Œ ๋‚ด๊ฐ€ update๋ฅผ ํ•˜๊ฑฐ๋‚˜ persist๋ฅผ ๋‹ค์‹œ ํ•ด ์ค˜์•ผ ํ•˜์ง€ ์•Š์„๊นŒ? JPA์—๊ฒŒ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋‹ค๋Š” ๊ฑธ ์•Œ๋ ค์ค˜์•ผ ํ•˜์ง€ ์•Š์„๊นŒ? ์‹ถ์„ ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ๋”ฐ๋กœ ๊ทธ๋Ÿด ํ•„์š” ์—†์ด commit๋งŒ ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

๊ทธ๋Ÿผ ์–˜๋Š” ๋‚ด๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค๋Š” ๊ฑธ ์–ด๋–ป๊ฒŒ ์•Œ๊นŒ?

๊ทธ๊ฑด ๋ฐ”๋กœ ์Šค๋ƒ…์ƒท ๋•๋ถ„์ด๋‹ค.

JPA์—์„œ๋Š” ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ•˜๋ฉด ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ์˜ ์กฐํšŒ ์ƒํƒœ ๊ทธ๋Œ€๋กœ ์Šค๋ƒ…์ƒท์„ ๋งŒ๋“ค์–ด๋†“๋Š”๋‹ค.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-07-18 แ„‹แ…ฉแ„’แ…ฎ 5.59.07.png

ํ”Œ๋Ÿฌ์‹œ(์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ DB์— ๋ฐ˜์˜) ๋˜๋Š” ์ˆœ๊ฐ„ ์—”ํ‹ฐํ‹ฐ์™€ ์Šค๋ƒ…์ƒท์„ ๋น„๊ตํ•ด ๋ฐ”๋€ ๊ฒŒ ์žˆ๋‹ค๋ฉด UPDATE ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ DB์— ๋ณด๋‚ธ๋‹ค.

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ์–ด๋–ค ๊ฒƒ์ด ๋ณ€๊ฒฝ๋๋Š”์ง€ ๊ฑ”๋„ค๋“ค์ด ๋‹ค ์•ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ ๋”ฐ๋กœ ์•Œ๋ ค์ค„ ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋‹ค. (โ†’ ์ค€์˜์†, ๋น„์˜์† ์ƒํƒœ์˜ ์—”ํ‹ฐํ‹ฐ๋Š” ๋”ํ‹ฐ ์ฒดํ‚น ๋Œ€์ƒ์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.)