๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[Spring] Entity,์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ๋ณธ๋ฌธ

๐—ฃ๐—ฟ๐—ผ๐—ด๐—ฟ๐—ฎ๐—บ๐—บ๐—ถ๐—ป๐—ด๐Ÿ’ป/๐’๐ฉ๐ซ๐ข๐ง๐ 

[Spring] Entity,์˜์†์„ฑ ์ปจํ…์ŠคํŠธ

๐ŸคRyusun๐Ÿค 2022. 12. 31. 23:46

Entity

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์— ๋Œ€์‘ํ•˜๋Š” ํด๋ž˜์Šค
  • @Entity๊ฐ€ ๋ถ™์€ ํด๋ž˜์Šค๋Š” JPA์—์„œ ๊ด€๋ฆฌํ•˜๋ฉฐ ์—”ํ‹ฐํ‹ฐ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

 

EntityManager

 

  • ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํด๋ž˜์Šค
  • ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ๋‚ด๋ถ€์— ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ(Persistence Context)๋ฅผ ํ†ตํ•ด ์—”ํ‹ฐํ‹ฐ๋“ค์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ธฐ๋ณธ ๋™์ž‘์ธ CRUD(Create, Read, Update, Delete)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 
  • ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

 

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

 

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

 

์ƒ๋ช…์ฃผ๊ธฐ ๋‚ด์šฉ
๋น„์˜์†(new) new ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ์ƒํƒœ๋กœ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ๊ด€๋ จ์ด ์—†๋Š” ์ƒํƒœ
์˜์†(managed) - ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋œ ์ƒํƒœ๋กœ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ์ƒํƒœ
- ์˜์† ์ƒํƒœ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ, ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹ ์‹œ์ ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜
์ค€์˜์† ์ƒํƒœ(detached) ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ €์žฅ๋˜์—ˆ๋‹ค๊ฐ€ ๋ถ„๋ฆฌ๋œ ์ƒํƒœ
์‚ญ์ œ ์ƒํƒœ(removed) ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ญ์ œ๋œ ์ƒํƒœ

 

EntityManager์˜ ๋ฉ”์†Œ๋“œ

 

  • find() : ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์—†์„ ๊ฒฝ์šฐ ๋ฐ์ด์ปค๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค
  • persist() : ์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • remove() : ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
  • flush() : ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋œ ๋‚ด์šฉ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

 

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ(Persistence Context)

 

  • ์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜๊ตฌ ์ €์žฅํ•˜๋Š” ํ™˜๊ฒฝ
  • JPA๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด์˜ ์ง‘ํ•ฉ
  • ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•ด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
  • ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๊ฐ€ ์˜์† ์ผ„ํ…์ŠคํŠธ์— ๋“ค์–ด์˜ค๊ฒŒ ๋˜๋ฉด JPA๋Š” ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด์˜ ๋งคํ•‘ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  DB์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๊ฐ€ ์˜์† ์ปจํ…์ŠคํŠธ์— ๋“ค์–ด์˜ค๊ฒŒ ๋˜์–ด ๊ด€๋ฆฌ ๋Œ€์ƒ์ด ๋˜๋ฉด ๊ทธ ๊ฐ์ฒด๋ฅผ ์˜์† ๊ฐ์ฒด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

 

 

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ์‚ฌ์šฉ์‹œ ์ด์ 

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์ด์˜ ์ค‘๊ฐ„๊ณ„์ธต์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„ํผ๋ง, ์บ์‹ฑ ๋“ฑ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ 1์ฐจ ์บ์‹œ ๊ตฌ์กฐ

 

1. 5L ์•„์ด๋””๋ฅผ ๊ฐ€์ง„ member05 ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

2. member05 ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ 1์ฐจ ์บ์‹œ์— ์ €์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด Database ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

3. member05 ์—”ํ‹ฐํ‹ฐ๋ฅผ 1์ฐจ ์บ์‹œ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

4. member05 ์—”ํ‹ฐํ‹ฐ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

 

1์ฐจ ์บ์‹œ

 

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—๋Š” 1์ฐจ ์บ์‹œ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ Map<KEY, VALUE>๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. entityManager.find() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ 1์ฐจ ์บ์‹œ๋ฅผ ์กฐํšŒํ•œ ํ›„ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์—†์œผ๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์กฐํšŒ ํ›„ 1์ฐจ ์บ์‹œ์— ์ €์žฅ ๋ฐ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

๋™์ผ์„ฑ ๋ณด์žฅ

 

ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์—์„œ ๊ฐ™์€ ํ‚ค๊ฐ’์œผ๋กœ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋œ ์—”ํ‹ฐํ‹ฐ ์กฐํšŒ ์‹œ ๊ฐ™์€ ์—”ํ‹ฐํ‹ฐ ์กฐํšŒ๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๋กœ 1์ฐจ ์บ์‹œ์— ์ €์žฅ๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

 

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ์“ฐ๊ธฐ ์ง€์—ฐ SQL ์ €์žฅ์†Œ

 

ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋Š” ์“ฐ๊ธฐ ์ง€์›

 

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—๋Š” ์“ฐ๊ธฐ ์ง€์—ฐ SQL์ €์žฅ์†Œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. entityManager.persist()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด 1์ฐจ ์บ์‹œ์— ์ €์žฅ๋˜๋Š” ๊ฒƒ๊ณผ ๋™์‹œ์— ์“ฐ๊ธฐ ์ง€์—ฐ SQL ์ €์žฅ์†Œ์— SQL ๋ฌธ์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ SQL์„ ์Œ“์•„๋‘๊ณ  ํŠธ๋žœ์žญ์…˜์„ ์ปค๋ฐ‹ํ•˜๋Š” ์‹œ์ ์— ์ €์žฅ๋œ SQL ๋ฌธ๋“ค์ด flush ๋˜๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ชจ์•„์„œ ๋ณด๋‚ด๋ฉด ์„ฑ๋Šฅ์— ์ด์ ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ณ€๊ฒฝ ๊ฐ์ง€

 

JPA๋Š” 1์ฐจ ์บ์‹œ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ฒ˜์Œ ๋ถˆ๋Ÿฌ์˜จ ์—”ํ‹ฐํ‹ฐ์˜ ์Šค๋ƒ…์ƒท ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  1์ฐจ ์บ์‹œ์— ์ €์žฅ๋œ ์—”ํ‹ฐํ‹ฐ์™€ ์Šค๋ƒ…์ƒท์„ ๋น„๊ต ํ›„ ๋ณ€๊ฒฝ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด UPDATE SQL ๋ฌธ์„ ์“ฐ๊ธฐ ์ง€์—ฐ SQL ์ €์žฅ์†Œ์— ๋‹ด์•„๋‘ก๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ปค๋ฐ‹ ์‹œ์ ์— ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์ž๋™์œผ๋กœ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋”ฐ๋กœ update๋ฌธ์„ ํ˜ธ์ถœํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

 

[์ฐธ์กฐ]

1. https://www.youtube.com/watch?v=5DAW3CCZ_rU&list=WL&index=2&t=354s.

2. ์Šคํ”„๋ง ๋ถ€ํŠธ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ with jpa (์ €์ž ๋ณ€๊ตฌํ›ˆ)