[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

Spring Data is an umbrella project consisting of independent projects with, in principle, different release cadences. To manage the portfolio, a BOM (Bill of Materials - see this example) is published with a curated set of dependencies on the individual pr

spring.io

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์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

๋” ์ž์„ธํ•œ ์ด์•ผ๊ธฐ๋Š” ๋‹ค์Œ ํŒŒํŠธ์—์„œ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments