Spring, Spring Boot ํ๊ฒฝ์์ ๊ฐ๋ฐ์ ํ๊ณ ๊ณ์ ๊ฐ๋ฐ์ ๋ถ๋ค์ ๋ชจ๋ JDBC๋ผ๋ ๊ฒ์ ๋ค์ด๋ณด์ จ์ ๊ฒ์ด๋ฉฐ,
JPA์ ๊ฐ์ ORM ๊ธฐ์ ๋ ์ฌ์ฉํ์๋ฉด์ ๊ฐ๋ฐ์ ํ๊ณ ๊ณ์ค ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค ๐
์ ๊ฐ ์๊ฐํ๊ธฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํจ๊ป ํ๋ ฅํ๋ ์ฐ๋ฆฌ ๊ฐ๋ฐ์๋ค์ย
JDBC๋ผ๋ ๊ฐ๋ ์ ๋ฌด์กฐ๊ฑด ์๊ณ ๊ฐ์ผ ํ์ง ์์๊น ํ๊ณ ์๊ฐ์ ํด๋ด ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ๋ฐ์ดํฐ๋ค์ ๋๋ถ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณด๊ดํฉ๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์กฐํํ๋ฉด, ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
1. ์ปค๋ฅ์ ์ฐ๊ฒฐ - ์ฃผ๋ก TCP/IP๋ฅผ ์ฌ์ฉํด ์ปค๋ฅ์ ์ ์ฐ๊ฒฐํ๋ค.
2. SQL ์ ๋ฌ - ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ DB๊ฐ ์ดํดํ ์ ์๋ SQL์ ์ฐ๊ฒฐ๋ ์ปค๋ฅ์ ์ ํตํด DB์ ์ ๋ฌํฉ๋๋ค.
3. ๊ฒฐ๊ณผ ์๋ต - DB๋ ์ ๋ฌ๋ SQL์ ์ํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์๋ตํฉ๋๋ค.
๊ทธ๋ผ ์ฌ๊ธฐ์ ์ด์ ๋ฌธ์ ์ํฉ์ด ๋ํ๋๊ฒ ๋ฉ๋๋ค. ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค(MySQL, Oracle, PostgreSQL ... )๋ง๋ค ์ปค๋ฅ์ ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ, SQL ์ ๋ฌ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์๋ต๋ฐ๋ ๋ฐฉ๋ฒ์ด ๋ชจ๋ ๋ค๋ฅด๋ค๋ ์ ์ ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ JDBC๋ผ๋ ์๋ฐ ํ์ค์ด ๋ฑ์ฅํ๊ฒ ๋๋ ๊ฒ ์ ๋๋ค.
JDBC(Java Database Connectivity)๋ ์๋ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํ ์ ์๋๋ก ํ๋ Java API
JDBC๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์๋ฃ๋ฅผ ์ฟผ๋ฆฌํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค. - ์ํค๋ฐฑ๊ณผ
๋ํ์ ์ผ๋ก ๋ค์ 3๊ฐ์ง ๊ธฐ๋ฅ์ ํ์ค์ผ๋ก ํ ์ธํฐํ์ด์ค๋ก ์ ๊ณตํฉ๋๋ค.
์๋ฐ๋ ์ด๋ ๊ฒ ํ์ค ์ธํฐํ์ด์ค๋ฅผ ์ ์ํด๋์๊ณ ๊ฐ๋ฐ์๋ ์ด ํ์ค ์ธํฐํ์ด์ค๋ง ์ฌ์ฉํด์ ๊ฐ๋ฐ์ ํ๋ฉด ๋ฉ๋๋ค. ๐
์, ๊ทธ๋ผ ์ฌ๊ธฐ์ JDBC ํ์ค ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
๊ทธ๋ ์ง๋ง ํ์ค ์ธํฐํ์ด์ค๋ง ์๋ค๊ณ ํด์ ๊ธฐ๋ฅ์ด ๋์ํ์ง๋ ์์ฃ ? ์ด์ DB์ฌ์์ ์ด ํ์ค ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ๊ณตํด์ค์ผ ์ ํฌ๊ฐ ๊ทธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํด์ ํ๋ณตํ ๊ฐ๋ฐ์ ํ ์ ์์ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ JDBC ๋๋ผ์ด๋ฒ๋ผ๊ณ ํฉ๋๋ค.
MySQL์ ์ ๊ทผํ ์ ์๋ ๊ฒ์ MySQL JDBC ๋๋ผ์ด๋ฒ๋ผ๊ณ ํ๊ณ , Oracle DB์ ์ ๊ทผํ ์ ์๋ ๊ฒ์ Oracle JDBC ๋๋ผ์ด๋ฒ๋ผ๊ณ ํฉ๋๋ค.ย
์ ~ ๊ทธ๋ฌ๋ฉด JDBC์ ๋ฑ์ฅ์ ํตํด ์ ํฌ๋ 2๊ฐ์ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์์ต๋๋ค.
JDBC์ ๋ฑ์ฅ์ผ๋ก ๋ง์ ๊ฒ๋ค์ด ํธ๋ฆฌํด์ก์ง๋ง, ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค SQL, ๋ฐ์ดํฐํ์ ๋ฑ์ ์ผ๋ถ ์ฌ์ฉ๋ฒ์ด ๋ค๋ฆ ๋๋ค. ANSI SQL ํ์ค์ด๋ผ๋ ๊ฒ์ด ์๊ธด ํ์ง๋ง.. ํ์ง๋ง ์ผ๋ฐ์ ์ธ ๋ถ๋ถ๋ง ๊ณตํตํํ์ด์ ํ๊ณ๊ฐ ์์ฃ ใ ใ ๋ํ์ ์ผ๋ก ์ค๋ฌด์์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๋ ํ์ด์ง SQL์ ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ์ฌ์ฉ๋ฒ์ด ๋ฌ๋ผ์..ใ ๊ทธ๋์ ๋ฐ๋ก ์์ฅ์ฐฝ ๋ฌด๋์ ธ๋ด๋ฆด ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณ๊ฒฝํ๋ฉด JDBC ์ฝ๋๋ ๋ณ๊ฒฝํ์ง ์์๋ ๋์ง๋ง SQL์ ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง๋๋ก ๋ณ๊ฒฝํด์ผํ์ฃ ย
๊ทธ๋์ JPA์ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ๋ฉด ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ๋ค๋ฅธ SQL์ ์ ์ํด์ผ ํ๋ ๋ฌธ์ ๋ ๋ง์ ๋ถ๋ถ์ ํด๊ฒฐํ ์ ์์ต๋๋ค. ๐
์ ์ด์ , JDBC๋ฅผ ์ฌ์ฉํด์ ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค. โ๏ธ
import lombok.extern.slf4j.Slf4j;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import static hello.jdbc.connection.ConnectionConst.*;
@Slf4j
public class DBConnectionUtil {
public static Connection getConnection() {
try {
// URL = "jdbc:h2:tcp://localhost/~/test";
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
log.info("get connection={}, class={}", connection, connection.getClass());
return connection;
} catch (SQLException e) {
throw new IllegalStateException(e);
}
}
}
DriverManager๋ผ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์ ์ ์ป์ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ์ฐ๊ฒฐํ๋ ์ฝ๋์ ๊ณผ์ ์ ์ข ๋ ์์ธํ ์์๋ณด๋ฉด
Connection ์ธํฐํ์ด์ค๋ ํ์ค ์ปค๋ฅ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋๋ฐ H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ผ์ด๋ฒ๋ JDBC Connection ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ org.h2.jdbc.JdbcConnection์ ์ ๊ณตํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ํ๋ก์ฐ๋ก ์ปค๋ฅ์ ์ด ์งํ์ด ๋๋๋ฐ
JDBC๊ฐ ์ ๊ณตํ๋ DriverManager๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฑ๋ก๋ DB ๋๋ผ์ด๋ฒ๋ค์ ๊ด๋ฆฌํ๊ณ , ์ปค๋ฅ์ ์ ํ๋ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. getConnection()์ธ์๋ก ๋ค์ด์จ URL์ ๋ถ์ํ๊ณ ๋ฑ๋ก๋ ๋๋ผ์ด๋ฒ๋ค์๊ฒ ์์๋๋ก ๋ค์ ์ ๋ณด๋ฅผ ๋๊ฒจ์ ์ปค๋ฅ์ ์ ํ๋ํ ์ ์๋์ง ํ๋ํ๋ ํ์ธํฉ๋๋ค.
URL ์์) jdbc:h2:tcp://localhost/~/testย
jdbc:h2๋ก ์์ํ๋ฉด ์ด๊ฒ์ h2 ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๊ธฐ ์ํ ๊ท์น์ ๋๋ค.
์ด๋ ๊ฒ JDBC์ DriverManager๋ฅผ ์์๋ณด์์ต๋๋ค. ๊ฐ๋ฐ์๋ง ์ง์คํ๊ธฐ ์ํ ์ ํฌ ์ ์กฐ ๊ฐ๋ฐ์๋ถ๋ค์ ๋
ธ๋ ฅ์ด ๋ณด์ด๋ ๊ฒ ๊ฐ์ต๋๋ค.
์คํ๋ง ๊ฐ๋ฐ์๋ผ๋ฉด ๊ผญ ์๊ณ ๊ฐ์ฌํ๋ฉฐ JDBC๋ฅผ ๊น๊ฒ ์์๊ฐ ๋ ๋์ ๊ฐ๋ฐ์ธ์์ ์ด์๊ฐ ์ ์๋๋ก ํฉ์๋ค. ๐
๋ฐฑ์๋ ๊ฐ๋ฐ์์ด์ง๋ง JDBC๊ฐ ์ ๋ฑ์ฅํ๋์ง ์ด์ ์ผ ์๊ฒ ๋์๋ค์ ๐
๋ค์ ํธ์ด ๊ธฐ๋๊ฐ ๋ฉ๋๋ค ๐๐