๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Study/Java

[TIL] Spring Data JPA

by hong- 2022. 7. 12.

๐Ÿ™Œ๐Ÿป Spring Data JPA

 - ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•œ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ์ˆ˜์ •, ์กฐํšŒ, ์‚ญ์ œ๋ฅผ ์ข€ ๋” ์‰ฝ๊ฒŒ ํ•จ

 - Spring Data ํŒจ๋ฐ€๋ฆฌ ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜๋กœ์จ JPA ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ธฐ์ˆ ์„ ์ข€ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ์‹œ๊ฐ„ ๋‹จ์ถ•


๐Ÿ“JPA vs Hibernate ORM vs Spring Data JPA

  โ–ช๏ธ JPA : ๊ธฐ์ˆ  ๋ช…์„ธ

  - Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ •ํ•ด ๋†“์€ ํ‘œ์ค€ ์ŠคํŽ™

  - ORM ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ชจ์Œ

   → ์ด ๊ธฐ์ˆ ์€ ๋ฌด์—‡์ด๊ณ  ์ด ๊ธฐ์ˆ ์€ ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋ผ ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ

(1) ๋ฐ˜๋ณต์ ์ธ CRUD SQL ์ฒ˜๋ฆฌ
 - JPA๊ฐ€ ์ œ๊ณตํ•˜๋Š” API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด๋ฅผ DB์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•  ๋•Œ ์ง์ ‘ SQL ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋จ
 - ๊ด€๊ณ„ ๋งคํ•‘์ด ์–ด๋ ต๊ฑฐ๋‚˜ ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ์ด์Šˆ ์šฐ๋ ค๊ฐ€ ์žˆ๋‹ค๋ฉด SQL ์ง์ ‘ ์ž‘์„ฑ ๊ฐ€๋Šฅ
(2) ๊ฐ์ฒด ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ
 - ์ƒ์‚ฐ์„ฑ์ด ์ข‹์•„์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜ ์ˆ˜์›”
(3) ํŒจ๋Ÿฌ๋‹ค์ž„ ๋ถˆ์ผ์น˜, SQL ์˜์กด์„ฑ ๋“ฑ ํ•ด๊ฒฐ

  โ–ช๏ธ ORM (Object-Relational Mapping) : ๊ฐ์ฒด ๊ด€๊ณ„ ๋งคํ•‘

  - ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• DB๋ฅผ ๋งคํ•‘

  - ๊ฐ์ฒด๋Š” ๊ฐ์ฒด๋Œ€๋กœ ์„ค๊ณ„ํ•˜๊ณ  ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Œ€๋กœ ์„ค๊ณ„

    → ORM ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ค‘๊ฐ„์—์„œ ๋งคํ•‘ํ•ด์คŒ

  โ–ช๏ธ Hibernate ORM : JPA์˜ ๊ตฌํ˜„์ฒด

  - JPA๋ผ๋Š” ํ‘œ์ค€ ์ŠคํŽ™์„ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด

  - ORM ํ”„๋ ˆ์ž„ ์›Œํฌ ์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์„ฑ์ˆ™ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ

  - ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๊ด€๊ณ„ํ˜• DB๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๊ฐ์ฒด ์ง€ํ–ฅ ๊ฐœ๋ฐœ์— ์ง‘์ค‘ ๊ฐ€๋Šฅ

  โ–ช๏ธ Spring Data JPA : JPA๋ฅผ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“ˆ

  : JPA ์ŠคํŽ™์„ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด์˜ API(์ผ๋ฐ˜์ ์œผ๋กœ Hibernate ORM)์„ ์กฐ๊ธˆ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“ˆ


๐Ÿ“Spring Data JDBC  →  Spring Data JPA๋กœ 

โ‘  ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋ฅผ Spring Data JPA์— ๋งž๊ฒŒ ์ˆ˜์ •

  - JDBC์—์„œ ์‚ฌ์šฉํ•œ ์• ๋„ˆํ…Œ์ด์…˜ ์ œ๊ฑฐํ•˜๊ณ  JPA์— ๋งž๋Š” ์• ๋„ˆํ…Œ์ด์…˜ ์ถ”๊ฐ€

โ‘ก Repository ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

โ‘ข Service ํด๋ž˜์Šค ๊ตฌํ˜„

โ‘ฃ ๊ธฐํƒ€ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋กœ ์ธํ•ด ์ˆ˜์ • ๋ฐ ์ถ”๊ฐ€๋œ ์ฝ”๋“œ


๐Ÿ”น JPQL์„ ํ†ตํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ์ฟผ๋ฆฌ 

 - JPQL์ด๋ผ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด ํ…Œ์ด๋ธ” ์กฐํšŒ ๊ฐ€๋Šฅ

 - JPQL์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์„ ๋Œ€์ƒ์œผ๋กœ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์กฐํšŒ

     → JPA๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ JPQL์„ ๋ถ„์„ํ•ด์„œ ์ ์ ˆํ•œ SQL์„ ๋งŒ๋“  ํ›„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐํšŒ

          → ์กฐํšŒํ•œ ๊ฒฐ๊ณผ๋ฅผ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•œ ๋’ค ๋ฐ˜ํ™˜

* SQL ์ฟผ๋ฆฌ ๋ฌธ
 : SELECT * FROM COFFEE WHERE coffee_id = :coffeeId
                 ํ…Œ์ด๋ธ”๋ช…
          * : ๋ชจ๋“  ํ•„๋“œ ์กฐํšŒ

* JPQL ์ฟผ๋ฆฌ๋ฌธ
 : SELECT c FROM Coffee c WHERE c.coffeeId = coffeeId
               ์—”ํ‹ฐํ‹ฐํด๋ž˜์Šค๋ช…
          c : Coffee๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋ณ„์นญ์ด์ž ๋ชจ๋“  ํ•„๋“œ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Œ
   SELCET c๋Š” ์ƒ๋žต ํ•  ์ˆ˜๋„ ์žˆ์Œ !

๐Ÿ”น ๋„ค์ดํ‹ฐ๋ธŒ SQL์„ ํ†ตํ•œ ์กฐํšŒ

 - JPA์—์„œ๋„ SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

 - nativeQuery ์• ํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์„ true๋กœ ์„ค์ •ํ•˜๋ฉด SQL ์ฟผ๋ฆฌ๋„ ์ ์šฉ๋จ

 

'Study > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TIL] ๋‹จ์œ„ํ…Œ์ŠคํŠธ  (0) 2022.07.12
[TIL] ํŠธ๋žœ์žญ์…˜  (0) 2022.07.12
[TIL] JPA ๋งคํ•‘  (0) 2022.07.05
[TIL] JPA  (0) 2022.07.05
[TIL] Spring Data JDBC ๊ตฌํ˜„  (0) 2022.07.04