Bibi's DevLog ๐ค๐
[TIL] JDBC์ DB ์ฐ๊ฒฐ - JDBC๋ก Docker์ MySQL ์ฐ๊ฒฐ (์ฝ์ง ๋ง์) ๋ณธ๋ฌธ
[TIL] JDBC์ DB ์ฐ๊ฒฐ - JDBC๋ก Docker์ MySQL ์ฐ๊ฒฐ (์ฝ์ง ๋ง์)
๋น๋น bibi 2021. 1. 30. 23:53[210130]
๋ฐ์ ์ผ๊ณผ๋ฅผ ๋๋ด๊ณ ์ ๋
์ ์กฐ๊ธ์ด๋ผ๋ ๊ณต๋ถํ๋ ค๊ณ ์ฑ
์์ ์์๋ค.
์ด์ ๋ชป ๋๋ธ JDBC - MySQL ์ฐ๊ฒฐ์ ์ํด..
ํ ์๊ฐ ์ ๋ ์ฝ์งํ๊ณ ๋๋์ด ์ฑ๊ณตํ๋ค!! ๐
์ค๋ TIL์๋ ๋์ ์ฝ์ง๋ด์ญ์ ๊ณต์ ํ๋ ค๊ณ ํ๋ค.
TIL
๋ด๊ฐ ๊ณ์ ๋ง์ฃผ์น ์ค๋ฅ๋java.sql.SQLException: Access denied for user 'ID'@'localhost' (using password : YES)
์๋ค.
๊ตฌ๊ธ๋ง ๊ฒฐ๊ณผ ์ ์ค๋ฅ๋ ์๋์ ๋ ๊ฒฝ์ฐ ๋ฐ์ํ๋ค๊ณ ํ๋ค.
- MySQL์๋ฒ์ ์ฌ์ฉํ๋ ค๋ ์ฌ์ฉ์(ID)์ ํจ์ค์๋๊ฐ ํ๋ฆฐ ๊ฒฝ์ฐ - ํจ์ค์๋ ํ์ธ ํ์ (์ถ์ฒ)
- ํด๋น ip์ฃผ์๋ก์ ์ ๊ทผ์ด ์ ํ๋ ๊ฒฝ์ฐ - ๊ถํ ๋ถ์ฌ ํ์ (์ถ์ฒ)
๋ถ๋ช
ํ ๋๋ MySQL์ ํด๋น ์์ด๋๋ฅผ ๋ง๋ค์ด ๋๊ณ , ip์ฃผ์๋ ๋์ผํ๊ฒ ์ง์ ํด ๋๊ณ , ๊ถํ๋ ๋ถ์ฌํด ๋์๋๋ฐ
์ ์ ์ค๋ฅ๊ฐ ๊ณ์ ๋จ๋์ง ๋ต๋ตํ๋ค.
๊ทธ๋์
- MySQL ์ฌ์ฉ์ ์กฐํ, ์ถ๊ฐ ๊ถํ๋ถ์ฌ ๋ ํด ๋ณด์๋ค.
- ์ฌ์ฉ์ ์กฐํ :
USE mysql;
-select user, host from user;
- ์ฌ์ฉ์ ์ถ๊ฐ :
mysql -u root -p mysql
๋ก ์ ์ ํ,create user 'USER_ID'@'ip์ฃผ์' identified by 'USER_PASSWORD';
- ์ฌ์ฉ์ ๊ถํ๋ถ์ฌ :
grant all privileges on DATABASE_NAME.* to USER_ID@'ip์ฃผ์';
'ip์ฃผ์'
์'%'
์ ๋ ฅ์ ์ธ๋ถ์์๋ ์ ์ ๊ฐ๋ฅ.
- ํน์๋ ํด์ MySQL ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ๋ ํด ๋ณด์๋ค.
- ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ :
mysql -u root -p mysql
๋ก ์ ์ ํ,USE mysql;
-UPDATE user set password=password('๋น๋ฐ๋ฒํธ') WHERE user='์ฌ์ฉ์';
๊ทธ๋๋ ์ ๋๋ค.๐ญ
๊ทธ๋ฐ๋ฐ ๋ฌธ๋..
- ๋ด๊ฐ ๋ด ์ปดํจํฐ์ ์ค๋ ์ ์ ์ํ์ฝ๋ฉ DATABASE๊ฐ์๋ฅผ ๋ค์ผ๋ฉด์,
์ค์ต์ฉ์ผ๋ก Bitnami๋ฅผ ํตํด MySQL์ ์ค์นํ ์ ์ด ์๋ค๋ ์ฌ์ค๊ณผ.. - ์ง๊ธ Docker์ MySQL์ปจํ ์ด๋์ ์ฐ๊ฒฐํ๋ ค ํ๊ณ ์๋ค๋ ์ฌ์ค...
์ ๊นจ๋ซ๊ฒ ๋์๋ค.
- ์ ๊นจ๋ซ๊ณ ํ๋ ๋ฒ๋ก Bitnami์ ๋ค์ด๊ฐ ๋ณด์๋ค.
์ด๋์ localhost
๋ก ์๋ฌด๋ฆฌ ์ ์ด๋ ์ฐ๊ฒฐ์ด ์ ๋์๊ตฌ๋.. ์ถ์ด์ ์ผ๋ฅธ Stop ํ๊ณ , ๋ค์ ์คํํด ๋ณด๋
์๊น์ ๋ค๋ฅด๊ฒ
java.sql.SQLException: Access denied for user 'bibi'@'172.17.0.1' (using password: YES)
๋ผ๋ ์ค๋ฅ ๋ฉ์์ง๊ฐ ๋ด๋ค.
IP์ฃผ์๊ฐ ๋ฐ๋์๋ค. 172.17.0.1
์ ์ฌ์ฉํ ์ ์ด ์๋๋ฐ ๋ฌด์จ ์ฃผ์์ผ๊น?
์ถ์ด์ ๊ฒ์ํด ๋ณด๋..
Docker์ ์ธํฐํ์ด์ค๊ฐ ๋์ํ ๋ IP๊ฐ ์๋์ผ๋ก 172.17.0.1 ๋ก ๋ฐฐ์ ๋๋ค. ๊ณ ํ๋ค.
์ธ์์.. ๊ทธ๊ฒ๋ ๋ชจ๋ฅด๊ณ localhost
๋ก ์ฐ๊ฒฐํ๋ฉด์ ์ ์๋ผ!! ํ๊ณ ์์๋ค๋..
์ ๋ง ๋จ ๋ณด๊ธฐ ๋ถ๋๋ฝ์ง๋ง ๊ทธ๋๋ ์ด๋ ๊ฒ ๊ณต์ ํด ๋ณธ๋ค. ๋๊ตฐ๊ฐ์๊ฒ๋ ๋์์ด ๋ ์๋ ์๊ฒ ์ง..
๊ฒฐ๋ก
๊ฒฐ๊ตญ ๋์ ๊ฒฝ์ฐ ๋ฌธ์ ๋
- ์ด๋ฏธ ๋ก์ปฌ(๋ด ์ปดํจํฐ)์ ์ค์น๋ MySQL์ด ์์๊ณ , ๋ก์ปฌ MySQL์ ๋ํด ์ฌ๋ฐ๋ฅด์ง ์์ ID์ ๋น๋ฐ๋ฒํธ๋ก ์ ๊ทผ์ ์๋ํ๋ค.
- Docker์ ์ค์นํ MySQL์ ์ ์ํ๋ ค๊ณ ํ๋ฉด์ IP์ฃผ์๋ฅผ
172.17.0.1
์ด ์๋localhost
๋ก ์ ์ํ๋ ค ํ๋ค.
์๊ณ ,
ํด๊ฒฐ์ฑ ์
- Bitnami๋ฅผ ํตํด ๋ก์ปฌ MySQL์ ์ข ๋ฃํ๋ค
- Docker MySQL์์
172.17.0.1
์ ip์ฃผ์๋ฅผ ๊ฐ๋ ์ฌ์ฉ์๋ฅผ ์์ฑํ๊ณ , ๊ถํ์ ๋ถ์ฌํ๊ณ , ๊ทธ ์ฌ์ฉ์๋ก ๋ค์ ์ฐ๊ฒฐ์ ์๋ํ๋ค.
์๋ค.
์๋๋ ๋ด๊ฐ ์ค์ตํ ์ ์ฒด ์ฝ๋์ด๋ค.
JDBC
.. ์ด์ ์ TIL์ ์ด์ด์ ..
*์ด ์์ ๋ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ๋ฉฐ ๋ฐ๋ผํ์ต๋๋ค.
(์ค๋น) MySQL๊ธฐ์ค, ๋ด ํ๋ก์ ํธ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ mysql-connector-java-๋ฒ์ ๋ฒํธ.jar
๋ฅผ ์ถ๊ฐํ๋ ๋ฐ์ ์ฑ๊ณตํ๋ค๋ฉด ์๋๋ฅผ ์ด์ด์ ์งํํ๋ค.
(์ค๋น) ์ฐ๊ฒฐ์ ์ํ๋ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค testdb
๊ฐ ์กด์ฌํ๊ณ , ์ฌ์ฉ์ IDID
(๋น๋ฐ๋ฒํธ PWPW
) ๊ฐ ์กด์ฌํด์ผ ํ๋ค.
// (์ค๋น)mysql-connector-java-๋ฒ์ -bin.jar ํ์ผ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ด์ผ ํจ.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
// import ํด์ผ ํ๋ ์ธ ํด๋์ค๋ค
public class UseMySQL {
public static void main(String[] args) {
// Connection๊ฐ์ฒด๋ฅผ ์๋์์ฑ์ผ๋ก importํ๋ค. java.sql.Connection
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver"); // (MySQL์ ๋๋ผ์ด๋ฒ ํด๋์ค ๊ฐ์ ธ์ค๊ธฐ)
// 1. ๋๋ผ์ด๋ฒ(์ธํฐํ์ด์ค)๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ๋ก๋ฉ. ๊ฐ DB๋ง๋ค ํด๋์ค๋ช
์ด ๋ค๋ฆ. ์๋ MySQL์ ๊ฒฝ์ฐ.
String url = "jdbc:mysql://localhost:3306/testdb";
// 2. ์ฐ๊ฒฐํ๊ธฐ - ๋๋ผ์ด๋ฒ ๋งค๋์ ์๊ฒ Connection๊ฐ์ฒด๋ฅผ ๋ฌ๋ผ๊ณ ์์ฒญ.
// Connection์ ์ป๊ธฐ ์ํด ํ์ํ url๋ ๊ฐ DB๋ง๋ค ๋ค๋ฆ.
// ์๋ MySQL์ ๊ฒฝ์ฐ - jdbc:mysql://localhost/์ฌ์ฉํ db์ด๋ฆ.
conn = DriverManager.getConnection(url, "IDID", "PWPW");
// 3. DB(MySQL)์ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์ปค๋ฅ์
์ ๋ณด ์
๋ ฅ (url, user, password).
// getConnection() ์ ๋ฆฌํด๊ฐ์ธ Connection๊ฐ์ฒด๋ฅผ ํตํด ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆฌ๋ statement๋ฅผ ์์ฑํ ์ ์๋ค.
// (SELECTํ ๋๋ createStatement(), INSERT์์๋ prepareStatement() .. ํธ์ถ
System.out.println("์ฐ๊ฒฐ ์ฑ๊ณต");
} catch (ClassNotFoundException e) {
System.out.println("๋๋ผ์ด๋ฒ ๋ก๋ฉ ์คํจ");
} catch (SQLException e) {
System.out.println("์๋ฌ : " + e);
} finally {
try {
if (conn != null && !conn.isClosed()) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
์ฐ๊ฒฐ ์ฑ๊ณต!๐
๋ด์ผ์ ์ด์ด์ JDBC ์์ฉ ์์ ๋ฅผ ๋ฐ๋ผํด ๋ด์ผ๊ฒ ๋ค.