๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Spring Boot

[JPA] ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ž€? ํŠน์ง• ์ •๋ฆฌ

by ์šฐ์ฃผ๋ฌผ๊ณ ๊ธฐ 2025. 5. 3.
๋ฐ˜์‘ํ˜•

 

 
JPA์™€ EntityManager ( ๋งค๋‹ˆ์ก€~)

 

JPA : ์ž๋ฐ”์—์„œ ๊ด€๊ณ„ํ˜• DB ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•œ interface

Hibernate: JPA ๊ตฌํ˜„์ฒด. (JPA๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋‹ˆ๊นŒ ๊ตฌํ˜„์ฒด ํ•„์š”) ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” JDBC API ์‚ฌ์šฉ

 

JPA ์ฃผ์š” ์ปจ์…‰

- ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €

- ์˜์†์„ฑ

 

์—”ํ‹ฐํ‹ฐ(Entity)?

DB ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๋Š” ๊ฐ์ฒด. query๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฐ์ฒด.

์ž๋ฐ” ๊ฐ์ฒด๋ž‘ ๊ฐ™์Œ. ๊ทผ๋ฐ DB์˜ ํ…Œ์ด๋ธ”์ด๋ž‘ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜๋Š” ํŠน๋ณ„ํ•œ ์• ๋ผ์„œ entity๋ผ๊ณ  ๊ตฌ๋ถ„์ง€์–ด์„œ ๋ถˆ๋Ÿฌ์ฃผ๋Š”๊ฒƒ

 

์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €(Entity Manager)?

๋ง ๊ทธ๋Œ€๋กœ ์—”ํ‹ฐํ‹ฐ ๊ด€๋ฆฌ, DB๋ž‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์ด์—์„œ ๊ฐ์ฒด ๋งŒ๋“ค๊ณ  ์ˆ˜์ •ํ•˜๊ณ  ์‚ญ์ œํ•˜๊ณ ..๋’ท๋ฐ”๋ผ์ง€ํ•จ

 

ex) ํšŒ์› 2๋ช…์ด์„œ ๋™์‹œ์— ํšŒ์›๊ฐ€์ž… ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ (=๋™์‹œ์— DB ์ ‘๊ทผํ•˜๋ ค๋Š” ๊ฒฝ์šฐ)

ํšŒ์›A์˜ ์š”์ฒญ์— ๋Œ€ํ•ด ์—”ํ‹ฐํ‹ฐ ๋ฉ”๋‹ˆ์ € ํŒฉํ† ๋ฆฌ๊ฐ€ ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ์ƒ์„ฑ, ์ด๋ฅผ ํ†ตํ•ด DB ์— ํšŒ์›์ •๋ณด ์ €์žฅ

ํšŒ์›B๋„ ๋งˆ์ฐฌ๊ฐ€์ง€.

์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € 2๊ฐœ๋Š” ํ•„์š”ํ•œ ์‹œ์ ์— DB ๋ž‘ ์—ฐ๊ฒฐํ•œ ๋’ค ์ฟผ๋ฆฌํ•จ.

 

๊ทธ๋ ‡๋‹ค๋ฉด SpringBoot์—์„œ ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ํŒฉํ† ๋ฆฌ ๋งŒ๋“ค์–ด์„œ ๊ด€๋ฆฌํ•˜๋ƒ? X!!!!

์Šคํ”„๋ง๋ถ€ํŠธ ๋‚ด๋ถ€์—์„œ ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ํŒฉํ† ๋ฆฌ 1๊ฐœ๋งŒ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•จ.

@PersistenceContext ๋˜๋Š” @Autowired ์• ๋„ˆํ…Œ์ด์…˜ ์จ์„œ ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ์‚ฌ์šฉํ•จ.

 

๊ทธ๋ฆฌ๊ณ  ์Šคํ”„๋ง๋ถ€ํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋นˆ ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค์–ด์„œ ๊ณต์œ ํ•œ๋‹ค๊ณ  ํ•จ

-> ๋‹น์—ฐํžˆ ๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ.

-> ์งญ ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ์”€ (ใ„นใ…‡ ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๋ž‘ ์—ฐ๊ฒฐํ•˜๋Š” ํ”„๋ก์‹œ)

= ํ•„์š”ํ•  ๋•Œ DB ํŠธ๋žœ์žญ์…˜์ด๋ž‘ ๊ด€๋ จ๋œ ใ„นใ…‡ ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ํ˜ธ์ถœํ•˜๋Š” ๊ฑฐ์ž„.

 


์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ž€?

 

์•คํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๋Š” ์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Œ

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋Š”, ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ€์ƒ์˜ ๊ณต๊ฐ„์ž„ (์ผ์ข…์˜ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ)

 

์˜ˆ๋ฅผ ๋“ค์–ด memberRepository.save(member)ํ•˜๊ฒŒ ๋˜๋ฉด,

Member๊ฐ์ฒด๊ฐ€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋˜๊ณ , ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๊ฐ€ ๊ด€๋ฆฌ ์‹œ์ž‘ํ•จ

-> ์•„์ง DB ์— ์ €์žฅ๋œ๊ฑฐ ์•„๋‹ˆ๋‹ค!!!!!!

ํŠธ๋žœ์žญ์…˜ ๋๋‚˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์ด ์ปจํ…์ŠคํŠธ ์•ˆ์—์„œ ๊ด€๋ฆฌ ๋‹นํ•˜๋Š”๊ฑฐ์ž„ (๋ณ€๊ฒฝ๊ฐ์ง€, ์“ฐ๊ธฐ ์ง€์—ฐ๊ฐ™์€๊ฒŒ ์ด๋•Œ ์‚ฌ์šฉ)

