๐ŸŒˆ [Section3] 5. [ Spring MVC ] Spring Data JDBC 1

ํ˜„์ฃผยท2022๋…„ 10์›” 28์ผ
1

bootcamp

๋ชฉ๋ก ๋ณด๊ธฐ
45/71

๐Ÿ“• ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ!

  • JDBC
  • Spring Data JDBC

โœ๏ธ JDBC (Java Database Connectivity)

  • Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ/์—…๋ฐ์ดํŠธ ํ•˜๊ฑฐ๋‚˜, ๋ฐ˜๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ Java ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” Java ์ œ๊ณต ํ‘œ์ค€ API (ํ‘œ์ค€ ์‚ฌ์–‘, Specification)
    โ €
    Ex. mybatis, Spring JDBC, Spring Data JDBC, JPA, Spring Data JPA ๋“ฑ

    ๐Ÿ’ก ์‚ฌ์–‘ (Specification)
    โžœ ์„ค๊ณ„๊ตฌ์กฐ / ๊ธฐ์ˆ  ์„ค๋ช…์„œ ๋“ฑ์„ ์˜๋ฏธ

  • ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๋™ ๊ฐ€๋Šฅ

โœ” JDBC ๋“œ๋ผ์ด๋ฒ„ (JDBC Driver)

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ํ†ต์‹ ์„ ๋‹ด๋‹นํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
  • ๋‹ค์–‘ํ•œ ๋ฒค๋”์—์„œ๋Š” ๊ฐ ๋ฒค๋”์— ๋งž๋Š” JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•ด์„œ ์ œ๊ณตํ•˜๊ฒŒ ๋˜๊ณ , ์šฐ๋ฆฌ๋Š” ์ด ๋“œ๋ผ์ด๋ฒ„ ๊ตฌํ˜„์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ํŠน์ • ๋ฒค๋”์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—‘์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ’ก ๋ฒค๋” (Vendor)
โžœ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•˜๋“œ์›จ์–ด๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐ™์€ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ ๊ด€๋ จ ์ œํ’ˆ์„ ํŒ๋งคํ•  ๋•Œ, ๊ทธ ๋ธŒ๋žœ๋“œ์— ์ฑ…์ž„์„ ์ง€๋Š” ์ œ์กฐ์—…์ฒด๋‚˜ ํŒ๋งค ํšŒ์‚ฌ

โœ” JDBC์˜ ๋™์ž‘ ํ๋ฆ„

โœ” JDBC API ์‚ฌ์šฉ ํ๋ฆ„

  • JDBC ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ
    โžœ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” JDBC ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ
    ( JDBC ๋“œ๋ผ์ด๋ฒ„๋Š” DriverManager๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด์„œ ๋กœ๋”ฉ๋จ )
  • Connection ๊ฐ์ฒด ์ƒ์„ฑ
    โžœ JDBC ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋กœ๋”ฉ๋˜๋ฉด, DriverManager๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐ๋˜๋Š” ์„ธ์…˜(Session)์ธ Connection ๊ฐ์ฒด ์ƒ์„ฑ
    ( ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ Connection ๊ฐ์ฒด )
  • Statement ๊ฐ์ฒด ์ƒ์„ฑ
    โžœ Statement ๊ฐ์ฒด๋Š” ์ž‘์„ฑ๋œ SQL ์ฟผ๋ฆฌ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด
    โžœ ๊ฐ์ฒด ์ƒ์„ฑ ํ›„์— ์ •์ ์ธ SQL ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ์œผ๋กœ ๊ฐ€์ง
  • Query ์‹คํ–‰
    โžœ ์ƒ์„ฑ๋œ Statement ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ ์ž…๋ ฅํ•œ SQL ์ฟผ๋ฆฌ ์‹คํ–‰
  • ResultSet ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์กฐํšŒ
    โžœ ์‹คํ–‰๋œ SQL ์ฟผ๋ฆฌ๋ฌธ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ์…‹
  • ResultSet ๊ฐ์ฒด Close, Statement ๊ฐ์ฒด Close, Connection ๊ฐ์ฒด Close
    โžœ JDBC API๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ๋œ ๊ฐ์ฒด๋“ค์€ ์‚ฌ์šฉ ์ดํ›„์— ์‚ฌ์šฉํ•œ ์ˆœ์„œ์˜ ์—ญ์ˆœ์œผ๋กœ ์ฐจ๋ก€๋กœ Close๋ฅผ ํ•ด์ค˜์•ผ ํ•จ

