๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋‚˜์˜ ๋ชจ์–‘

046 | Spring Data JDBC ๋ณธ๋ฌธ

SEB/TIL

046 | Spring Data JDBC

kexon 2022. 8. 26. 20:11

๐ŸŽˆ JDBC(Java DataBase Connectivity)

๐Ÿงฉ JDBC

  • ์ž๋ฐ” DB ์—ฐ๊ฒฐ์— ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ ๋กœ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ DB์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ํ‘œ์ค€ API์ด๋‹ค.
  • JDBC API๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‹ค์–‘ํ•œ ๋ฒค๋”์˜ DB์™€ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฒค๋”: MySQL, mariaDB, Oracle, …

๐Ÿงฉ JDBC Workflow

  • JDBC API๋Š” JDBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋กœ๋”ฉํ•œ ํ›„ DB์™€ ์—ฐ๊ฒฐํ•œ๋‹ค.
  • JDBC Driver๋Š” DB์™€ ํ†ต์‹ ์„ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.
  • ๋™์ž‘ ํ๋ฆ„: JDBC ๋“œ๋ผ์ด๋ฒ„ ๋กœ๋”ฉ → Connection ๊ฐ์ฒด ์ƒ์„ฑ → Statement ๊ฐ์ฒด ์ƒ์„ฑ → ์ฟผ๋ฆฌ ์‹คํ–‰ → ResultSet ๊ฐ์ฒด์—์„œ ๋ฐ์ดํ„ฐ ์กฐํšŒ → Close: ResultSet / Statement / Connection

๐Ÿงฉ JDBC Connection Pool

๐ŸŽˆ Spring Data JDBC

  • ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ธฐ์ˆ ์˜ ์œ ํ˜•
    • SQL ์ค‘์‹ฌ
      • mybatis, Spring JDBC ๋“ฑ์ด ์žˆ๋‹ค.
    • ๊ฐ์ฒด(Object) ์ค‘์‹ฌ
      • JPA, Spring Data JDBC ๋“ฑ์ด ์žˆ๋‹ค.
      • JPA ๊ฐ™์€ ๊ฐ์ฒด(Object) ์ค‘์‹ฌ์˜ ๊ธฐ์ˆ ์„ ORM(Object-Relational Mapping) ๊ธฐ์ˆ ์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ์ธ๋ฉ”๋ชจ๋ฆฌ(In-memory) DB๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋œ ์ƒํƒœ์—์„œ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์ด ์ค‘์ง€๋˜๋ฉด ์ธ๋ฉ”๋ชจ๋ฆฌ DB ์—ญ์‹œ ์‹คํ–‰์ด ์ค‘์ง€๋˜์–ด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.
  • Spring์—์„œ ์ง€์›ํ•˜๋Š” CrudRepository ์ธํ„ฐํŽ˜์ด์Šค๋Š” CRUD์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ CRUD ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • application.properties ๋˜๋Š” application.yml ํŒŒ์ผ์˜ ์„ค์ • ์ •๋ณด ๋“ฑ๋ก์œผ๋กœ ๋‹ค์–‘ํ•œ ์„ค์ •(DB์„ค์ •, DB์ดˆ๊ธฐํ™” ์„ค์ • ๋“ฑ)์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ค‘๋ณต๋˜๋Š” ํ”„๋กœํผํ‹ฐ์˜ ์ž…๋ ฅ์„ ์ค„์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— application.yml ๋ฐฉ์‹์„ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.
  • ์—”ํ‹ฐํ‹ฐ(Entity) ํด๋ž˜์Šค์˜
    • ์ด๋ฆ„์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์— ๋งคํ•‘๋˜๊ณ ,
    • ๊ฐ๊ฐ์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์— ๋งคํ•‘๋œ๋‹ค.
    • ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— @Id๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค(Primary key) ์ปฌ๋Ÿผ๊ณผ ๋งคํ•‘๋œ๋‹ค.

๐Ÿงฉ Spring Data JDBC ์ ์šฉ ์ˆœ์„œ

  • build.gradle์— ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์œ„ํ•œ ์˜์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • application.yml ํŒŒ์ผ์— ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ค์ •ํ•œ๋‹ค.
  • ‘schema.sql’ ํŒŒ์ผ์— ํ•„์š”ํ•œ ํ…Œ์ด๋ธ” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  • application.yml ํŒŒ์ผ์—์„œ ‘schema.sql’ ํŒŒ์ผ์„ ์ฝ์–ด์„œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์ดˆ๊ธฐํ™” ์„ค์ •์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘ํ•  ์—”ํ‹ฐํ‹ฐ(Entity) ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  • ์ž‘์„ฑํ•œ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  Repository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  • ์ž‘์„ฑ๋œ Repository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„œ๋น„์Šค ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก DIํ•œ๋‹ค.
  • DI๋œ Repository์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„œ๋น„์Šค ํด๋ž˜์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— CRUD๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

'SEB > TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

057 | API Documentation, Swagger, SpringRest  (0) 2022.09.14
052 | Transaction  (0) 2022.09.05
045 | Checked / Unchecked / Customised Exception  (0) 2022.08.25
044 | Exception Handling in Spring MVC  (0) 2022.08.24
043 | Layer interconnect & Class Mapping  (0) 2022.08.23
Comments