@Transactional๋๋‚˜๋Š” ์‹œ์ ์—!! ๋น„๋กœ์†Œ DB์— ๋ฐ˜์˜๋จ & ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ flush๋จ

 

Q. "์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— DB์—์„œ ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋”ฐ" ๋ผ๊ณ  ์ฑ…์— ๋˜์–ด์žˆ์Œ

์ด๊ฑฐ ๋ณด๊ณ  ๋จผ๋ง์ธ๊ฐ€...์‹ถ์—ˆ๋˜๊ฒŒ, ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ๋ผ๋ฉด ๋จธ๊ฐ€ ๋๋“  DB์— ์ ‘๊ทผํ•ด์•ผ๋˜๋Š”๋ฐ ๋ญ๊ฐ€ ํšจ์œจ์ ? ์ด๋Ÿฐ ์ƒ๊ฐ์ด ๋“ค์—ˆ์Œ

 

๊ทผ๋ฐ, ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ํŠน์ง• ์ค‘์—

1์ฐจ ์บ์‹œ ํŠน์ง•์ด ์žˆ์Œ.

์ด๊ฒŒ ๋จผ๋ง์ด๋ƒ๋ฉด, ๋ง๊ทธ๋Œ€๋กœ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ 1์ฐจ ์บ์‹œ ์—ญํ• ์„ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์—,

DB์—์„œ ์กฐํšŒํ•œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ด ๋‘๋Š”๊ฒƒ

 

 

Member member1 = memberRepository.findById(1L); // ์ฒ˜์Œ ์กฐํšŒ -> DB์—์„œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ด
Member member2 = memberRepository.findById(1L); // ๊ฐ™์€ ํŠธ๋žœ์žญ์…˜ ์•ˆ์—์„œ ๋˜ ์กฐํšŒ

 

์ด๋Ÿฐ ๋А๋‚Œ..

 

๊ทธ๋ ‡๋‹ค๋ฉด ๋‹น์—ฐํžˆ? DB ์ ‘๊ทผ ํšŸ์ˆ˜๊ฐ€ ๊ฐ์†Œ๋˜๋‹ˆ๊นŒ ํšจ์œจ์ ์ด๋ผ๋Š”๊ฒƒ!!!

 

----> ๊ทธ๋ ‡๋‹ค๋ฉด @Transactional ์• ๋„ˆํ…Œ์ด์…˜ ๋‚ด์—์„œ๋งŒ ์œ ์šฉํ•œ๊ฑฐ ์•„๋‹ˆ๋ƒ?

-------> ๋งž์Œ!!!!!!

 

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋Š” ํŠธ๋žœ์žญ์…˜ ๋‹จ์œ„๋กœ ๊ด€๋ฆฌ๋จ.

๋”ฐ๋ผ์„œ @Transactional๋กœ ๋ฌถ์ธ ๋ฉ”์†Œ๋“œ ์•ˆ์—์„œ๋งŒ 1์ฐจ ์บ์‹œ์˜ ํšจ๊ณผ๋ฅผ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Œ.

๋”ฐ๋ผ์„œ @Transactional ์• ๋„ˆํ…Œ์ด์…˜ ์ž˜ ์“ฐ์‹œ๊ตฌ์š”, ์•ˆ์“ฐ๋ฉด ์œ„์— ์“ด ์˜ˆ์ œ๋ฅผ ํ•  ๋•Œ DB ์ ‘๊ทผ ๋‘๋ฒˆํ•ด์•ผ๋จ.

 

 

์ด๊ฑฐ ์™ธ์— ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ํŠน์ง•

  • 1์ฐจ ์บ์‹œ : ์œ„์—์„œ ์„ค๋ช…
  • ์“ฐ๊ธฐ ์ง€์—ฐ : ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹ ์ „๊นŒ์ง€ ์ฟผ๋ฆฌ๋ฅผ ๋ชจ์•„๋†จ๋‹ค๊ฐ€ ํ•œ๋ฐฉ์— ์‹คํ–‰ํ•˜๋Š”๊ฒƒ -> DB์— ๋ถ€๋‹ด ์ค„์ผ ์ˆ˜ ์žˆ์Œ
  • ๋ณ€๊ฒฝ ๊ฐ์ง€ : ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹ํ•˜๋ฉด, 1์ฐจ ์บ์‹œ์— ์ €์žฅ๋ผ์žˆ๋˜ entity๋ž‘ ํ˜„์žฌ entity ๋น„๊ต, ๋ณ€๊ฒฝ์‚ฌํ•ญ ์•Œ์•„์„œ ๊ฐ์ง€ํ•ด์„œ DB์— ์ž๋™ ๋ฐ˜์˜.
  • ์ง€์—ฐ ๋กœ๋”ฉ : ์ฟผ๋ฆฌ๋กœ ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ ๋ฐ”๋กœ ๋กœ๋”ฉํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ํ•„์š”ํ• ๋•Œ ์ฟผ๋ฆฌ ๋‚ ๋ ค์„œ ์กฐํšŒํ•˜๋Š”๊ฒƒ.

 

-> ์ „๋ถ€ DB ์ ‘๊ทผ ์ตœ์†Œํ™”๋ฅผ ์œ„ํ•œ ํŠน์ง•์ž„.

 

๋ฐ˜์‘ํ˜•