๐ ์ค๋ ๋ฐฐ์ด ๋ด์ฉ!
- 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 ์ ์ฉ ์์
- build.gradle์ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ํ ์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ
- application.yml ํ์ผ์ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ค์ ํ๊ธฐ
- ‘schema.sql’ ํ์ผ์ ํ์ํ ํ ์ด๋ธ ์คํฌ๋ฆฝํธ ์์ฑ
- application.yml ํ์ผ์์ ‘schema.sql’ ํ์ผ์ ์ฝ์ด์ ํ ์ด๋ธ์ ์์ฑํ ์ ์๋๋ก ์ด๊ธฐํ ์ค์ ์ถ๊ฐ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ๊ณผ ๋งคํํ ์ํฐํฐ(Entity) ํด๋์ค ์์ฑ
- ์์ฑํ ์ํฐํฐ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ ์ ์ฒ๋ฆฌํ Repository ์ธํฐํ์ด์ค ์์ฑ
- ์์ฑ๋ Repository ์ธํฐํ์ด์ค๋ฅผ ์๋น์ค ํด๋์ค์์ ์ฌ์ฉํ ์ ์๋๋ก DI
- DI ๋ Repository์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์๋น์ค ํด๋์ค์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ CRUD ์์
์ํ
โ ์๋น์ค ๊ณ์ธต์ Service ํด๋์ค์ ๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต์ Repository ์ธํฐํ์ด์ค๋ฅผ ์ด๋ป๊ฒ ์ฐ๋ํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋์ง๊ฐ ํต์ฌ !
๐ ์ค์ต
- projects ๋ด์ be-template-jdbc 1
๐ ๋๋์
๊ทธ๋๋ ๋ง์ด ์ด๋ ต์ง ์๊ณ ์ฌ๋ฐ์๋ ํ๋ฃจ !!
ํ์ง๋ง ํ๊ณ ํ๊ณ ์์๊ฐ ๊ฐ๋
๋ค์ด ๋ง๋ค ใ
ํ์ดํ
( ๋ณธ ๊ฒ์๋ฌผ์ 2022/10/28์ ์์ฑํ ๊ธ์ ์ฎ๊ธด ๊ธ์ ๋๋ค. ์๋ฌธ์ ์๊ธฐ์ ์์! )
'โข CodeStates BootCamp > Section 3' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ [Section3] 7. [ Spring MVC ] Spring Data JPA 1 (1) | 2023.04.11 |
---|---|
๐ [Section3] 6. [ Spring MVC ] Spring Data JDBC 2 (1) | 2023.04.10 |
๐ [Section3] 4. [ Spring MVC ] ์์ธ ์ฒ๋ฆฌ (0) | 2023.04.10 |
๐ [Section3] 3. [ Spring MVC ] ์๋น์ค ๊ณ์ธต (0) | 2023.04.10 |
๐ [Section3] 2. [ Spring MVC ] API ๊ณ์ธต 2 (0) | 2023.04.10 |