[Spring Data] Spring Data JDBC๋ฅผ ์ด์šฉํ•œ DB ์—ฐ๋™ (๊ธฐ๋ณธํŽธ)

๋ฐ˜์‘ํ˜•

Spring Data JDBC๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์•Œ๊ณ  ์žˆ๋Š” Spring JDBC์™€๋Š” ์กฐ๊ธˆ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

JDBC ํ…œํ”Œ๋ฆฟ์€ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์ด๋“ค์˜ ํ•จ์ˆ˜ ํ˜•ํƒœ๋ฅผ ์ง์ ‘ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†์ด ๋งŽ์ด ๊ฐ‘๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋“ค์„ Spring Data Commons๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์žฌ๊ตฌ์„ฑํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ Spring Data JDBC ์ž…๋‹ˆ๋‹ค.

 

 

 

Background of Spring Data JDBC

์šฐ๋ฆฌ๋Š” ์ด์ „ ๊ธ€์—์„œ Spring Data Commons๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ฅผ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” CRUD์˜ ์ถ”์ƒํ™” ๋ ˆ์ด์–ด๋ฅผ ๋งŒ๋“  ๊ฒƒ์ด ๋ฐ”๋กœ Spring Data Commons ์ธ๋ฐ์š”. ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ JPA๋ฅผ ๋„ฃ์€ ๊ฒƒ์ด ๋ฐ”๋กœ Spring Data JPA์ž…๋‹ˆ๋‹ค.

 

์—ฌํƒœ๊นŒ์ง€ Spring Data JPA๋ฅผ ์ž˜ ์‚ฌ์šฉํ•˜์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด Spring Data JDBC๊ฐ€ ์™œ ๋“ฑ์žฅํ–ˆ๋Š”์ง€ ์˜์•„ํ•ด ํ•˜์‹ค ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. JPA์˜ lazy loading๊ณผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋กœ ๋งŒ๋“ค์–ด์ง„ ์บ์‹œ ๊ธฐ๋Šฅ, Dirty checking์€ ๊ทธ์•ผ๋ง๋กœ ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋“ค ๊ธฐ๋Šฅ์ด ํ•„์š” ์—†๊ฑฐ๋‚˜ ๋„ˆ๋ฌด ๋ฌด๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ๋งŒํผ ๋‹จ์ ์ด ๋”ฐ๋ฅด๊ธฐ ๋งˆ๋ จ์ž…๋‹ˆ๋‹ค.

 

lazy loading์ด ๋‹จ์ ์ด ๋˜๋Š” ๋ถ€๋ถ„์€ ์–ด๋–ค ๊ฒƒ์ผ๊นŒ์š”? ์šฐ๋ฆฌ๊ฐ€ ๋‹จ์ˆœํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด lazy loading์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ํ”์น˜ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผํ…Œ๋ฉด users ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€์ฃผ์„ธ์š”. ๋ผ๋Š” ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์ด์™€ ์—ฐ๊ฒฐ๋œ ํ…Œ์ด๋ธ”์ด ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค๋ฉด ๊ทธ์ € ๊ฑฐ๊ธฐ์— ์˜์†๋˜์–ด ์žˆ๋Š” ๋ ˆ์ฝ”๋“œ๋งŒ ๊ฐ€์ ธ์˜ค๋ฉด ๋˜๋ฏ€๋กœ lazy loading์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ users ํ…Œ์ด๋ธ”์— team๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ์™€ ์ข…์†์ด ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์–ด๋–จ๊นŒ์š”? ๋งŒ์•ฝ ์ด๋“ค์„ ๋‹จ์ˆœ ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ๋ถˆ๋Ÿฌ์˜จ๋‹ค๋ฉด ๊ทธ์™€ ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๋“ค์€ ๋ณด์—ฌ์ง€์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ join ๋“ฑ์„ ์ด์šฉํ•ด ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ๊ทธ ์ฟผ๋ฆฌ๋ฅผ ๊ฐ™์ด ๋ถˆ๋Ÿฌ์•ผ๋งŒ ๊ทธ๋“ค์˜ ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ผ ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

