최원종의 개발 블로그

JDBC(Java Database Connectivity) 본문

Java/JAVA 유용한 클래스

JDBC(Java Database Connectivity)

chl6698 2026. 4. 10. 09:45

JDBC는 자바 프로그램이 데이터베이스(DB)와 연결되어 데이터를 주고받을 수 있게 해주는

자바 표준 인터페이스(API)를 말한다.

 


JDBC의 필요성

  • MySQL, Oracle, PostgreSQL 등 수많은 데이터베이스가 있는데 JDBC가 없다면,
  • 개발자는 각 데이터베이스마다 서로 다른 접속 방식과 쿼리 전송 방법을 따로 공부해서 구현해야 한다
  • JDBC는 이를 하나로 통합하여, 어떤 DB를 쓰든 동일한 자바 코드(메서드)로 조작할 수 있게 해 준다


JDBC의 주요 구성 요소

 

  • JDBC API: 자바 애플리케이션에서 DB에 접근하기 위해 사용하는 인터페이스 집합 (java.sql, javax.sql 패키지)
  • JDBC Driver: 각 DB 제조사(Oracle, MySQL 등)에서 JDBC 인터페이스를 자기들의 DB에 맞게 구현한 라이브러리 (예: MySQL용 Connector/J)

JDBC 작업 흐름 (Workflow)

 

  1. 드라이버 로딩: 사용할 DB의 드라이버를 메모리에 올림.
  2. 연결 생성 (Connection): DB URL, 계정 정보를 통해 DB와 연결
  3. 문장 생성 (Statement/PreparedStatement): 실행할 SQL 쿼리를 준비
  4. 쿼리 실행: 준비된 SQL을 DB로 보냄
  5. 결과 처리 (ResultSet): SELECT 쿼리의 경우 결과 데이터를 받아와 처리
  6. 자원 해제 (Close): 사용한 연결과 객체들을 닫아 메모리를 관리

 


JDBC의 장단점

 

 

장점

  • 표준화: 특정 DB에 종속되지 않는 일관된 코드를 작성할 수 있다
  • 객체 지향적: 자바의 언어적 특성을 활용해 DB를 제어할 수 있

단점

  • 반복적인 코드: 연결 생성, 예외 처리, 자원 해제 등 매번 작성해야 하는 코드(Boilerplate code)가 많다.
  • SQL 의존성: 자바 코드 안에 SQL문이 직접 들어가 관리가 어려울 수 있다.

실습 기본 연결 코드

package ch01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JdbcHello {

    public static void main(String[] args) {
        // 연결 정보
        String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=Asia/Seoul";
        String user = "xxxxxxxx";
        String password = "xxxxxxxxx";
        // 실무에서 비밀번를 코드를 직접 작성 쓰지 않습니다.
        // 환경변수나 설정파일 사용할 수 있음 (.env, application.properties, application.ymal)

        try (Connection connection = DriverManager
                .getConnection(url, user, password)) {
            System.out.println("연결 성공 됨.");
            System.out.println("DB 제품명 : " + connection.getMetaData().getDatabaseProductName());
            System.out.println("DB 버전 : " + connection.getMetaData().getDatabaseProductVersion());

        } catch (SQLException e) {
            System.out.println("DB랑 연결 오류 발생 함");
            e.printStackTrace();
        }
    }

}

 


환경 변수 활용 코드

package ch01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JdbcHello2 {

    public static void main(String[] args) {
        // 연결 정보
        String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=Asia/Seoul";
        String user = System.getenv("DB_USER");
        String password = System.getenv("DB_PASSWORD");

        System.out.println("로컬 컴퓨터에 저장한 환경 변수 이름으로 값을 확인해 보자");
        System.out.println("user : " + user);
        System.out.println("password : " + password);

        try (Connection connection = DriverManager
                .getConnection(url, user, password)) {
            System.out.println("연결 성공 됨.");
            System.out.println("DB 제품명 : " + connection.getMetaData().getDatabaseProductName());
            System.out.println("DB 버전 : " + connection.getMetaData().getDatabaseProductVersion());

        } catch (SQLException e) {
            System.out.println("DB랑 연결 오류 발생 함");
            e.printStackTrace();
        }
    }

}

코드 핵심 포인트

DriverManager.getConnection(url, user, password)
  → JDBC URL, DB 계정, 비밀번호로 데이터베이스에 연결

try (Connection connection = ...) { }
  → try-with-resources 패턴
  → 블록이 끝나면 connection.close() 가 자동 호출됨
  → 연결을 안 닫으면 DB 연결이 쌓여서 서버가 터집니다

SQLException
  → DB 연결 실패, 잘못된 SQL, 권한 없음 등
  → JDBC 작업의 모든 에러는 SQLException 으로 처리

 


JDBC URL 형식 이해

jdbc:mysql://localhost:3306/shop?serverTimezone=Asia/Seoul
  │    │         │        │   │   └─ 옵션 파라미터
  │    │         │        │   └─ 데이터베이스 이름
  │    │         │        └─ 포트 번호 (MySQL 기본: 3306)
  │    │         └─ 서버 주소 (내 컴퓨터: localhost)
  │    └─ 데이터베이스 종류
  └─ JDBC 프로토콜

다른 데이터베이스의 URL 형식

MySQL      : jdbc:mysql://localhost:3306/dbname
Oracle     : jdbc:oracle:thin:@localhost:1521:dbname
PostgreSQL : jdbc:postgresql://localhost:5432/dbname
H2(인메모리) : jdbc:h2:mem:testdb

'Java > JAVA 유용한 클래스' 카테고리의 다른 글

JDBC 데이터 기본 조작 (CRUD) - 3  (0) 2026.04.14
JDBC 구성 요소 (아키텍처) - 2  (0) 2026.04.14
HTTP Client 연습 - 5  (0) 2026.04.01
공공데이터 API 실습 - HTTP - 4  (0) 2026.04.01
JSON 파싱 - HTTP-3  (0) 2026.04.01