๐ ์ธํ ๋ฆฌ์ ์ด์ MySQL ์ฐ๊ฒฐ, Spring boot์ JDBC ์ฐ๊ฒฐํ๊ธฐ
MySQL Workbench๋ฅผ ์ด์ง ์๊ณ IntelliJ ๋ด์์ DB๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ์ฐ๊ฒฐํ๋ค.
DB Browser๊ฐ ๋ณด์ด์ง ์๋๋ค๋ฉด, Database Navigator ํ๋ฌ๊ทธ์ธ์ ์ค์นํด์ผํ๋ค.
์๋ ๊ธ์ ์ฐธ๊ณ ํ์ฌ ์ค์นํ๊ธธ ๋ฐ๋๋ค.
์ฐธ๊ณ [IntelliJ] Community Edition์์ DB์กฐํํ๊ธฐ
DB name, user, password ๋ฑ์ ์ ๋ ฅํ๋ค.
Test Connection์ผ๋ก DB์ ์ฐ๊ฒฐ๋๋์ง ํ์ธํ ์ ์๋ค.
Connection์ ํด๋ฆญํ์ ๋ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ ์ ์๋ ์ฝ์์ด ์ด๋ฆฌ๊ฒ ๋๋ค.
์ข์ธก ์์ Schema๋ฅผ ํด๋ฆญํด ์ํ๋ ์คํค๋ง๋ฅผ ์ ํํ ํ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๋ค.
์ฝ์์ ์ํ๋ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๋ฉด MySQL์ Workbench๋ฅผ ์ด์ง ์๊ณ ๋ MySQL์ ๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก ์ ๋ ฅ๋์๋์ง ํ์ธํ ์ ์๋ค.
์ฐธ๊ณ [IntelliJ] DB ์ฐ๊ฒฐํ๊ธฐ - MySQL
Java Database Connectivity
Java ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ ๋ฐ ์ ๋ฐ์ดํธํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ Java์์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ์๋ฐ API
3๊ฐ์ง ๊ธฐ๋ฅ์ ํ์ค ์ธํฐํ์ด์ค๋ก ์ ์ํด ์ ๊ณตํ๋ค.
๐ ํ์ค ์ธํฐํ์ด์ค
1. java.sql.Connection - ์ฐ๊ฒฐ
2. java.sql.Statement - SQL์ ๋ด์ ๋ด์ฉ
3. java.sql.ResultSet - SQL ์์ฒญ ์๋ต
Java Application ๋ด์์ JDBC API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ค.
Java Application -> JDBC API -> JDBC Driver -> Database
- JDBC ๋๋ผ์ด๋ฒ ๋ก๋ฉ : ์ฌ์ฉํ๊ณ ์ ํ๋ JDBC ๋๋ผ์ด๋ฒ ๋ก๋ฉ
- Connection ๊ฐ์ฒด ์์ฑ : DriverManager๋ฅผ ํตํด DB์ ์ฐ๊ฒฐ๋๋ Session์ธ Connection ๊ฐ์ฒด ์์ฑ
- Statement ๊ฐ์ฒด ์์ฑ : ์์ฑ๋ ์ฟผ๋ฆฌ๋ฌธ์ ์คํํ๊ธฐ ์ํ ๊ฐ์ฒด์ธ Statement ๊ฐ์ฒด ์์ฑ
- Query ์คํ : ์์ฑ๋ Statement ๊ฐ์ฒด๋ฅผ ์ด์ฉํด ์ ๋ ฅํ SQL Query ์คํ
- ResultSet ๊ฐ์ฒด๋ก๋ถํฐ ๋ฐ์ดํฐ ์กฐํ : ์คํ๋ SQL Query๋ฌธ์ ๋ํ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ์
- ResultSet ๊ฐ์ฒด Close : ์ฌ์ฉ๋ ๊ฐ์ฒด๋ค์ ์ฌ์ฉํ ์์ ์ญ์์ผ๋ก Close
- Statement ๊ฐ์ฒด Close : ์ฌ์ฉ๋ ๊ฐ์ฒด๋ค์ ์ฌ์ฉํ ์์ ์ญ์์ผ๋ก Close
- Connection ๊ฐ์ฒด Close : ์ฌ์ฉ๋ ๊ฐ์ฒด๋ค์ ์ฌ์ฉํ ์์ ์ญ์์ผ๋ก Close
์ฐธ๊ณ [Java] JDBC๋ ๋ฌด์์ธ๊ฐ? - Java Database Connectivity
2๊ฐ์ ํ์ผ์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
runtimeOnly 'com.mysql:mysql-connector-j' //MySQL
Spring Boot Starter๋ฅผ ์ด์ฉํด Spring Boot๋ฅผ ๊ตฌ์ฑํ ๋ MySQL ์์กด์ฑ์ ์ถ๊ฐํด์ฃผ๋ฉด ์๋์ผ๋ก ์ ๋ ฅ๋๋ค.
#MySQL
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#DB Source url
#serverTimezone์ ์ค์ ํ์ง ์์ผ๋ฉด ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ Time zone์ผ๋ก ์ฐ๊ฒฐ์ด ๋งบ์ด์ง๋ค.
#ํ๊ธ ์ฌ์ฉ์ ์ํด characterEncoding ๋ํ UTF-8๋ก ๋ฌธ์ ์ธ์ฝ๋ฉ ํด์ผํ๋ค.
spring.datasource.url=jdbc:mysql://{DB์ฃผ์ ๋๋ localhost}:{port}/{DB์ด๋ฆ}?serverTimezone=UTC&characterEncoding=UTF-8
#DB User Name
spring.datasource.username={user name}
#DB Password
spring.datasource.password={user pw}
#error sql show : ์ฝ์์์ ์๋ฌ๊ฐ ๋ฐ์ํ sql๋ฌธ์ ๋ณด์ฌ์ค๋ค.
spring.jpa.show-sql=true
#DDL(create,alter,drop) > create/update
#create๋ก ์ค์ ํ ๊ฒฝ์ฐ : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ชจ๋ ํ
์ด๋ธ์ ์คํ๋ง๋ค ์๋ก ๋ง๋ ๋ค.
#update๋ก ์ค์ ํ ๊ฒฝ์ฐ : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ์กด ํ
์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๋ํด์ง๋ค.
spring.jpa.hibernate.ddl-auto={create or update}
#SQL formatting print : Hibernate๊ฐ DB์ ์ํํ๋ ๋ชจ๋ ์ฟผ๋ฆฌ๋ฌธ์ ์ฝ์์ ์ถ๋ ฅํ๋ค.
spring.jpa.properties.hibernate.format_sql=true
SQL formatting print์ ๊ด๋ จํ ์ ๋ณด๋ ์๋ ๊ธ์ ์ถ๊ฐ๋ก ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.
์ฐธ๊ณ [Spring] hibernate ์ค์ ์ ๋ณด
์ ํ์ผ๋ค์ ์ค์ ํ ๋ค ์คํ์์ผฐ์ ๋, ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
์ด๋ ํ์ฌ ์ฐ๊ฒฐ๋์ด ์๋ ๋ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์คํค๋ง๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ผญ ์คํ์ํค ์ ์คํค๋ง๊ฐ ์๋์ง ํ์ธํ ํ, ์๋ค๋ฉด ์คํค๋ง๋ฅผ ์์ฑํ๊ธธ ๋ฐ๋๋ค.
์ฐธ๊ณ SpringBoot MySQL ์ฐ๋