ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

Spring Boot

JPA(Java Persistence API)

JxxxxH 2024. 8. 21. 20:01

๐Ÿ“ŒJPA(Java Persistence API)๋ž€?

JPA๋Š” ์ž๋ฐ” **ORM(Object Relational Mapping) ๊ธฐ์ˆ ์— ๋Œ€ํ•œ API ํ‘œ์ค€ ๋ช…์„ธ(์ฆ‰,์ธํ„ฐํŽ˜์ด์Šค)**๋ฅผ ๋œปํ•œ๋‹ค.

์œ„์—์„œ ๋งํ•˜๋Š” ORM (Object Relationship Mapping) ๊ธฐ์ˆ ์ด๋ž€?

ORM ๊ธฐ์ˆ ์€ ๋ง ๊ทธ๋Œ€๋กœ ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ๋งคํ•‘ํ•ด ์ฃผ๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

๊ฐ์ฒด๋Š” ๊ฐ์ฒด๋Œ€๋กœ, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋Œ€๋กœ ์„ค๊ณ„ํ•˜๊ณ , ORM ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ค‘๊ฐ„์—์„œ ๋งคํ•‘์„ ํ•ด์ค€๋‹ค.

๋‹ค์‹œ ์ •๋ฆฌํ•˜๋ฉด, JPA๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹Œ ORM์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ์Œ์ด๋‹ค.

์ด๋Ÿฌํ•œ JPA๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ์Œ, ๋‹จ์ˆœํ•œ ๋ช…์„ธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ˜„์ด ์—†๋‹ค. ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ์ง€ ์ •์˜ํ•˜๋Š” ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•์ผ ๋ฟ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ JPA์˜ ๊ตฌํ˜„์ฒด ์žˆ์–ด์•ผ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ๋‹ด) ๋ฐฐ๋ฏผ, ์นด์นด์˜ค, ๋„ค์ด๋ฒ„ ๋“ฑ์ด JPA๋ฅผ ์‚ฌ์šฉ์ค‘์ด๋ผ๊ณ  ํ•œ๋‹ค.

JPA ๋™์ž‘ ์›๋ฆฌ

  • ๊ฐœ๋ฐœ์ž๊ฐ€ JDBC API๋ฅผ ์ง์ ‘ ์“ฐ๋Š” ๊ฒŒ ์•„๋‹ˆ๋‹ค. JPA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ!
  • DAO→JPA(JDBC API)→DB

์žฅ์  ๋‹จ์ 

CRUD์ž‘์—… ์ƒ๋žต ⇒ ์ž๋™์œผ๋กœ SQL์„ ๋งŒ๋“ค์–ด ์ค€๋‹ค. ์–ด๋ ค์›€
์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ๊ฐ–๊ณ  ์žˆ๋‹ค. (DB ๊ฐ’๊ณผ ์ž๋ฐ” ๊ฐ’์„ ์ผ์น˜ํ•˜๊ฒŒ ํ•ด์คŒ) ๋ณต์žกํ•œ sql๋ฌธ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.
OOP .. ์—ฐ๊ด€ ๊ด€๊ณ„  

๐Ÿ“Œ Hibernate๋ž€?

Hibernate๋Š” JPA๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด์ด๋‹ค.

๊ฐœ๋ฐœ๋œ ์ง€ 10๋…„์ด ๋„˜์—ˆ์œผ๋ฉฐ ๋Œ€์ค‘์ ์œผ๋กœ ๋งŽ์ด ์ด์šฉ๋˜๋Š” JPA ๊ตฌํ˜„์ฒด ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

JPA์˜ ํ•ต์‹ฌ๋“ค์ธ EntityManagerFactory, EntityManager, EntityTransaction ๋“ฑ์„ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ํ•œ๋‹ค.

JPA๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋‹ค๋ฅธ ๊ตฌํ˜„์ฒด๋“ค๋กœ๋Š” EclipseLink๋‚˜ DataNucleus ๋“ฑ์ด ์žˆ๋‹ค.

๐Ÿ“Œ Spring Data JPA๋ž€?

Spring Data JPA๋Š” JPA๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•˜๋„๋ก ๋งŒ๋“ค์–ด๋†“์€ ๋ชจ๋“ˆ์ด๋‹ค.

Spring Data JPA๋Š” JPA๋ฅผ ํ•œ ๋‹จ๊ณ„ ๋” ์ถ”์ƒํ™”์‹œํ‚จ Repository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

์ด๋Ÿฌํ•œ Spring Data JPA๋Š” Hibernate์™€ ๊ฐ™์€ JPA๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

Spring Data JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ๋”์šฑ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

โœ๏ธ ์ •๋ฆฌ

์ •๋ฆฌํ•˜์ž๋ฉด, JPA๋Š” ์ž๋ฐ” ์ง„์˜์˜ ORM ๊ธฐ์ˆ ์— ๋Œ€ํ•œ API ํ‘œ์ค€ ๋ช…์„ธ์ด๋ฉฐ

Hibernate๋Š” JPA์˜ ๊ตฌํ˜„์ฒด์ด๊ณ , ๋‚ด๋ถ€์ ์œผ๋กœ JDBC๋ฅผ ์ด์šฉํ•œ๋‹ค.

Spring Data JPA๋Š” JPA๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ๋กœ ๋‚ด๋ถ€์ ์œผ๋กœ JPA ๊ตฌํ˜„์ฒด๋ฅผ ์ด์šฉํ•œ๋‹ค.


์ถœ์ฒ˜:

https://code-lab1.tistory.com/288

[์ฝ”๋“œ ์—ฐ๊ตฌ์†Œ:ํ‹ฐ์Šคํ† ๋ฆฌ]