[Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (6) ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA
ยท
๐Ÿ“ Language/โœ JAVA
์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  6. ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA๋งŒ ์‚ฌ์šฉํ•ด๋„ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•˜๊ณ  ๊ฐœ๋ฐœํ•ด์•ผ ํ•  ์ฝ”๋“œ๋„ ํ™•์—ฐํžˆ ์ค„์–ด๋“ค์—ˆ๋‹ค. ์—ฌ๊ธฐ์— ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋ผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ธฐ์กด์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๊ตฌํ˜„ ํด๋ž˜์Šค ์—†์ด ์ธํ„ฐํŽ˜์ด์Šค ๋งŒ์œผ๋กœ ๊ฐœ๋ฐœ์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฐ˜๋ณต ๊ฐœ๋ฐœํ•ด์˜จ ๊ธฐ๋ณธ CRUD ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•œ๋‹ค. ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋Š” JPA๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๊ธฐ์ˆ ์ด๋‹ค. JPA์™€ ๋™์ผํ•œ ํ™˜๊ฒฝ ์„ค์ •์„ ๊ฐ€์ง„๋‹ค. ์ด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹ค๋ฌด์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋Š” ์ด์ œ ์„ ํƒ์ด ์•„๋‹ˆ๋ผ ํ•„์ˆ˜์ด๋‹ค. ๋”๋ณด๊ธฐ ์‹ค๋ฌด์—์„œ๋Š” JPA์™€ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ๋ณต์žกํ•œ ๋™์  ์ฟผ๋ฆฌ..
[Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (5) JPA
ยท
๐Ÿ“ Language/โœ JAVA
์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  5. JPA JPA๋Š” ๊ธฐ์กด์˜ ๋ฐ˜๋ณต ์ฝ”๋“œ๋Š” ๋ฌผ๋ก ์ด๊ณ  SQL๋„ ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ์‹คํ–‰ํ•ด์ค€๋‹ค. SQL๊ณผ ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์˜ ์„ค๊ณ„์—์„œ ๊ฐ์ฒด ์ค‘์‹ฌ์˜ ์„ค๊ณ„๋กœ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. 1) ํ™˜๊ฒฝ ์„ค์ • build.gradle ํŒŒ์ผ์— JPA, h2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€ spring-boot-starter-data-jpa: ๋‚ด๋ถ€์— jdbc ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•œ๋‹ค. ๋”ฐ๋ผ์„œ jdbc๋Š” ์ œ๊ฑฐํ•ด๋„ ๋œ๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ์— JPA ์„ค์ • ์ถ”๊ฐ€ show-sql: JPA๊ฐ€ ์ƒ์„ฑํ•˜๋Š” SQL์„ ์ถœ๋ ฅํ•œ๋‹ค. ddl-auto: JPA๋Š” ํ…Œ์ด๋ธ”์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ none์€ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๋ˆ๋‹ค. create๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—”ํ‹ฐํ‹ฐ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ…Œ์ด๋ธ”๋„ ์ง์ ‘ ์ƒ์„ฑํ•ด์ค€๋‹ค..
[Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (4) ์Šคํ”„๋ง JDBC Template
ยท
๐Ÿ“ Language/โœ JAVA
์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  4. ์Šคํ”„๋ง JDBC Template ์ˆœ์ˆ˜ JDBC์™€ ๋™์ผํ•œ ํ™˜๊ฒฝ ์„ค์ •์ด๋‹ค. ์Šคํ”„๋ง JDBC Template, MyBatis์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” JDBC API์—์„œ ๋ณธ ๋ฐ˜๋ณต ์ฝ”๋“œ๋ฅผ ๋Œ€๋ถ€๋ถ„ ์ œ๊ฑฐํ•ด์ค€๋‹ค. ํ•˜์ง€๋งŒ SQL์€ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค. package hello.hello.spring.repository; import hello.hello.spring.domain.Member; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; im..
[Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (3) ์Šคํ”„๋ง ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
ยท
๐Ÿ“ Language/โœ JAVA
์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  3. ์Šคํ”„๋ง ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ด๋ฒˆ ํ…Œ์ŠคํŠธ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ DB๊นŒ์ง€ ์—ฐ๊ฒฐํ•œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์ด๋‹ค. ์ด์ „ ํ…Œ์ŠคํŠธ๋Š” ์ˆœ์ˆ˜ ์ž๋ฐ” ์ฝ”๋“œ๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์ด๋‹ค. ์ˆœ์ˆ˜ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ๋Œ€๋ถ€๋ถ„ ์ข‹์€ ํ…Œ์ŠคํŠธ์ด๊ณ  ์„ค๊ณ„๊ฐ€ ์ž˜ ๋˜์–ด์žˆ๋Š” ๊ฒƒ์ด๋‹ค. @SpringBootTest: ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•จ๊ป˜ ์‹คํ–‰ํ•œ๋‹ค. @Transactional: ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ์ด ์• ๋…ธํ…Œ์ด์…˜์ด ์žˆ์œผ๋ฉด, ํ…Œ์ŠคํŠธ ์‹œ์ž‘ ์ „์— ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์™„๋ฃŒ ํ›„์— ๋กค๋ฐฑํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด DB์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‹ค์Œ ํ…Œ์ŠคํŠธ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค. (@AfterEach ๋ถˆํ•„์š”) @Commit: @Transactional๊ฐ€ ์žˆ์–ด๋„ ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚œ ํ›„ DB์— ๋ฐ˜์˜ํ•œ๋‹ค. package hello.hello.spring.serv..
[Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (2) ์ˆœ์ˆ˜ JDBC
ยท
๐Ÿ“ Language/โœ JAVA
์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  2. ์ˆœ์ˆ˜ JDBC ์ด๋ฒˆ ๊ธ€์€ `์•„์ฃผ ์˜ค๋ž˜์ „์—๋Š” ์ด๋ ‡๊ฒŒ JDBC API๋ฅผ ์ง์ ‘ ์ฝ”๋”ฉํ–ˆ๊ตฌ๋‚˜` ์ •๋„๋กœ๋งŒ ์ฐธ๊ณ ๋กœ ์•Œ์•„๋‘์ž 1) ํ™˜๊ฒฝ ์„ค์ • build.gradle ํŒŒ์ผ์— jdbc, h2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€ ์Šคํ”„๋ง ๋ถ€ํŠธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์„ค์ • ์ถ”๊ฐ€ url์€ ์ด์ „ ๊ธ€์— ์„ค์น˜ํ•œ h2์˜ url์„ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค. ๋งŒ์•ฝ driver class name ์ž…๋ ฅ ์‹œ ๋นจ๊ฐ„ ๊ธ€์”จ๋กœ ๋…ธ์ถœ๋œ๋‹ค๋ฉด, build.gradle๋ฅผ ๋‹ค์‹œ ๋กœ๋“œํ•˜๋ฉด ๋œ๋‹ค. 2) Jdbc ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ตฌํ˜„ package hello.hello.spring.repository; import hello.hello.spring.domain.Member; import org.springframework.jdbc.datasource.Dat..
[Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (1) H2 DB ์„ค์น˜
ยท
๐Ÿ“ Language/โœ JAVA
์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  ์ง€๊ธˆ๊นŒ์ง€๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ์„ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๊ฐ€ ๋‚ด๋ ค๊ฐ€๋ฉด ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋˜ ๋ฐ์ดํ„ฐ๋“ค์ด ์‚ฌ๋ผ์กŒ๋‹ค. ๊ทธ๋ž˜์„œ ์‹ค๋ฌด์—์„œ๋Š” DB(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)์— ๋ฐ์ดํ„ฐ๋“ค์„ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค. ์ˆœ์ˆ˜ JDBC: JDBC๋Š” DB SQL์„ ์ด์šฉํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์™€ DB๋ฅผ ์—ฐ๊ฒฐํ•  ๋•Œ ํ•„์š”ํ•œ ๊ธฐ์ˆ ๋กœ ์ˆœ์ˆ˜ JDBC๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์˜ˆ์ „์— ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค. ์Šคํ”„๋ง JDBC Template: ์ˆœ์ˆ˜ JDBC๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์šฐ๋‹ˆ ์Šคํ”„๋ง์ด ์ค‘๋ณต ์ œ๊ฑฐ์™€ ๊ฐ™์€ ์ž‘์—…์„ ํ•œ Template์„ ์ œ๊ณตํ•˜๊ฒŒ ๋œ๋‹ค. ์ด ๊ธฐ์ˆ ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ DB๋กœ SQL์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. JPA: SQL์„ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ง์ ‘ ์งœ๋Š” ๊ฒƒ์ด ์•„๋‹Œ JPA๊ฐ€ ๊ฐ์ฒด์˜ ๋“ฑ๋ก, ์‚ญ์ œ, ์ˆ˜์ • ๋“ฑ ์ฟผ๋ฆฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA: JPA๋ฅผ ํŽธ๋ฆฌ..