Dev-Kyuu
Published 2022. 11. 28. 10:02
Spring | JPA ? ๐ŸŒฝ Spring

 

๐Ÿง‘๐Ÿป‍๐Ÿ’ป 1. JPA?

 

  • ์˜ค๋Š˜์˜ ํ‚ค์›Œ๋“œ JPA๋Š” Java Persistence API์˜ ์ค„์ž„๋ง๋กœ "์ž๋ฐ” ์ง„์˜์˜ ORM ํ‘œ์ค€ ๊ธฐ์ˆ "์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • Java ๊ฐ์ฒด์˜ ์˜์†์„ฑ์„ ์œ„ํ•œ ์ž๋ฐ”์˜ ํ‘œ์ค€ํ™”๋œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋งํ•˜๋Š” ๊ฒƒ
  • ๊ทธ๋Ÿผ ๋˜ ORM์€ ๋ญ๋ƒ๋ฉด Object-relationla Mapping ์œผ๋กœ ๊ฐ์ฒด๋ž‘ ๊ด€๊ณ„ํ˜• DB๋ฅผ ๋งคํ•‘ํ•ด์ฃผ๋Š” ํ”„๋ ˆ์ž„ ์›Œํฌ๋‹ค
  • ๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ ๋˜ ๊ด€๊ณ„ํ˜• DB๋ž€ ?
    - 2์ฐจ์› ํ…Œ์ด๋ธ”(Table) ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ, ํ‚ค์™€ ๊ฐ’์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    - ์ข…์†์„ฑ์„ ๊ด€๊ณ„๋กœ ํ‘œํ˜„ํ•˜๋Š”๊ฒƒ์ด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠน์ง•์ž„
    - ํ˜„์žฌ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” Oracle, MySQL, SQL Server๋“ฑ์ด ๋‹ค ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ชจ๋ธ

 

๐Ÿ” 2. ๊ทธ๋Ÿผ JPA๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ?

์š”์ฆ˜ ์ƒˆ๋กœ ๋ฐฐ์šฐ๋Š” ๊ฐœ๋…์—์„œ์„ ๋งŒ๋‚ฌ์„๋–„ ๋‚ด ๋ฃจํ‹ด์€ ์ด๊ฒŒ ๋ญ”๋ฐ ๐Ÿ‘‰ ์ด๊ฑฐ ์™œ ์“ฐ๋Š”๊ฑด๋ฐ๋กœ ์ด์–ด์ง„๋‹ค 

๋ฃจํ‹ด์— ๋งž์ถฐ์„œ .. JPA๋ฅผ ์™œ ์‚ฌ์šฉํ•˜๋ƒ๋ฉด !


1๏ธโƒฃ  ์ฟผ๋ฆฌ๋ฌธ ์‚ฌ์šฉ ์—†์ด ์ž๋ฐ”์ฝ”๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ฑด๋“œ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ


Presistence Framwork(์˜์†์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ)๋Š” ํฌ๊ฒŒ SQL Mapper ์™€ ORM์œผ๋กœ ๋‚˜๋‰˜๋Š”๋ฐ,
ORM์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด๋ฅผ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•จ์œผ๋กœ์จ ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ SQL์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๊ณ  
SQL Mapper๋Š” SQL์„ ๋ช…์‹œํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

SQL ๋ฌธ์žฅ์œผ๋กœ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ฃจ๋Š” SQL Mapper( ex. MyBatis, jdbcTemplates)๊ฐ€ ์žˆ๊ณ ,

๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ฃจ๋Š” Presistence API(ex. JPA, Hibrenate)๊ฐ€ ์žˆ๋Š”๊ฒƒ์ž„ 

 

2๏ธโƒฃ ํ†ต์ผ๋œ ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ์šฉ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ 

 

PostgreSQL์„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ์–ด๋– ํ•œ ์ด์œ ๋กœ Mysql์„ ์‚ฌ์šฉํ•ด์•ผํ• ๋•Œ ์„œ๋กœ ๋‹ค๋ฅธ ์ฟผ๋ฆฌ ๋ฌธ๋ฒ•์œผ๋กœ ์ด๋™ ์ž์ฒด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ

