๐ŸŒฟ Spring ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ์ด๊ฑด ๊ผญ ์•Œ์•„์•ผํ•ฉ๋‹ˆ๋‹ค #1 - JDBC, DriverManager

๊น€ํฌ๋งยท2023๋…„ 10์›” 5์ผ
8
post-thumbnail

๊ฐœ์š”

Spring, Spring Boot ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ ๊ณ„์‹  ๊ฐœ๋ฐœ์ž ๋ถ„๋“ค์€ ๋ชจ๋‘ JDBC๋ผ๋Š” ๊ฒƒ์„ ๋“ค์–ด๋ณด์…จ์„ ๊ฒƒ์ด๋ฉฐ,

JPA์™€ ๊ฐ™์€ ORM ๊ธฐ์ˆ ๋„ ์‚ฌ์šฉํ•˜์‹œ๋ฉด์„œ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ ๊ณ„์‹ค ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜ƒ

์ œ๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ•จ๊ป˜ ํ˜‘๋ ฅํ•˜๋Š” ์šฐ๋ฆฌ ๊ฐœ๋ฐœ์ž๋“ค์€ย 

JDBC๋ผ๋Š” ๊ฐœ๋…์„ ๋ฌด์กฐ๊ฑด ์•Œ๊ณ ๊ฐ€์•ผ ํ•˜์ง€ ์•Š์„๊นŒ ํ•˜๊ณ  ์ƒ๊ฐ์„ ํ•ด๋ด…๋‹ˆ๋‹ค.


JDBC ๋“ฑ์žฅ ์ด์œ 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋“ค์€ ๋Œ€๋ถ€๋ถ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•˜๋ฉด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

1. ์ปค๋„ฅ์…˜ ์—ฐ๊ฒฐ - ์ฃผ๋กœ TCP/IP๋ฅผ ์‚ฌ์šฉํ•ด ์ปค๋„ฅ์…˜์„ ์—ฐ๊ฒฐํ•œ๋‹ค.

2. SQL ์ „๋‹ฌ - ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” DB๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” SQL์„ ์—ฐ๊ฒฐ๋œ ์ปค๋„ฅ์…˜์„ ํ†ตํ•ด DB์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

3. ๊ฒฐ๊ณผ ์‘๋‹ต - DB๋Š” ์ „๋‹ฌ๋œ SQL์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ ์ด์ œ ๋ฌธ์ œ ์ƒํ™ฉ์ด ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(MySQL, Oracle, PostgreSQL ... )๋งˆ๋‹ค ์ปค๋„ฅ์…˜์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•, SQL ์ „๋‹ฌ๋ฐฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์‘๋‹ต๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด ๋ชจ๋‘ ๋‹ค๋ฅด๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ JDBC๋ผ๋Š” ์ž๋ฐ” ํ‘œ์ค€์ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.


JDBC ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค

JDBC(Java Database Connectivity)๋Š” ์ž๋ฐ”์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” Java API
JDBC๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ž๋ฃŒ๋ฅผ ์ฟผ๋ฆฌํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค. - ์œ„ํ‚ค๋ฐฑ๊ณผ

๋Œ€ํ‘œ์ ์œผ๋กœ ๋‹ค์Œ 3๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ํ‘œ์ค€์œผ๋กœ ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • java.sql.Connection: ์—ฐ๊ฒฐ
  • java.sql.Statement: SQL ๋‚ด์šฉ
  • java.sql.ResultSet: SQL ์š”์ฒญ ์‘๋‹ต

์ž๋ฐ”๋Š” ์ด๋ ‡๊ฒŒ ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•ด๋‘์—ˆ๊ณ  ๊ฐœ๋ฐœ์ž๋Š” ์ด ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์‚ฌ์šฉํ•ด์„œ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ‘