์—ฌ๊ธฐ์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ ์—๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ. ์ฆ‰, team ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ users ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ๊ทธ ์‹œ์ ์ด ๋ช…ํ™•ํ•˜์ง€ ๋ชปํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. users ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋„ ์žˆ๊ณ , team ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ๊ฒฝ์šฐ๋Š” ORM ์ฆ‰, JPA ๋‚ด์ง€ Hibernate์—์„œ ์“ฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ORM์˜ ๊ฒฝ์šฐ๋Š” ์„ธ์…˜ ํ˜น์€ ์ €์žฅ์†Œ์— ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•œ๋‹ค๋Š” ์ ์— ์žˆ์–ด ๊ทธ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ฏธ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ๋†“๊ณ  ๊ทธ๊ณณ์— ๋ณด๊ด€ํ•ด๋’€๋‹ค๊ฐ€ ๋‹ค์‹œ ํ˜ธ์ถœ์ด ๋˜๋ฉด ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์œผ๋กœ ์œ ํšจ์„ฑ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด์ฃ . ํ•˜์ง€๋งŒ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ๋Š” ๋ฐ์ดํ„ฐ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋“ค์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜๋™์œผ๋กœ ํ•ด์ค˜์•ผํ•˜๋Š” ๋“ฑ ์†์ด ๋งŽ์ด ๊ฐ€๋Š” ๊ฒƒ๋„ ๋‹จ์ ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Lazy loading์˜ ๋‹จ์ ์„ ์งง๊ฒŒ ์š”์•ฝํ•œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

  • lazy loading์ด ๋ฐœ์ƒ๋˜๋Š” ์‹œ์ ์„ ์ •ํ™•ํžˆ ์•Œ ์ˆ˜ ์—†์–ด ์›ํ•˜์ง€ ์•Š๋Š” ์ˆœ๊ฐ„์— ์„ฑ๋Šฅ์ ์ธ ์˜ํ–ฅ์„ ์ดˆ๋ž˜ํ•จ.
  • ๊ฐ์ฒด ์ดˆ๊ธฐํ™”์‹œ ๋ฐœ์ƒ๋˜๋Š” ํ”„๋ก์‹œ ๊ฐ์ฒด์— ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ๋ณ„๋„๋กœ ํ•ด์ค˜์•ผ ํ•จ.

 

์ด๋Ÿฌํ•œ ๋ฒˆ๊ฑฐ๋กœ์šด ์ ์ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณด์•˜์„ ๋•Œ ์šฐ๋ฆฌ๊ฐ€ ๋ฐ˜๋“œ์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜์†ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ Spring Data JPA๋ฅผ ์“ด๋‹ค๋Š” ๊ฒƒ์€ ์˜ฌ๋ฐ”๋ฅธ ์ผ์ด ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  iBatis๋‚˜ MyBatis์—๋„ lazy loading์ด ์กด์žฌํ•˜์ง€๋งŒ ์œ„์—์„œ ๋งํ•œ ๋‹จ์ ๋Œ€๋กœ ๊ทธ ์‹œ์ ์„ ์ •ํ™•ํ•˜๊ฒŒ ๋‹จ์ • ์ง€์„ ์ˆ˜ ์—†์Œ์œผ๋กœ ์ธํ•œ ๋‹จ์  ๋•Œ๋ฌธ์— ์˜คํžˆ๋ ค ์˜ค๋ฒ„ ์—”์ง€๋‹ˆ์–ด๋ง์ด ๋œ๋‹ค๋Š” ๊ฒƒ์ด์ฃ . 

 

JPA๊ฐ€ ๊ฐ€์ง„ ์ง€์—ฐ ๋กœ๋”ฉ, ๋”ํ‹ฐ ์ฒดํ‚น, ์บ์‹œ ๋“ฑ์˜ ์žฅ์ ์„ ๊ฐ€์ง„ ๊ธฐ์ˆ ๋“ค์€ ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ ๋‹จ์ ์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์šด ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ฐ€๋Šฅํ•œ CRUD ๊ธฐ๋ณธ(๋‹จ์ˆœํ•œ ์ž‘์—…)์— ์ถฉ์‹คํ•œ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค.

 

 

 

 

Architecture of Spring Data JDBC 

Spring Data JDBC๋Š” ๊ทธ ๊ตฌ์กฐ๊ฐ€ ๊ต‰์žฅํžˆ ์‹ฌํ”Œํ•ฉ๋‹ˆ๋‹ค. JPA๋Š” JDBC ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฑฐ์ณ ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜์†๋˜๋Š” ๊ตฌ์กฐ๊ฐ€ ์•„๋‹Œ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ์ˆ˜๋งŽ์€ ์ž‘์—…์„ ํ†ตํ•ด ์˜์†ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋ฐฉ์‹์ธ๋ฐ์š”.

 

Spring Data JDBC๋Š” ๊ธฐ๋ณธ์ ์ธ JDBC ์˜์† ๋ฐฉ์‹์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. 

 

์œ„ ์ด๋ฏธ์ง€๋Š” ์ผ๋ฐ˜ Java application์œผ๋กœ DB๋ฅผ ์—ฐ๋™ํ–ˆ์„ ๋•Œ์˜ ์ˆœ์„œ์ž…๋‹ˆ๋‹ค. Connection์„ ์ƒ์„ฑํ•œ ํ›„ Statement ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ˆœ์„œ๋กœ ์—ฐ๋™ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, Spring Data JDBC๋Š” Spring Data Commons๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ํ•˜์—ฌ ์œ„์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

๋˜ํ•œ Spring Data Commons๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— Spring Data JPA๋ฅผ ์“ฐ์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด ์ฝ”๋“œ์—๋Š” ํฐ ์ฐจ์ด๊ฐ€ ์—†์ด ์‚ฌ์šฉํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