JPA๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์ฒด๊ณ„์— ์–ฝ๋งค์ด์ง€ ์•Š๊ณ , ์˜์†์„ฑ์„ ๊ตฌํ˜„ํ•จ

(ex. ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค์—์„  DBMS๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒํ˜•ํƒœ๋‚˜ SQL๋ฐฉ์–ธ์„ ์†์ˆ˜ ๋ฐ˜์˜ํ•ด์ฃผ์–ด์•ผํ•จ)

 

3๏ธโƒฃ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์ƒ์†์„ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์ ์šฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์คŒ 

 

Java์–ธ์–ด๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋กœ ์›์‹œํƒ€์ž…์„ ์ œ์™ธํ•œ ๋ชจ๋“ ๊ฒƒ์ด ๊ฐ์ฒด์ด์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” SQL์ด๋ผ๋Š” ํŠน์ˆ˜ํ•œ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ

์ƒ์†/๋‹คํ˜•์„ฑ ๊ฐ™์€ ๊ฐœ๋…์ด ์—†๊ธฐ๋–„๋ฌธ์— ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ง€ํ–ฅํ•˜๋Š” ์ ์ด ๋‹ฌ๋ผ์„œ ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŽ˜๋Ÿฌ๋‹ค์ž„ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

์ž๋ฐ”์–ธ์–ด๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์กฐํ™” ๋˜์–ด์žˆ๊ธฐ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ 

๊ทผ๋ฐ JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ณ€๊ฒฝ์„ ์ฃผ๊ณ ์ž ํ• ๋•Œ ์ผ์ผํžˆ sql์„ ์ˆ˜์ •ํ•˜์ง€์•Š๊ณ  JPA ๊ฐ์ฒด๋งŒ ๋ฐ”๊พธ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง


๐Ÿ”Ž ORM๊ณผ ์˜์†์„ฑ์„ ์กฐ๊ธˆ ๋” ์•Œ์•„๋ณด์ž

 

๊ฐ์ฒด๊ด€๊ณ„ํ˜•๋งคํ•‘(ORM)์€, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ„์— ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋ฒ•

  • ORM์€ ๋ณ€ํ™˜ ๊ณผ์ • ์ค‘ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋‚ด์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์ƒ ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • SQL์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ, SQL์ฒ˜๋Ÿผ ์ ˆ์ฐจ์ ์ธ ์ฝ”๋“œ ๋Œ€์‹  ๊ฐ์ฒด ์ง€ํ–ฅ ์ ์ธ ์ฝ”๋“œ๋กœ ์ž‘๋™ํ•ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ ํ•˜๋„๋ก ํ•ด์คŒ
  • ORM์€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์žฌํ™œ์šฉ ํ•  ์ˆ˜ ์žˆ์–ด ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’๊ณ , ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํŽธ๋ฆฌํ•˜๋‹ค.

 

์˜์†์„ฑ(Persistence)๋ž€, ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•ด์„œ ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ / ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ™์€ ์˜๊ตฌ์ €์žฅ์†Œ์— ์ €์žฅ๋ ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋œปํ•จ.

  • Java ๊ฐ์ฒด์˜ ์˜์†์„ฑ์„ ์œ„ํ•œ๊ฒƒ์ด๋ผ๋Š” ๋ง์€ Java ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์˜์†ํ™” ํ•œ๋‹ค๋Š”๊ฒƒ์ด๊ณ , ๊ทธ ๋ฐฉ์‹์œผ๋กœ ORM์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด๋‹ค

 

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

- ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €์˜ ์ถ”์ƒํ™”๋œ ๊ณต๊ฐ„์„ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ผ๊ณ  ํ•จ

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ™์€ ์˜๊ตฌ ์ €์žฅ์†Œ์— Entity(์ž๋ฐ” ๊ฐ์ฒด)๋ฅผ CRUDํ•˜๊ธฐ ์ „์— ์ €์žฅํ•˜๋Š” ํ™˜๊ฒฝ์„ ๋œปํ•œ๋‹ค.

 

 

 

 

profile

Dev-Kyuu

@kyuu_ng

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!