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๋ฅผ ํตํด์ 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://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/