โœ” Connection Pool

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค Connection์„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋ณด๊ด€ํ•˜๊ณ  ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” Connection ๊ด€๋ฆฌ์ž

  • JDBC API ์‚ฌ์šฉํ•˜์—ฌ DB์™€ ์—ฐ๊ณƒ์„ ์œ„ํ•œ Connection ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์ž‘์—… ์ค‘ ํ•˜๋‚˜
    โžœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๋”ฉ ์‹œ์ ์— Connection ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด๋‘๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ DB์— ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ, ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋‘” Connection ๊ฐ์ฒด ์‚ฌ์šฉ

  • Spring Boot 2.0 ๋ถ€ํ„ฐ๋Š” HikariCP๋ฅผ ๊ธฐ๋ณธ DBCP๋กœ ์ฑ„ํƒ
    [์ฐธ๊ณ ] https://github.com/brettwooldridge/HikariCP


โœ๏ธ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ธฐ์ˆ  ์œ ํ˜•

1. SQL ์ค‘์‹ฌ ๊ธฐ์ˆ 

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด
    SQL ์ฟผ๋ฆฌ๋ฌธ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์— ์ง์ ‘์ ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ค‘์‹ฌ์ด ๋˜๋Š” ๊ธฐ์ˆ 

  • ์ž‘์„ฑ๋œ SQL ์ฟผ๋ฆฌ๋ฌธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠน์ • ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•œ ํ›„, Java ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ๊ฒƒ์ด mybatis์˜ ๋Œ€ํ‘œ์ ์ธ ๊ธฐ์ˆ ์  ํŠน์ง•

  • Java ์ง„์˜์—์„œ๋Š” SQL ์ค‘์‹ฌ์˜ ๊ธฐ์ˆ ์—์„œ ๊ฐ์ฒด(Object) ์ค‘์‹ฌ์˜ ๊ธฐ์ˆ ๋กœ ์ง€์†์ ์œผ๋กœ ์ด์ „์„ ํ•˜๊ณ  ์žˆ๋Š” ์ถ”์„ธ
    โ €โ €
    Ex. mybatis, Spring JDBC

    Spring JDBC ์™€ Spring Data JDBC ๋Š” ๋‹ค๋ฅธ ๊ฒƒ !!

2. ๊ฐ์ฒด(Object) ์ค‘์‹ฌ ๊ธฐ์ˆ 

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด
    ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์—์„œ Java ๊ฐ์ฒด(Object)๋ฅผ SQL ์ฟผ๋ฆฌ๋ฌธ์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜ ํ•œ ํ›„์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์— ์ ‘๊ทผ

  • ๊ฐ์ฒด(Object) ์ค‘์‹ฌ์˜ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ธฐ์ˆ  = ORM (Object-Relational Mapping)
    Ex. JPA (Java Persistence API), Spring Data JPA, Spring Data JDBC

JPA (Java Persistence API)

  • Java์˜ ORM ๊ธฐ์ˆ  ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ์Œ
  • ์ด JPA ํ‘œ์ค€ ์‚ฌ์–‘์„ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด๊ฐ€ Hibernate

โœ”๏ธ ORM (Object-Relational Mapping)

  • ๊ฐ์ฒด(Object) ์ค‘์‹ฌ์˜ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ธฐ์ˆ 
  • ๊ฐ์ฒด(Object)์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ๋งคํ•‘์œผ๋กœ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ๊ฐ์ฒด ์•ˆ์— ํฌํ•จ๋œ ์ •๋ณด๋ฅผ ํ…Œ์ด๋ธ”์— ์ €์žฅํ•˜๋Š” ๊ธฐ์ˆ 

[์ฐธ๊ณ ] https://geonlee.tistory.com/207

โœ๏ธ Spring Data JDBC

  • JPA์ฒ˜๋Ÿผ ORM ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ JPA์˜ ๊ธฐ์ˆ ์  ๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถ˜ ๋ฐ์ดํ„ฐ ๊ธฐ์ˆ 

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ทœ๋ชจ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ํฌ์ง€ ์•Š๊ณ , ๋ณต์žกํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š” Spring Data JDBC๊ฐ€ ๋›ฐ์–ด๋‚œ ์ƒ์‚ฐ์„ฑ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Œ

โœ”๏ธ JPA
โžœ ์‹ค๋ฌด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ธฐ์ˆ 
( ๊ธฐ์ˆ ์ ์ธ ๋‚œ์ด๋„์™€ ๋ณต์žก๋„๊ฐ€ ๊ฝค ๋†’์€ ํŽธ )
โ €
โœ”๏ธ Spring Data JPA
โžœ Spring์—์„œ JPA ๊ธฐ์ˆ ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ 
( JPA์— ๋Œ€ํ•œ ์„ ํ–‰ ์ง€์‹์ด ์žˆ์–ด์•ผ ์ œ๋Œ€๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ )

โœ” Spring Data JDBC ์‚ฌ์šฉ

1. ํ”„๋กœ์ ํŠธ์˜ build.gradle์˜ dependencies์— ์•„๋ž˜์˜ ์˜์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€
โ €
( Spring Boot Initializr ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด spring-boot-starter-data-jdbc ์ถ”๊ฐ€ )

implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'

2. ์ธ๋ฉ”๋ชจ๋ฆฌ(In-memory) DB์ธ H2๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ์˜ build.gradle์˜ dependencies์— ์•„๋ž˜์˜ ์˜์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

runtimeOnly 'com.h2database:h2'

โœ”๏ธ ์ธ๋ฉ”๋ชจ๋ฆฌ(In-memory) DB

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ์—๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
    โžœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ์ค‘์ง€ํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰์‹œํ‚ค๋ฉด ์ธ๋ฉ”๋ชจ๋ฆฌ DB ์•ˆ์— ์ €์žฅ๋˜์–ด ์žˆ๋˜ ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋‘ ์‚ฌ๋ผ์ง
    โ €
  • ํ…Œ์ŠคํŠธ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ด์™ธ์— ๋‚˜๋จธ์ง€ ์“ธ๋ฐ์—†๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํ…Œ์ด๋ธ”์— ์—†์–ด์„œ ํ…Œ์ŠคํŠธ์˜ ์ •ํ™•๋„ ๋ฉด์—์„œ ์œ ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ
    โ €
  • ๋กœ์ปฌ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ(In-memory) DB ์‚ฌ์šฉ์„ ๊ถŒ์žฅ
    โžœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์„ ๋ฐ˜๋ณตํ•  ๋•Œ ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ๊นจ๋—ํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ
    โ €
    โ— ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋‹น์—ฐํžˆ ์ธ๋ฉ”๋ชจ๋ฆฌ(In-memory) DB ์ ˆ๋Œ€ ์‚ฌ์šฉ X
    ( ๋ฐ์ดํ„ฐ๊ฐ€ ์ง€์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์— )

3. application.yml ํŒŒ์ผ์— H2 Browser ํ™œ์„ฑํ™” ์„ค์ • ์ถ”๊ฐ€

  • Spring Boot Initializr๋ฅผ ํ†ตํ•ด ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ src/main/resources ๋””๋ ‰ํ† ๋ฆฌ ํ•˜๋‹จ์— application.properties / application.yml๋ผ๋Š” ๋น„์–ด ์žˆ๋Š” ํŒŒ์ผ์ด ์žˆ์Œ
    ( ์—ฌ๊ธฐ์— ๋‹ค์–‘ํ•œ ์„ค์ • ์ •๋ณด ์ž…๋ ฅ ๊ฐ€๋Šฅ )

[์ฐธ๊ณ ] https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html

  • ๊ทธ ํŒŒ์ผ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •
    ( ๋“ค์—ฌ์“ฐ๊ธฐํ•˜์—ฌ depth ์„ค์ •ํ•  ๋•Œ๋Š” ๋ณดํ†ต Tab ํ‚ค ์‚ฌ์šฉ )
    spring:
      h2:
        console:
          enabled: true

โžœ ์›น ๋ธŒ๋ผ์šฐ์ € ์ƒ(H2 ์ฝ˜์†”)์—์„œ H2 DB์— ์ ‘์†ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ

โ— .properties ํŒŒ์ผ๋ณด๋‹ค .yml ํŒŒ์ผ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์ • ์ •๋ณด(ํ”„๋กœํผํ‹ฐ)๋ฅผ depth ๋ณ„๋กœ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณต !
โ €
โžœ ์ฒซ ํŒŒ์ผ์ด .properties ๋ผ๋ฉด, ํŒŒ์ผ ์„ ํƒ ํ›„ [Shift + F6] ํ‚ค๋กœ ํŒŒ์ผ ํ™•์žฅ์ž .yml๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

4. H2 DB ์ •์ƒ ๋™์ž‘ ์œ ๋ฌด ํ™•์ธ

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ถœ๋ ฅ๋˜๋Š”๋ฐ

    ์—ฌ๊ธฐ์„œ ๋…ธ๋ž€์ƒ‰์œผ๋กœ ํ‘œ์‹œํ•ด๋†“์€ ๋ถ€๋ถ„์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ด€๋ จ๋œ ๋กœ๊ทธ์ด๊ณ ,
    ๋งˆ์ง€๋ง‰ ํ‘œ๊ธฐ๋œ H2 console available at '/h2'. Database available at 'jdbc:h2:mem:test ๋กœ๊ทธ๊ฐ€ '์ด์ œ H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์œผ๋ฉฐ, ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ ์ ‘์†ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ'์„ ์˜๋ฏธ