์ž, ๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ JDBC ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค๋Š” ๊ฒƒ์€ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€๋งŒ ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์žˆ๋‹ค๊ณ  ํ•ด์„œ ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•˜์ง€๋Š” ์•Š์ฃ ? ์ด์ œ DB์‚ฌ์—์„œ ์ด ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ œ๊ณตํ•ด์ค˜์•ผ ์ €ํฌ๊ฐ€ ๊ทธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ–‰๋ณตํ•œ ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ JDBC ๋“œ๋ผ์ด๋ฒ„๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

MySQL์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ MySQL JDBC ๋“œ๋ผ์ด๋ฒ„๋ผ๊ณ  ํ•˜๊ณ , Oracle DB์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ Oracle JDBC ๋“œ๋ผ์ด๋ฒ„๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.ย 

์ž ~ ๊ทธ๋Ÿฌ๋ฉด JDBC์˜ ๋“ฑ์žฅ์„ ํ†ตํ•ด ์ €ํฌ๋Š” 2๊ฐ€์ง€์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ ์ฝ”๋“œ๋„ ํ•จ๊ป˜ ๋ณ€๊ฒฝํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ
  2. ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋งˆ๋‹ค ์ปค๋„ฅ์…˜ ์—ฐ๊ฒฐ, SQL ์ „๋‹ฌ, ๊ฒฐ๊ณผ ์‘๋‹ต์„ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์„ ์ƒˆ๋กœ ํ•™์Šตํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ

JDBC์˜ ๋“ฑ์žฅ์œผ๋กœ ๋งŽ์€ ๊ฒƒ๋“ค์ด ํŽธ๋ฆฌํ•ด์กŒ์ง€๋งŒ, ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋งˆ๋‹ค SQL, ๋ฐ์ดํ„ฐํƒ€์ž… ๋“ฑ์˜ ์ผ๋ถ€ ์‚ฌ์šฉ๋ฒ•์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ANSI SQL ํ‘œ์ค€์ด๋ผ๋Š” ๊ฒƒ์ด ์žˆ๊ธด ํ•˜์ง€๋งŒ.. ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ๋ถ€๋ถ„๋งŒ ๊ณตํ†ตํ™”ํ–ˆ์–ด์„œ ํ•œ๊ณ„๊ฐ€ ์žˆ์ฃ  ใ… ใ…  ๋Œ€ํ‘œ์ ์œผ๋กœ ์‹ค๋ฌด์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํŽ˜์ด์ง• SQL์€ ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋งˆ๋‹ค ์‚ฌ์šฉ๋ฒ•์ด ๋‹ฌ๋ผ์š”..ใ…  ๊ทธ๋ž˜์„œ ๋ฐ”๋กœ ์™€์žฅ์ฐฝ ๋ฌด๋„ˆ์ ธ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด JDBC ์ฝ”๋“œ๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„๋„ ๋˜์ง€๋งŒ SQL์€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งž๋„๋ก ๋ณ€๊ฒฝํ•ด์•ผํ•˜์ฃ ย 
๊ทธ๋ž˜์„œ JPA์™€ ๊ฐ™์€ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋งˆ๋‹ค ๋‹ค๋ฅธ SQL์„ ์ •์˜ํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋„ ๋งŽ์€ ๋ถ€๋ถ„์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ƒ


DriverManager

์ž ์ด์ œ, 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๋ฅผ ๊นŠ๊ฒŒ ์•Œ์•„๊ฐ€ ๋” ๋‚˜์€ ๊ฐœ๋ฐœ์ธ์ƒ์„ ์‚ด์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ์‹œ๋‹ค. ๐ŸŒ

profile
์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด, ๊น€ํฌ๋ง์ž…๋‹ˆ๋‹ค.

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2023๋…„ 10์›” 18์ผ

๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์ด์ง€๋งŒ JDBC๊ฐ€ ์™œ ๋“ฑ์žฅํ–ˆ๋Š”์ง€ ์ด์ œ์•ผ ์•Œ๊ฒŒ ๋˜์—ˆ๋„ค์š” ๐Ÿ˜‚
๋‹ค์Œ ํŽธ์ด ๊ธฐ๋Œ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค ๐Ÿ‘๐Ÿ‘

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