[Spring Data] Spring Data module
์คํ๋ง์ ์ฌ์ฉํ๋ค๋ณด๋ฉด ์ด๋ฐ ์๋ฌธ์ ์ด ์์ต๋๋ค. JPA๋ JPA์ธ๋ฐ, Spring Data JPA๋ ๋ฌด์์ด๋ฉฐ, JDBC๋ JDBC์ธ๋ฐ, Spring Data JDBC๋ ๋ฌด์์ธ๊ฐ?
JPA๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ Spring Data JPA๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ถ๋ช ํ ๋ค๋ฅธ์ ์ด ์์ต๋๋ค. ์ผ๋ชฉ์์ฐํ๊ฒ ๋งํ์๋ฉด Spring Data JPA๋ฅผ ๋ชฐ๋ผ๋ JPA๋ฅผ ๋ฐฐ์ฐ๋ ๋ฐ ํฐ ์ง์ฅ์ ์์ง๋ง JPA๋ฅผ ๋ชจ๋ฅด๋ ์ํ์์ Spring Data JPA๋ก ๋์ด์ค๋ ๊ฒ์ ๋ง์น ์ด๋ก ์์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.
์ด์ฒ๋ผ Spring Data๊ฐ ์์ ๋ถํผ ๋ํ๋์๋ค์ ๋ฌด์ธ๊ฐ Spring์ ์ต์ ํ ๋์ด ์๋ ๋๋์ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด Spring์์ ์ ๊ณตํ๋ Spring Data Pattern์ ์ด๋ค ๊ฒ์ผ๊น์?
Spring Data
Spring Data๋ ์คํ๋ง์์ ์ผ๊ด๋ DB ์ ๊ทผ์ ์ํ ์ถ์ํ๋ ๋ชจ๋ธ์ ์ ๊ณตํ๋ ๋ํ๋์์ ๋๋ค. ์ฌ๊ธฐ์๋ ORM์ ํ์ค์ธ Hibernate๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ JPA์ Java ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์ ์ ํ์ค์ธ JDBC ๋ ๊ฐ์ง๋ฅผ ๋ฒ ์ด์ค๋ก ์ ๊ณตํฉ๋๋ค.
https://spring.io/projects/spring-data
Spring Data module์ Spring Data Project๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์งํ๋์ด Spring Data Commons๋ผ๋ ๋ํ๋์๋ฅผ ๋ฐํ์ผ๋ก JPA, JDBC, Redis, LDAP ๋ฑ ๋ค์ํ ํํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์คํ๋ง์์ ์ผ๋ชฉ์์ฐํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํด์ฃผ๋ฉฐ ํนํ HATEOAS ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ๋ Spring Data Rest๋ REST API์ ์์ด ์คํค๋ง ์ค๊ณ์ ๋ํ ๊ณ ๋ฏผ์ ์ค์ฌ์ฃผ๊ณ , ๊ฐ๊ธ์ ํ์ค์ ๋ง๊ฒ ์ ๊ณตํด์ค๋ค๋ ์ฅ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก Spring Data๊ฐ ํ๋ ๊ธฐ๋ฅ์ ์๋์ ๊ฐ์ต๋๋ค.
- ๊ฐ๋ ฅํ ๋ ํฌ์งํฐ๋ฆฌ ํจํด๊ณผ ์ปค์คํ ๊ฐ์ฒด ๋งคํ ์ถ์ํ
- ๋ ํฌ์งํฐ๋ฆฌ ํจํด์ ๋ฉ์๋ ์ด๋ฆ์ผ๋ก ๋์ ์ฟผ๋ฆฌ ์คํ
- ๊ธฐ๋ณธ ์์ฑ์ ์ ๊ณตํ๋ ๋๋ฉ์ธ ๊ธฐ๋ณธ ํด๋์ค ๊ตฌํ
- ์ด๋ฒคํธ ์ํ ์ง์ (์์ฑ, ๋ง์ง๋ง ๋ณ๊ฒฝ)
- ์ปค์คํ ๋ ํฌ์งํฐ๋ฆฌ ์ฝ๋ ํตํฉ
- JavaConfig ํด๋์ค ๋ฐ ์ปค์คํ XML ๋ค์์คํ์ด์ค๋ฅผ ์ด์ฉํ ์คํ๋ง ํตํฉ ์ค์ ์ ๊ณต
- ๋ ๋์ Spring MVC ์ปจํธ๋กค๋ฌ์์ ํตํฉ
- ์ํธ๊ฐ ์์ํ ์ง์ (Experimental)
Spring Data Commons
Spring Data xxx ๊ธฐ๋ฐ์ ๋ํ๋์๋ค์ Spring Data Commons๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ด ์์ผ๋ฉฐ ์ด๋ ์ด ํ๋ก์ ํธ์ ํต์ฌ ์ฝ๋์ด์ ๊ธฐ๋ณธ์ ์ธ ์ถ์ํ ๋ ์ด์ด๋ก ์ด๊ฒ์ด ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด ์๋์ง ์๋ค๋ฉด ๋ค๋ฅธ Spring Data ๋ํ๋์๋ค๋ ์ฝ๊ฒ ์ ๊ทผํ ์ ์์ ๊ฒ์ ๋๋ค.
๊ทธ ์ค ๋ํ์ ์ธ ๊ฒ์ด ๋ฐ๋ก Spring Data JPA์์ ์์ฃผ ๋ค๋ฃจ๋ Repository์ CrudRepository ์ ๋๋ค. Spring Data ํ๋ก์ ํธ๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ ์ค ํ๋๊ฐ ๋ฐ๋ก ๊ฐ๋ ฅํ ๋ ํฌ์งํฐ๋ฆฌ ํจํด์ธ๋ฐ, ํนํ CrudRepository๋ ๋ฐ์ดํฐ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ CREATE, READ, UPDATE, DELETE์ธ CRUD๋ฅผ ์ ์ํ ๋ ํฌ์งํฐ๋ฆฌ์ ๋๋ค.
CrudRepository๋ Repository๋ฅผ ์์ํ์ฌ ๊ตฌ์ฑ๋์ด ์๋๋ฐ, Repository์ ์ญํ ์ PK๋ฅผ ์ง์ ํด์ฃผ๋ ์ญํ ์ด๋ผ๋ฉด CrudRepository๋ ์ด PK๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ณ , ์ ์ฅํ๊ณ ๋ ๋ฑ์ CRUD๋ฅผ ์ํํ๋๋ฐ, ์ด๋ฅผ ๋ฉ์๋๋ก์จ ๊ฐ๋จํ ์ฌ์ฉํ ์ ์๋๋ก ๊ตฌํ์์ผ ๋์ ์ถ์ํ๋ ๋ชจ๋ธ์ ๋๋ค.
์ค์ ๋ก JPA๋ฅผ ์ฌ์ฉํ์ ๋๋์ ์ฌ๋ญ ๋ค๋ฅธ ๋ชจ์ต์ด์ฃ . JPA๋ฅผ ์ฌ์ฉํด์ ํน์ ๋ฐ์ดํฐ๋ฅผ ์์ํ ๋๋ ๋จผ์ Entity ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ค์ ์์์ฑ ์ปจํ ์คํธ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ๋ค์ ์ปค๋ฐ์ ์ํํด์ผ ํฉ๋๋ค. ์ด ๊ณผ์ ์์์ ๋ฐ์ํ๋ ๋ฉ์๋๋ง 3๋ฒ์ด๋ผ๋ฉด Spring Data JPA๋ ๋จ ํ ๋ฒ์ ์ด๋ฅผ ์ํํ ์ ์๋ ๊ฒ์ด์ฃ . ์ฆ, ์์์ ํ์ํ 3๋ฒ์ ์ํ์ ํ๋์ ๋ฉ์๋์ ์ถ์ํํ ๊ฒ์ ๋๋ค.
Spring Data JDBC
์ด์ ์ Spring Data JPA์ ๋ํด ๋ค๋ค์๋๋ฐ, ์ด๋ฒ ๊ธ์ ์ฐ๊ฒ ๋ ๊ฒ์ ๋ฐ๋ก ๋ค์์ ์ธ Spring Data JDBC์ ๋๋ค. ์ฌ๋ฌ๋ถ๋ค ์ค์์๋ ORM์ด ์๋ MyBatis๋ JdbcTemplate๊ณผ ๊ฐ์ Query๋ฅผ ์ง์ ์์ฑํด์ ์ฌ์ฉํ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ์คํ ๋ฐ์.
๋ชจ๋ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ DB ์ ๊ทผ ๋ก์ง์ ๊ตฌํํ ๋ ๋ฐ๋์ ORM์ ์ฌ์ฉํด์ผํ๋ ๊ฒ์ ์๋๋๋ค. ํ์์ ๋ฐ๋ผ์๋ Query๋ฅผ ์ง์ ์์ฑํด์ผ ํ ์๋ ์๊ณ , ์ฝ๋์ ์ผ๊ด์ฑ์ด๋ ์ํคํ ์ฒ์ ์ ์ฐํจ์ ์ํด์ ORM์ ์ ํํ๋ ๊ฒฝ์ฐ๋ ์๋๋ผ๋ ๋ฐ๋์ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ DB๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํด ORM์ ์ฌ์ฉํด์ผ ํ๋ค. ๋ ์ ํฉํ์ง ์์ต๋๋ค.
๋ ์์ธํ ์ด์ผ๊ธฐ๋ ๋ค์ ํํธ์์ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
'Programming > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Data] Spring Data JDBC๋ฅผ ์ด์ฉํ DB ์ฐ๋ (์์ฉํธ) (0) | 2021.06.19 |
---|---|
[Spring Data] Spring Data JDBC๋ฅผ ์ด์ฉํ DB ์ฐ๋ (๊ธฐ๋ณธํธ) (0) | 2021.06.05 |
[Spring boot] Spring ํ ์คํธ ๋ฐฉ๋ฒ๊ณผ @SpringBootTest (0) | 2021.05.16 |
[Spring boot] Axon Framework ๋ง๋ณด๊ธฐ (0) | 2021.03.27 |
[Spring] Jib(์ง๋ธ)๋ฅผ ์ด์ฉํ Docker ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ (2) | 2020.08.26 |