5. H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†

  • ๋กœ๊ทธ์—์„œ ํ™•์ธํ•œ URL ์ปจํ…์ŠคํŠธ์ธ /h2๋ฅผ ๋ณต์‚ฌํ•ด ์›น ๋ธŒ๋ผ์šฐ์ €์— localhost:8080/h2 ์ž…๋ ฅ

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ทธ์— ์ถœ๋ ฅ๋œ jdbc:h2:mem:test๋ฅผ ๋ณต์‚ฌํ•ด ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋œฌ ์ฐฝ์˜ [JDBC URL] ํ•ญ๋ชฉ์— ๋ถ™์—ฌ๋„ฃ๊ธฐ
    โ €
    ( ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋ณด์ธ๋‹ค๋ฉด H2 DB์— ์ •์ƒ์ ์œผ๋กœ ์ ‘์†ํ•œ ๊ฒƒ ! )
    โ €
    โžœ ์ด์ œ ์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌํ˜„ํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๋ฉด์„œ H2 DB์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜ ์ €์žฅ๋˜์—ˆ๋Š”์ง€ ๋“ฑ์„ H2 ์ฝ˜์†”์„ ํ†ตํ•ด์„œ ํ™•์ธ ๊ฐ€๋Šฅ

โœ”๏ธ H2 DB ๋””ํดํŠธ ์„ค์ •์˜ ๋ฌธ์ œ์ 

  • H2 DB๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์žฌ์‹œ์ž‘ ํ• ๋•Œ ๋งˆ๋‹ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ทธ์— ์ถœ๋ ฅ๋˜๋Š” JDBC URL์ด ๋งค๋ฒˆ ๋žœ๋คํ•˜๊ฒŒ ๋ฐ”๋€œ
    โžœ ๋งค๋ฒˆ ๋žœ๋คํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋œ JDBC URL์„ ๋‹ค์‹œ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์ƒ๋‹นํžˆ ๋ถˆํŽธ
    โ €
    โ— ์ด๋Š” application.yml ํŒŒ์ผ์— H2์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์„ค์ •์„ ํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
spring:
  h2:
    console:
      enabled: true
      path: /h2     # Context path ๋ณ€๊ฒฝ
  datasource:
    url: jdbc:h2:mem:test     # JDBC URL ๋ณ€๊ฒฝ

์œ„์™€ ๊ฐ™์ด URL Context path์™€ JDBC URL๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด, ๋žœ๋คํ•˜๊ฒŒ ๋ฐ”๋€Œ์ง€ ์•Š๊ณ  ๊ณ ์ •๋˜์–ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ !
( ์œ„ ์˜ˆ์‹œ์—์„œ๋Š” URL Context path - /h2, JDBC URL - jdbc:h2:mem:test๋กœ ์„ค์ • )


โœ๏ธ Spring Data JDBC ์ ์šฉ ์ˆœ์„œ

  1. build.gradle์— ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์œ„ํ•œ ์˜์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

  2. application.yml ํŒŒ์ผ์— ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์„ค์ • ํ•˜๊ธฐ

  3. โ€˜schema.sqlโ€™ ํŒŒ์ผ์— ํ•„์š”ํ•œ ํ…Œ์ด๋ธ” ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ

  4. application.yml ํŒŒ์ผ์—์„œ โ€˜schema.sqlโ€™ ํŒŒ์ผ์„ ์ฝ์–ด์„œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์ดˆ๊ธฐํ™” ์„ค์ • ์ถ”๊ฐ€

  5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘ํ•  ์—”ํ‹ฐํ‹ฐ(Entity) ํด๋ž˜์Šค ์ž‘์„ฑ

  6. ์ž‘์„ฑํ•œ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  Repository ์ธํ„ฐํŽ˜์ด์Šค ์ž‘์„ฑ

  7. ์ž‘์„ฑ๋œ Repository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„œ๋น„์Šค ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก DI

  8. DI ๋œ Repository์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„œ๋น„์Šค ํด๋ž˜์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— CRUD ์ž‘์—… ์ˆ˜ํ–‰

โ— ์„œ๋น„์Šค ๊ณ„์ธต์˜ Service ํด๋ž˜์Šค์™€ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต์˜ Repository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์—ฐ๋™ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š”์ง€๊ฐ€ ํ•ต์‹ฌ !


๐Ÿ˜œ ์‹ค์Šต

  • projects ๋‚ด์˜ be-template-jdbc 1

๐ŸŒˆ ๋Š๋‚€์ 

๊ทธ๋ž˜๋„ ๋งŽ์ด ์–ด๋ ต์ง€ ์•Š๊ณ  ์žฌ๋ฐŒ์—ˆ๋˜ ํ•˜๋ฃจ !!
ํ•˜์ง€๋งŒ ํƒ€๊ณ ํƒ€๊ณ  ์•Œ์•„๊ฐˆ ๊ฐœ๋…๋“ค์ด ๋งŽ๋‹ค ใ…  ํ™”์ดํŒ…

0๊ฐœ์˜ ๋Œ“๊ธ€