How to use

Spring Initializr๋ฅผ ์ด์šฉํ•˜์—ฌ ์•„๋ž˜์˜ ๋””ํŽœ๋˜์‹œ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์›ํ•˜๋Š” ๊ฒƒ์„ ๊ณจ๋ผ ์‚ฌ์šฉํ•˜์…”๋„ ๋ฌด๋ฐฉํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” PostgreSQL์„ ์‚ฌ์šฉํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— DB ์Šคํ‚ค๋งˆ ์ƒ์„ฑ์„ ์œ„ํ•ด flyway๋ฅผ ๋ถ™์ด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

Memo๋ผ๋Š” ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ณ , ๊ณ ์œ ๊ฐ’์œผ๋กœ id๋ฅผ ์ฃผ๊ณ , ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ์„ ์ ์„ ์ˆ˜ ์žˆ๋Š” ์ปฌ๋Ÿผ ๋‘๊ฐœ๋ฅผ ๋งŒ๋“ค๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

 

ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์กฐ๋ฅผ ์œ„์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค๊ณ , DB์— ์ž˜ ์˜์†๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด Test ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

flyway์— entity๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ SQL ์ฟผ๋ฆฌ์™€ ๋˜‘๊ฐ™์ด ๋งŒ๋“ค์–ด์ฃผ๊ณ , Primary key ์ง€์ •์„ ์œ„ํ•ด Id ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

Spring Data์˜ ์ถ”์ƒํ™” repository์ธ CrudRepository๋ฅผ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ Spring Data JPA์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

 

application.yml ํŒŒ์ผ์— ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , flyway ์„ค์ •์— ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋„ ๊ฐ™์ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ locations๋Š” db ๋ฒ„์ „๋ณ„๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•  ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด ๋†“์€ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ณณ์ด๊ณ  vendor๋Š” ๊ฐ DB ๋ฒค๋” ๋ณ„๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์งค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

schema๋Š” ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•  ์Šคํ‚ค๋งˆ, table์€ ๋ฒ„์ „๋ณ„๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰ํ•œ ๊ธฐ๋ก์˜ ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ๋„ฃ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.

 

E2E ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ œ๋ชฉ์„ Practice memo, ๋‚ด์šฉ๋„ Practice memo๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๋’ค ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

์ •์ƒ์ ์œผ๋กœ ์ž˜ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

๋งˆ์น˜๋ฉฐ...

์—ฌ๊ธฐ๊นŒ์ง€ Spring Data JDBC์˜ ๋ฐฐ๊ฒฝ๊ณผ ๊ตฌ์กฐ๋ฅผ ์•Œ์•„๋ณด๊ณ , ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ์ ์–ด๋ดค์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋ฒ•์ด๋‚˜ ํŠน์ง• ๋“ฑ์— ๋Œ€ํ•ด์„œ๋Š” ๊ธฐ์กด์˜ ๋ฐฉ๋ฒ•๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด์ „์— iBatis, MyBatis ๋“ฑ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ์ž๋“ค์ด๋ผ๋ฉด ์•ž์œผ๋กœ๋Š” Spring Data JDBC๋กœ ๋Œ€์ฒด๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ์ตํ˜€๋‘๋Š” ๊ฒƒ๋„ ์ข‹์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

JPA์˜ ์žฅ์ ์ธ ์บ์‹œ, ์ง€์—ฐ ๋กœ๋”ฉ ๋“ฑ์„ ๋ชจ๋‘ ์ œ๊ฑฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” DDL ๋“ฑ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ๊ธฐ์ˆ  ๋“ฑ์„ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ์ˆ˜๋™์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๋ฅผ ์„œ๋ฒ„์— ์งˆ์˜ํ•˜์—ฌ DDL ์ฝ”๋“œ๋ฅผ ๋ฏธ๋ฆฌ ์‹คํ–‰์‹œ์ผœ์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•˜์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด ์˜คํžˆ๋ ค ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์ด ๋ฐ˜๊ฐ€์šธ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. JPA๊ฐ€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ์–ด ๋กœ๋”ฉ์ด๋‚˜ ๋ณ€๊ฒฝ ์ฒดํฌ์—๋Š” ์œ ๋ฆฌํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ๋ฒ„์ „ ๊ด€๋ฆฌ ๋“ฑ์—๋Š” ์•ฝํ•œ ๋ชจ์Šต์„ ๋ณด์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด JPA์˜ ๋ณต์žกํ•œ ๊ธฐ๋Šฅ์„ ์ž ์‹œ ๋ฒ„๋ ค๋‘๊ณ  Spring Data์˜ ํ•จ์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ด์ ์„ ๋ˆ„๋ฆด ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋‹ค์Œ ๊ธ€์—์„œ๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ํ…Œ์ด๋ธ”์—์„œ ๋‘ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ• ๋“ฑ์„ ์•Œ์•„๋ณด๋Š” ์‘์šฉํŽธ์„ ์ž‘์„ฑํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments