JPA ๊ตฌ์กฐ๋Š” ์–ด๋–ป๊ฒŒ ๋˜์–ด์žˆ๊ณ  spring-data-jpa์™€๋Š” ๋ญ๊ฐ€ ๋‹ค๋ฅผ๊นŒ?

2022. 1. 6. 00:06ใ†๐ŸŒฑ Develop/Server

 

JPA๋Š” Java Persistence API๋กœ, ์ž๋ฐ” ๊ฐ์ฒด์™€ DB๋ฅผ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ž๋ฐ” ORM ๊ธฐ์ˆ ์˜ ํ‘œ์ค€ ๋ช…์„ธ์ž…๋‹ˆ๋‹ค.

 

SQL Mapper ORM
sql๊ณผ ๊ฐ์ฒด๋ฅผ ๋งคํ•‘ DB์™€ ๊ฐ์ฒด๋ฅผ ๋งคํ•‘
mybatis, jdbcTemplate ๋“ฑ hibernate,  EclipseLink ๋“ฑ

 

 ๊ฐœ์ธ์ ์œผ๋กœ mybatis๋ฅผ ์ผ์„ ๋•Œ๋Š” ๋ณต์žกํ•œ sql๋ฌธ์ด ํ•„์š”ํ•  ๋•Œ๋Š” ๋น„๊ต์  ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ DB๋ฅผ ์ค‘๊ฐ„์— ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ต๊ณ , ๊ธฐํš ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ƒ๊ธธ ๋•Œ๋งˆ๋‹ค sql๋ฌธ์„ ์ผ์ผ์ด ์ˆ˜์ •ํ•ด์ค˜์•ผํ•˜๋Š” ๋ฐ˜๋ณต ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ CRUD๋ฅผ ํ•˜๋ฃจ์ข…์ผ ์งœ๊ณ  ์žˆ๋Š” ๊ฐœ๋ฐœ์—์„œ ๋ฒ—์–ด๋‚˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•˜๊ธฐ ์œ„ํ•ด ORM ์— ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

โ“ORM์ด๋ž€

  • ๊ฐ์ฒด๋Š” ๊ฐ์ฒด๋Œ€๋กœ, DB๋Š” DB๋Œ€๋กœ ์„ค๊ณ„ํ•˜๊ณ  ๊ทธ ์‚ฌ์ด๋ฅผ ๋งคํ•‘
  • sql ๋ฌธ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์คŒ
  • ๊ฐ์ฒด๋ฅผ ORM ํ”„๋ ˆ์ž„์›Œํฌ์— ์ €์žฅํ•˜๋ฉด, ORM ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ SQL์„ ์ƒ์„ฑํ•ด์„œ ๊ฐ์ฒด๋ฅผ DB์— ๊ด€๋ฆฌ

 

 

 

๐Ÿ” JPA ๋‚ด๋ถ€๋Š” ์–ด๋–ป๊ฒŒ ๋˜์–ด์žˆ๋‚˜ - ๊ธฐ๋ณธํŽธ

JPA๋Š” DB์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž๋ฐ”์—์„œ ์ œ๊ณตํ•˜๋Š” API์ธ JDBC์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์ด์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด JPA ๋‚ด๋ถ€์—์„œ JDBC API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SQL์„ ํ˜ธ์ถœํ•˜๊ณ  DB์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค.

JPA ๋‚ด๋ถ€๊ตฌ์กฐ

 

 

โœ… ์กฐํšŒํ•˜๋Š” ๊ณผ์ •์„ ์ƒ๊ฐํ•ด๋ณด์ž

์˜ˆ๋ฅผ ๋“ค์–ด JPA๋ฅผ ํ†ตํ•ด์„œ DB ์ •๋ณด๋ฅผ ์กฐํšŒํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

findById()๋ฅผ ๋˜์ง€๋ฉด JPA์—์„œ๋Š” ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ ๊นŒ์š”?

 

  • ํ•ด๋‹น select sql๋ฌธ์„ ์ƒ์„ฑํ•˜๊ณ 
  • JDBC API๋ฅผ ๊ฑฐ์ณ DB์— ์ „๋‹ฌ
  • ๊ฒฐ๊ณผ๋ฅผ result ๊ฐ์ฒด์— ๋งคํ•‘

 

