๐Ÿผ๋ฐฑ์•ค๋“œ/Spring

์˜์†์„ฑ ๊ด€๋ฆฌ

๊ณ„๋ž€์†Œ๋…„ 2023. 12. 22. 16:43

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ

JPA์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ 2๊ฐ€์ง€๋ฅผ ๊ผฝ์•„๋ณด๋ฉด

1. ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งคํ•‘(ORM)

2. ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ

์ด๊ทธ๋ฆผ์„ ์„ค๋ช…ํ•˜๋ฉด 

์š”์ฒญ์ด ์˜ฌ ๋•Œ๋งˆ๋‹ค EntityManagerFactory๋ฅผ ํ†ตํ•ด EntityManager๋ฅผ ์ƒ์„ฑํ•˜๊ณ , EntityManager๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ DB ์ปค๋„ฅ์…˜์„ ํ†ตํ•ด DB๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

 

 

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ? "์˜๊ตฌ ์†์„ฑ ์ €์žฅ" ์ธ๊ฐ€?

๋งž๋‹ค.

"์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜๊ตฌ ์ €์žฅํ•˜๋Š” ํ™˜๊ฒฝ"์ด๋ผ๋Š” ๋“ฏ์ด๋‹ค. ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋Š” ๋…ผ๋ฆฌ์ ์ธ ๊ฐœ๋…์œผ๋กœ ๋ˆˆ์— ๋ณด์ด์ง€๋Š” ์•Š๋Š”๋‹ค. EntityManager๋ฅผ ํ†ตํ•ด์„œ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. 

EntityManager.persist(entity);

//Entity๋ฅผ DB์— ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ. Entity๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

EntityManager๋ฅผ ์ƒ์„ฑํ•˜๋ฉด  1:1๋กœ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
 
EntityManager ์•ˆ์— ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ผ๋Š” ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š๋Š” ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๋Š” ๊ฒƒ
 

 

 
 

์—”ํ‹ฐํ‹ฐ ์ƒ๋ช…์ฃผ๊ธฐ

์—”ํ‹ฐํ‹ฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” 4๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

- ๋น„์˜์†(new / transient) - ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ๊ด€๋ จ ์—†๋Š” ์ƒˆ๋กœ์šด ์ƒํƒœ

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ๋งŒํ•˜๊ณ  Entity Manager์— ์•„๋ฌด๊ฒƒ๋„ ๋„ฃ์ง€ ์•Š์€ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.
 
 

- ์˜์†(managed) - ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ๊ด€๋ฆฌ๋˜๋Š” ์ƒํƒœ

์ฆ‰, persist ํ•œ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ   EntityManager๋ฅผ ๊ฐ€์ ธ์™€์„œ persist๋กœ ๊ฐ์ฒด๋ฅผ ๋„ฃ๋Š”๋‹ค. EntityManager์•ˆ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉฐ ์˜์† ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ์•„์ง์€ DB์— ์ฟผ๋ฆฌ๊ฐ€ ๋‚ ์•„๊ฐ€๋Š”๊ฒŒ ์•„๋‹ˆ๋‹ค.

 

- ์ค€์˜์†(detached) - ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋˜์–ด์žˆ๋‹ค๊ฐ€ ๋ถ„๋ฆฌ๋œ ์ƒํƒœ

- ์‚ญ์ œ(removed) - ์‚ญ์ œ๋œ ์ƒํƒœ

 

๋น„์˜์†์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ์ƒํƒœ์ด๋‹ค. ์ฆ‰, ์˜์† ์ปจํ…์ŠคํŠธ์— ์•„์ง ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š๋Š”๋‹ค?

์—ฌ๊ธฐ์„œ persist()๋ฅผ ํ•œ๋‹ค๋ฉด ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•œ ์ƒํƒœ์ธ ์˜์†์ด ๋œ๋‹ค.

์ค€์˜์†์€ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ๋ถ„๋ฆฌํ•œ ์ƒํƒœ์ด๋ฉฐ

์‚ญ์ œ๋Š” ๋ง๊ทธ๋Œ€๋กœ ๊ฐ์ฒด๋ฅด ์‚ญ์ œํ•œ ์ƒํƒœ์ด๋‹ค.

 

๊ทธ๋Ÿผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ์ด์ ์€ ๋ญ๊ฐ€ ์žˆ์„๊นŒ?

 

1. 1์ฐจ ์บ์‹œ 

2. ๋™์ผ์„ฑ ๋ณด์žฅ - 1์ฐจ ์บ์‹œ๋กœ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ์ฝ๊ธฐ ๋“ฑ๊ธ‰์˜ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฐจ์›์—์„œ ์ œ๊ณตํ•œ๋‹ค.

3. ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋Š” ์“ฐ๊ธฐ ์ง€์—ฐ - ์ปค๋ฐ‹ํ•˜๋Š” ์ˆœ๊ฐ„์ด ๋˜์–ด์„œ์•ผ DB์— Insert SQL์„ ๋ณด๋‚ธ๋‹ค. 

4. ๋ณ€๊ฒฝ ๊ฐ์ง€(Dirty Checking) - flush()๋กœ ์—”ํ‹ฐํ‹ฐ์™€ ์Šค๋ƒ…์ƒท์„ ๋น„๊ตํ•œ๋‹ค.

5. ์ง€์—ฐ ๋กœ๋”ฉ(Lazy Loading)