๐ก JPA ์ ์ ์
Java Persistance API ์ ์ฝ์
- Java ์ง์์์ ORM (Object-Relation Mapping) ๊ธฐ์ ํ์ค์ผ๋ก ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค ๋ชจ์
- ORM : ๊ฐ์ฒด๋ ๊ฐ์ฒด๋๋ก, ๋ฐ์ดํฐ๋ ๋ฐ์ดํฐ ๋๋ก ์ค๊ณํ๋ ๊ฒ
- ์๋ฐ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ ์ํ ์ธํฐํ์ด์ค
- JPA๋ ์ธํฐํ์ด์ค๋ฅผ ๋งํ๊ณ ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ์ฒด๋ก ์ ๊ณตํ๋ ๊ฒ๋ค ์ค์ Hibernate, Open JPA ๋ฑ์ด ์๋ ๊ฒ์ด๋ค.
- ํ์ง๋ง Spring์์ ์ง์ ์ฌ์ฉํ ๋ Hibernate๊ฐ์ ๊ตฌํ์ฒด๋ฅผ ์ง์ ์ฌ์ฉํ์ง ์๋๋ค๊ณ ํจ (๋ณดํต์ Spring Data JPA )
๐ก JPA ๊ฐ ๋ํ๋๊ธฐ ๊น์ง
1. ํจ๋ฌ๋ค์์ ๋ถ์ผ์น
xml์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ฐ์ฒด์ ๋ชจ๋ธ๋ง์ด ์๋, ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ด์ ์ ๋๊ณ SQL ์์ฑํ๋๋ฐ ์๊ฐ์ด ๋ ์ค๋ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
- RDBMS : ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ ์ฅํ ์ง์ ๋ํ ์ด์
- ๊ฐ์ฒด์งํฅ : ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๊ณ , ๊ธฐ๋ฅ๊ณผ ์์ฑ์ ํ ๊ณณ์์ ๊ด๋ฆฌ ( ๋คํ์ฑ, ์ถ์ํ, ์บก์ํ ๋ฑ๋ฑ )
๋ ๊ฐ์ง์ ์๋ก ๋ค๋ฅธ ํจ๋ฌ๋ค์์ ์ผ์น์์ผ ์ฃผ๊ธฐ ์ํ ๊ธฐ์
2. ๊ณผ๊ฑฐ์๋ JDBC๋ผ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค. mybatis๊ฐ์ ๊ฒ๋ค.
JDBC : Java Database Connectivity
*Java ์์ DB์ ์ ๊ทผํ ์ ์๊ฒ ์ ๊ณตํ๋ API
JDBC ๋๋ผ์ด๋ฒ์์ ๋ด๊ฐ ์ฌ์ฉํ๊ณ ์ ํ๋ DB์ ๋๋ผ์ด๋ฒ(oracle, mysql … ๋ฑ )๋ง ์ ํํ๋ฉด ์ถ๊ฐ ํ๊ฒฝ์ค์ ์์ด ์ด๋ค Database๋ ์ง ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๋ฌ๋, ๊ฐ๋ฐ์๊ฐ connection ๊ด๋ฆฌ์ ์์ธ์ฒ๋ฆฌ, ๋ฌด์ํ ๋ง์ try catch… ์ ์ ์ฌ์ฉํ๋ ๊ธฐ์ต์ ๋ ์ฌ๋ ค ๋ณด๋ฉด ์ฌ๊ฐ ๋ถํธํ๋ ๊ฒ ์๋๋ค.
์ด ๋ถํธํจ์ ํด์ํ๊ธฐ ์ํด ๋์จ๊ฒ Spring JDBC์ด๋ฉฐ
spring JDBC๋ JDBC Driver manager ๊ฐ ํด์ผํ ์ผ์ Jdbc Template์ ์์ํ๋ค.
๊ฐ๋ฐ์๋ ๋ฉ์๋์ ์ฟผ๋ฆฌ๋ง ๋งคํํ๋ฉด DB๋ฅผ ์์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค. ( → SQL Mapper (mybatis ๋ mapper์ ํ ์ข ๋ฅ )์ ์ฌ์ฉํด์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๊ฒ )
๊ทธ๋ฌ๋ xml ๊ธฐ๋ฐ์ ์์ ์ DTO ๋ฅผ ํจ๊ป ์์ ํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์กด์ฌํ๋ฉฐ ๊ธฐ๋ณธ CRUD ์ฒ๋ผ ์ฝ๋์ ๋ฐ๋ณต์ด ๋ํ๋๊ฒ ๋๋ค.
๐ก ์ฅ ๋จ์
ORM ์ SQL Mapper ์์ด ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ์ง ์๋๋ค.
๊ทธ๋ ๋ค๊ณ ORM์ด ๋ฌด์กฐ๊ฑด์ ์ผ๋ก ์ข์ ๊ฒ์ ์๋๋ค.
SQL Mapper ์ ์ฅ์ ์ผ๋ก๋ ๋ณต์กํ ์ฟผ๋ฆฌ ํน์ ํ๋ก์์ ๋ฅผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๊ธ์ต, ํต๊ณ ๊ฐ์ ์์คํ ์ ์์ง xml ๊ธฐ๋ฐ์ผ๋ก ํ ํํ๊ฐ ๋ง๋ค.
๋จ, ๊ธฐ๋ณธ CRUD ์์ฑ ์ ์ค๋ณต ์ฝ๋ ์์ฑ์ ๋ฒ๊ฑฐ๋ก์์ด ์๋ค.
๋ฐ๋ฉด ORM ์ ??
๋ณต์กํ ์ฟผ๋ฆฌ ์ฌ์ฉ์๋ ํ๊ณ๊ฐ ์์ผ๋, ๊ธฐ๋ณธ CRUD ๋ฅผ ์ ๊ณตํ๋ฉฐ
์ฟผ๋ฆฌ ์์ฑ ์ DB์ ์ข ์๋์ง ์๋๋ค. (์, Oracle ๊ณผ Mysql ์ ๋ฌธ๋ฒ์ ๋ค๋ฅด๋ค.)
๊ทธ๋ฌ๋ ์ด๊ธฐ ๋ฌ๋ ์ปค๋ธ๊ฐ ๋๊ณ ๋ณต์กํ ํ๋ก์์ ๋ฅผ ๊ตฌํํ๋๋ฐ ์ด๋ ค์์ด ์์ด ๋น์ฆ๋์ค ๋ก์ง์ด ๋ ๋ณต์กํด์ง ๊ฐ๋ฅ์ฑ์ ์๋ค.
๐ก Spring Data JPA ๋ ?
์์ ์ค๋ช ํ JPA ๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ Spring ์ธก์์ ์ ๊ณตํ๋ ๊ฒ์ด Spring Data JPA ์ด๋ค.
JPARepository๋ฅผ ์์๋ฐ์ ์ฌ์ฉํ๋ฉฐ Hibernate๊ฐ์ JPA ๊ตฌํ์ฒด๋ค์ ๋ณด๋ค ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ํ๋๊ฒ Spring JPA ์ธ ๊ฒ
JPA<- Hibernate <- Spring JPA
SpringData JPA ๊ฐ ์ฐ๊ฒฐ์ ์ค์ฌํด์ฃผ๋ฉด์ DB์ ์ข ์๋์ง ์๊ณ ๋ณ๊ฒฝ์ ์ข๋ค.
'Java > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Boot] ์คํ๋ง ๋ถํธ mustache ํ๊ธ ๊นจ์ง ํ์ (0) | 2023.08.08 |
---|---|
[SpringBoot] SpringBoot์์ JPA ์ฌ์ฉํ๊ธฐ (0) | 2023.08.05 |
Springboot ํ๊ฒฝ์์ @Async์ ThreadPoolTaskExecutor (0) | 2023.05.26 |
[SpringBoot] SpringBoot ์ RabbitMQ ์ฐ๋ํ๊ธฐ (0) | 2022.08.05 |
[Spring] Spring Bean ๋ฑ๋ก๊ณผ ์์กด๊ด๊ณ ์ค์ (0) | 2022.06.20 |