[Spring] JPA, ORM
JPA(Java Persistence API)
- Java ์ง์์์ ORM(Object-Relational Mapping) ๊ธฐ์ ํ์ค์ผ๋ก ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค ๋ชจ์
- ์ธํฐํ์ด์ค ์ด๊ธฐ ๋๋ฌธ์ Hibernate, OpenJPA ๋ฑ์ด JPA๋ฅผ ๊ตฌํํจ
ORM(Object-Relational Mapping)
- Object Relational Mapping = ๊ฐ์ฒด-๊ด๊ณ ๋งคํ
- ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋งคํ(์ฐ๊ฒฐ)
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐจ์ด๋ก ๋ฐ์ํ๋ ์ ์ฝ์ฌํญ์ ํด๊ฒฐํด์ฃผ๋ ์ญํ ์ ์ํ
- persistent API๋ผ๊ณ ๋ ํ ์ ์๋ค.
์์ ์ฌ์ง์ ๋ณด๋ฉด ๋ฉค๋ฒ ํ ์ด๋ธ์ ๋ค์์ ๋ฉค๋ฒ ๊ฐ์ฒด์ ๋ค์ ํ๋์ ๋งคํ๋๋ฉด ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋๋ฐ ์ด๋ ๊ฒ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ๊ฒ์ ORM์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ณ , ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ ์ด๋ธ์ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ฒด ๋ชจ๋ธ๊ณผ ๊ด๊ณํ ๋ชจ๋ธ ๊ฐ์ ๋ถ์ผ์น๊ฐ ์กด์ฌํ์ง๋ง ์ปดํจํฐ๋ ORM์ ํตํด ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ฐํ์ผ๋ก SQL์ ์๋์ผ๋ก ์์ฑํ์ฌ ๋ถ์ผ์น๋ฅผ ํด๊ฒฐํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ์ดํฐ <—๋งคํ—> Object ํ๋ ํ์ฌ ๊ฐ์ฒด๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๊ฒ ๋ฉ๋๋ค. ORM์ด ์๋ค๋ฉด select ์ฟผ๋ฆฌ๋ฅผ ํตํด ๋ฐ์ ๊ฒฐ๊ณผ๊ฐ๋ค์ ์ผ์ผ์ด ์ด๋ค ์ ๋ณด์ธ์ง ๋งคํํด์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
ORM ์ฅ์
- SQL ์ฟผ๋ฆฌ๊ฐ ์๋ ์ง๊ด์ ์ธ ์ฝ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ ์ ์๋ค.(๋ง ๊ทธ๋๋ก ์ฟผ๋ฆฌ๋ฅผ ์ง์ง ์์์)
- ๊ฐ๋ฐ์๊ฐ ๋ณด๋ค ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์์.
- ์ฌ์ฌ์ฉ ๋ฐ ์ ์ง๋ณด์๊ฐ ํธ๋ฆฌ
- ORM์ ๋ ๋ฆฝ์ ์ผ๋ก ์์ฑ๋์ด ์์ด ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅ (ORM์์ฒด๊ฐ ํ๋์ ํด๋์ค๋ก ์์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ ์ด๊ฑธ ๋ค๋ฅธ ๋ฐ์ ๊ฐ์ ธ๋ค ์ธ ์ ์์ต๋๋ค.)
- ๋งคํ ์ ๋ณด๋ฅผ ๋ช ํํ๊ฒ ์ค๊ณํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณผ ํ์๊ฐ ์์
- DBMS์ ๋ํ ์ข
์์ฑ์ด ์ค์ด๋ฆ
- DBMS๋ฅผ ๊ต์ฒดํ๋ ์์ ์ ๋น๊ต์ ์ ์ ๋ฆฌ์คํฌ๋ก ์ํ ๊ฐ๋ฅ
โORM์ด ์ ์ฒด์ ์ธ ๊ฐ๋ ์ด๋ผ๋ฉด JPA๋ ๊ทธ ๊ธฐ๋ฅ์ ๊ตฌ์ฒด์ ์ผ๋ก ์ ์ํ ๊ธฐ์ ์ ๋๋ค. ์ฆ, ORM(Object Relational Mapping)์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ง์์ ์ผ๋ก ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ API๋ฅผ ์๋ฏธํฉ๋๋ค.
JPA Provider
๊ฐ๋ฐ์๋ค์ Relational Object๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์ฐ๋ ๋ฒ๊ฑฐ๋ก์์ ๊ฐ์ํ๊ณ ์, JPA Provider ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ค.
JPA Provider๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค ๊ฐ ์ํธ๊ด๊ณ๋ฅผ ์ฝ๊ฒ ์ฒ๋ฆฌํด์ค๋๋ค.
- Hibernate
- ORM framework ์ค ํ๋
- JPA์ ์ค์ ๊ตฌํ์ฒด ์ค ํ๋์ด๋ฉฐ, ํ์ฌ JPA ๊ตฌํ์ฒด ์ค ๋ง์ด ์ฌ์ฉ๋จ
- JPA ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ฉฐ, ๋ด๋ถ์ ์ผ๋ก JDBC API๋ฅผ ์ฌ์ฉ
Spring Data JPA
- ์คํ๋ง ํ๋ ์์ํฌ์์ JPA๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- CRUD ์ฒ๋ฆฌ์ฉ ์ธํฐํ์ด์ค ์ ๊ณตํ๋ค.
- Repository ๊ฐ๋ฐ ์ ์ธํฐํ์ด์ค๋ง ์์ฑํ๋ฉด ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๋์ ์ผ๋ก ์์ฑํด์ ์ฃผ์ ํ๋ค.
- ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต ๊ฐ๋ฐ ์ ์ธํฐํ์ด์ค๋ง ์์ฑํด๋ ๋๋ค
- Hibernate์์ ์์ฃผ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ ์กฐ๊ธ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ๊ตฌํํ๋ค.
JPA๋ฅผ ๊ตฌ์ฒดํํ ๊ฒ Hibernate์ด๊ณ ์ด hibernate๊ธฐ๋ฅ ์ค ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ ์ข ๋ ์ฝ๊ณ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ๋ ์ง์ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ spring data JPA์ ๋๋ค. ์ฐ๋ฆฌ๋ spring data JPA๋ฅผ ์ฌ์ฉํ์ฌ ์ํฐํฐ์ ์ง์ ์ ๊ทผํ์ง ์์๋ ๋ฐ์ดํฐ์ ์ ๊ทผ์ ์ข ๋ ์ฝ๊ณ ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
JPA/Hibernate์ ์ฅ์
- ์์ฐ์ฑ
- SQL์ ์ง์ ์์ฑํ์ง ์๊ณ ๋ฉ์๋ ํธ์ถ๋ง์ผ๋ก ์ฟผ๋ฆฌ๊ฐ ์ํ๊ฐ๋ฅํฉ๋๋ค. ์ฆ, SQL ๋ฐ๋ณต ์์ ์ ํ์ง ์์ผ๋ฏ๋ก ์์ฐ์ฑ์ด ๋งค์ฐ ๋์์ง๋๋ค.
- ์ ์ง๋ณด์
- ํ ์ด๋ธ ์ปฌ๋ผ์ด ๋ณ๊ฒฝ๋์์ ๊ฒฝ์ฐ JPA๊ฐ SQL, ํ๋ผ๋ฏธํฐ ๋ฑ ๊ด๋ จ ๋ด์ฉ์ ๋์ ์์ ํด์ฃผ์ด ์ ์ง๋ณด์ ์ธก๋ฉด์์ ์ข์ต๋๋ค.
- ๋ฐ์ดํฐ ์ ๊ทผ ์ถ์ํ์ ๋ฒค๋ ๋
๋ฆฝ์ฑ
- JPA๋ ์ถ์ํ๋ ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ํน์ ๋ฒค๋์ ์ข ์์ ์ด์ง ์์ต๋๋ค. ๋ฐ๋ผ์, ์ค์ ํ์ผ์์ JPA์ ์ฌ์ฉํ๋ DB๋ง ์๋ ค์ฃผ๊ฒ ๋๋ฉด ์ผ๋ง๋ ์ง DB๋ฅผ ๋ฐ๊ฟ ์ ์์ต๋๋ค.
์ ๋ฆฌ๋ฅผ ํ์๋ฉด
1. ORM์ Application ๊ณผ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํด์ค๋๋ค.
2. ์๋ฐ ์ง์์์๋ ORM์ ํ์ค ์คํ์ผ๋ก JPA๋ผ๋ ๊ฒ์ ์ธํฐํ์ด์ค๋ก ์ ์ํ์ฌ ์ ๊ณตํ๊ณ ์๋ค.
3. ํด๋น JPA์ ์ค์ ๊ตฌํ ํด๋์ค๋ค์ ๋ชจ์๋์ ๊ฒ์ Hibernate์ด๋ค.
4. ์ด ์ค์ ์์ฃผ ์ฐ์ด๋ ๊ฒ์ ์กฐ๊ธ ๋ ์ฌ์ฉํ๊ธฐ ์ฝ๊ฒ ์คํ๋ง ํ๋ ์์ํฌ์์ ๋ค์ ํ๋ฒ ๋ฌถ์์ผ๋ก ์ ๊ณตํ๋ ๊ฒ์ด Spring Data Jpa ์ด๋ค.
JPA ๋์ ๊ณผ์
JPA๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ JDBC ์ฌ์ด์์ ๋์ํฉ๋๋ค.
๊ฐ๋ฐ์๊ฐ JPA๋ฅผ ์ฌ์ฉํ๋ฉด, JPA ๋ด๋ถ์์ JDBC API๋ฅผ ์ฌ์ฉํ์ฌ SQL์ ํธ์ถํ์ฌ DB์ ํต์ ํฉ๋๋ค.
- JDBC๋?
- JDBC๋ DB์ ์ ๊ทผํ ์ ์๋๋ก ์๋ฐ์์ ์ ๊ณตํ๋ API์ ๋๋ค.
- ๋ชจ๋ JAVA Data Access ๊ธฐ์ ์ ๊ทผ๊ฐ์ ๋๋ค.
- ๋ชจ๋ Persistance Framework๋ ๋ด๋ถ์ ์ผ๋ก JDBC API๋ฅผ ์ด์ฉํฉ๋๋ค.
โ
โ
์ ์ฅ๊ณผ์

MemberDAO์์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ ๋๋ ๊ฐ๋ฐ์๋ JPA์ Member ๊ฐ์ฒด๋ฅผ ๋๊น๋๋ค.
JPA๋
1. Member ์ํฐํฐ๋ฅผ ๋ถ์ํฉ๋๋ค.
2. INSERT SQL์ ์์ฑํฉ๋๋ค.
3. JDBC API๋ฅผ ์ฌ์ฉํ์ฌ SQL์ DB์ ๋ ๋ฆฝ๋๋ค.
โ
์กฐํ ๊ณผ์

Member ๊ฐ์ฒด๋ฅผ ์กฐํํ ๋๋๊ฐ๋ฐ์๋ Member์ pk ๊ฐ์ JPA์ ๋๊น๋๋ค.
JPA๋
1. ์ํฐํฐ์ ๋งคํ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ ์ ํ SELECT SQL์ ์์ฑํฉ๋๋ค.
2. JDBC API๋ฅผ ์ฌ์ฉํ์ฌ SQL์ DB์ ๋ ๋ฆฝ๋๋ค.
3. DB๋ก๋ถํฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ต๋๋ค.
4. ๊ฒฐ๊ณผ(ResultSet)๋ฅผ ๊ฐ์ฒด์ ๋ชจ๋ ๋งคํํฉ๋๋ค.
์ฟผ๋ฆฌ๋ฅผ JPA๊ฐ ๋ง๋ค์ด ์ฃผ๊ธฐ ๋๋ฌธ์ Object์ RMB ๊ฐ์ ํจ๋ฌ๋ค์ ๋ถ์ผ์น๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
โ
โ
[์ฐธ์กฐ]
https://www.youtube.com/watch?v=OiAYmtq4Av8
https://beconstant.tistory.com/5
https://blog.naver.com/etnersrd/222484342478