๊ฐ„๋‹จํ•˜๊ฒŒ ์ด๋ ‡๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ถ”ํ›„์— ๋‹ค๋ฃฐ ๋‚ด์šฉ์ด์ง€๋งŒ, ์ข€ ๋” ์„ธ๋ถ€์ ์œผ๋กœ ๋“ค์–ด๊ฐ€๋ฉด ์ด๋Ÿฌํ•œ ์˜๋ฌธ์ ์ด ์ƒ๊น๋‹ˆ๋‹ค. ์–ด๋ผ…๊ทธ๋Ÿฌ๋ฉด ๋งค๋ฒˆ ์ด๋ ‡๊ฒŒ ์กฐํšŒํ•˜๋Š”๊ฑด๊ฐ€..! JPA๋Š” ๊ฐ™์€ ๋‚ด์šฉ์„ ์กฐํšŒํ•  ๋•Œ๋งˆ๋‹ค select sql ๋ฌธ์„ ๋งŒ๋“ค์–ด์„œ ์กฐํšŒํ•˜๋Š”๊ฑธ๊นŒ์š”?

 

 

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด ์•„๋‹™๋‹ˆ๋‹ค. 

JPA๋Š” EntityManager์ด๋ž€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ, EntityManager์€ ์—ฌ๊ธฐ์„œ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ๋‚ด๋ถ€์— ๋‘์–ด DB์— ๊ฐ€๊ธฐ์ „์— ์ด ๊ฐ’์ด ์กฐํšŒ๋œ ๊ฐ’์ธ์ง€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ ๊ฐ’์ด ์žˆ์œผ๋ฉด DB๊นŒ์ง€ ๊ฐ€์ง€ ์•Š๊ณ  object๋ฅผ ๋ฐ”๋กœ ๋ฆฌํ„ดํ•˜๊ณ , ์—†์œผ๋ฉด DB์—์„œ ์ฐพ์€ ๋’ค ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅํ•˜๊ณ  ๊ทธ ๊ฐ’์„ ๋‹ค์‹œ ๋ฆฌํ„ดํ•ด์ค๋‹ˆ๋‹ค.

 

 

์—ฌ๊ธฐ์„œ ๋ˆˆ์— ๋„๋Š” ๊ฒƒ์ด 1์ฐจ ์บ์‹ฑ์ด๋ผ๋Š” ๊ฐœ๋…์ธ๋ฐ, ์ด๊ฒƒ์€ 2ํƒ„์—์„œ JPA ํŠน์„ฑ๊ณผ ํ•จ๊ป˜ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๐Ÿค” Hibernate์™€ spring-data-jpa๋Š” ์–ด๋–ค ๊ฑฐ์ฃ ?

 

JPA๋ฅผ ๊ณต๋ถ€ํ•˜๊ณ  ์“ฐ๋‹ค๋ณด๋ฉด hibernate์™€ spring-data-jpa๊ฐ€ ๊ฐ๊ฐ ์–ด๋–ค ๊ฒƒ์ธ์ง€ ํ—ท๊ฐˆ๋ฆด ๋•Œ๊ฐ€ ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธฐํšŒ์— ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

  • JPA๋Š” ์•ž์„œ ๋งํ–ˆ๋“ฏ์ด ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์ฆ‰, DB๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ์ •์˜ํ•œ ๋ช…์„ธ์˜ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋”ฐ๋ผ์„œ hibernate์™€ ๊ฐ™์€ ๊ตฌํ˜„์ฒด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • hibernate๋Š” javax.persistence.EntityManager๊ณผ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. JPA์™€ Hibernate๋Š” ๋งˆ์น˜ ์ž๋ฐ”์˜ interface์™€ ํ•ด๋‹น interface๋ฅผ ๊ตฌํ˜„ํ•œ class์™€ ๊ฐ™์€ ๊ด€๊ณ„๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • spring-data-jpa๋Š” ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๊ฐœ๋ฐœ์ž๊ฐ€ JPA๋ฅผ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋ž˜์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ Repository์—์„œ findId()๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋งŒ ๊ฐ€์ ธ๋‹ค ์จ๋„ ์Šคํ”„๋ง์ด ์ ํ•ฉํ•œ ๊ตฌํ˜„์ฒด๋ฅผ ๋งŒ๋“ค์–ด bean์œผ๋กœ ๋“ฑ๋กํ•ด์ค๋‹ˆ๋‹ค.
 
 
 
 
 

์ฐธ๊ณ ๋ฌธํ—Œ

https://jar100.tistory.com/25

https://dreaming-soohyun.tistory.com/entry/JPA%EC%99%80-MyBatis%EC%9D%98-%EC%B0%A8%EC%9D%B4-ORM%EA%B3%BC-SQL-Mapper

https://velog.io/@adam2/JPA%EB%8A%94-%EB%8F%84%EB%8D%B0%EC%B2%B4-%EB%AD%98%EA%B9%8C-orm-%EC%98%81%EC%86%8D%EC%84%B1-hibernate-spring-data-jpa#ormobject-relation-mapping%EA%B0%9D%EC%B2%B4-%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91

https://gmlwjd9405.github.io/2019/08/04/what-is-jpa.html

https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/ โœ…

https://joont92.github.io/jpa/%EC%98%81%EC%86%8D%EC%84%B1-%EA%B4%80%EB%A6%AC/