JPA / Spring Data JPA

niireymikยท2024๋…„ 2์›” 15์ผ
๐Ÿ’ก ์ง์ „์— ORM์˜ ๊ฐœ๋…์— ๊ด€ํ•ด ๋‹ค๋ฃจ์—ˆ๋‹ค. Object-Relational Mapping์˜ ์•ฝ์ž์ธ ORM์€ ๋ง ๊ทธ๋Œ€๋กœ ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜•DB๋ฅผ ์ž๋™ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•˜๋Š”๋ฐ, ๋Œ€ํ‘œ์ ์ธ ORM์œผ๋กœ๋Š” JPA๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” JPA๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋จผ์ € ์•Œ์•„๋ณด๊ณ , Spring Data JPA๊ฐ€ ๋ฌด์—‡์ธ์ง€๋„ ์•Œ์•„๋ณด์ž!

๐Ÿ“Œ JPA

: Java Persistence API์˜ ์•ฝ์ž๋กœ, Java ์ง„์˜์—์„œ ORM ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ์Œ์ด๋‹ค. (์ „์— ๋‹ค๋ฃฌ ORM ๊ฐœ๋…) ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

์—ฌ๊ธฐ์„œ ์ฃผ๋ชฉํ•  ๋ถ€๋ถ„์€ JPA๋Š” ํŠน์ • ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹Œ ์ธํ„ฐํŽ˜์ด์Šค๋ผ๋Š” ์ ์ด๋‹ค. ์ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด Hibernate, OpenJPA ๋“ฑ์ด JPA๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

โ†’ ์‰ฝ๊ฒŒ ๋งํ•ด, JPA๋Š” ๋‹จ์ง€ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ํ•œ ๋ฐฉ๋ฒ•์ผ ๋ฟ์ด๋ฉฐ ๋‹จ์ˆœํ•œ ๋ช…์„ธ์ด๊ธฐ์— ๊ตฌํ˜„์€ ์—†๊ณ , ๋‹ค์–‘ํ•œ ORM ํ”„๋ ˆ์ž„์›Œํฌ(์˜ˆ: Hibernate, EclipseLink, OpenJPA ๋“ฑ)์—์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณตํ†ต API๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค. (JPA๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” JPA๋ฅผ ๊ตฌํ˜„ํ•œ ORM ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.)

JPA๋Š” ์ธํ„ฐํŽ˜์ด์Šค, Hibernate๋Š” JPA์˜ ๊ตฌํ˜„์ฒด, Spring Data JPA๋Š” JPA๋ฅผ ์“ฐ๊ธฐ ํŽธํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋†“์€ ๋ชจ๋“ˆ!
JDBC์˜ ๊ตฌํ˜„์ฒด๊ฐ€ Hibernate. Hibernate๋ฅผ ๋‹ค์‹œ ์ถ”์ƒํ™”ํ•œ ๊ฒŒ JPA. JPA๋ฅผ ํ•œ ๋ฒˆ ๋” ์‹ฌํ”Œํ•˜๊ฒŒ ์ถ”์ƒํ™”ํ•œ ๊ฒŒ Spring Data JPA


JPA์˜ ์žฅ์ 

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


๐Ÿ“Œ Spring Data JPA

: ์ด๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ํ•œ ๋ฌธ์žฅ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

Spring Data JPA๋Š” JPA ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ๋ณด๋‹ค ๊ฐ„ํŽธํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

Spring์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋ฉฐ DB์— ์ ‘๊ทผํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์—๋Š” Repository๋ฅผ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. JPA๋ฅผ ํ•œ ๋‹จ๊ณ„ ์ถ”์ƒํ™”์‹œํ‚จ ์ด Repository๊ฐ€ Spring Data JPA์˜ ํ•ต์‹ฌ์ด๋‹ค.

Spring Data JPA๋Š” Spring์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ ์ค‘ ํ•˜๋‚˜๋กœ, JPA ์œ„์— ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด JPA ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ๋ณด๋‹ค ๊ฐ„ํŽธํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ค€๋‹ค. CRUD ์—ฐ์‚ฐ, ํŽ˜์ด์ง•, ์ •๋ ฌ๊ณผ ๊ฐ™์€ JPA ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ ์–‘์„ ์ค„์ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.


Spring data JPA ์—†์ด JPA๋งŒ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด...

: JPA๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” EntityManager๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๋ฐ˜๋ฉด์— Spring Data JPA๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” Repository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ EntityManager ๋Œ€์‹ ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. CRUD (์ƒ์„ฑ, ์ฝ๊ธฐ, ๊ฐฑ์‹  ๋ฐ ์‚ญ์ œ) ์ž‘์—…๊ณผ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.



โ„๏ธ ์ •๋ฆฌ - JPA / Hibernate / Spring Data JPA

๋‹ค์Œ์€ ์…‹์˜ ์ „๋ฐ˜์ ์ธ ๊ฐœ๋…์„ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

์ด์ฒ˜๋Ÿผ, ์…‹์€ ๋น„์Šทํ•œ ์˜์—ญ์— ์œ„์น˜ํ•ด ์žˆ์œผ๋‚˜ ๊ทธ ์—ญํ• ์ด ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ์…‹์„ ํ˜ผ๋™ํ•˜์ง€ ์•Š๋„๋ก ์œ ์˜ํ•˜์ž.



๐ŸŒˆ ์š”์•ฝํ•˜์ž๋ฉด, JPA๋Š” Java์—์„œ ๊ฐ์ฒด-๊ด€๊ณ„ ๋งคํ•‘(ORM)์„ ์œ„ํ•œ ํ‘œ์ค€ ๋ช…์„ธ์ธ '์ธํ„ฐํŽ˜์ด์Šค'์ด๋ฉฐ Spring Data JPA๋Š” JPA๋ฅผ ๋” ์‰ฝ๊ฒŒ ํ™œ์šฉํ•˜๋„๋ก ๋งŒ๋“ค์–ด๋‘” ๋ชจ๋“ˆ์ด๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€