DB/JDBC

JDBC (Java Database Connectivity)

annovation 2025. 1. 9. 08:50

JDBC (Java Database Connectivity)

JDBC 자바 애플리케이션과 데이터베이스를 연결하고 상호작용할 수 있도록 지원하는 표준 API입니다.
이를 통해 자바 프로그램은 데이터베이스에서 데이터를 읽고 쓰거나 업데이트하며, 다양한 데이터베이스 시스템과 독립적으로 작업할 수 있습니다.

 

  • 소규모 애플리케이션에서 데이터베이스와 직접 연결해 작업
  • 대규모 애플리케이션에서는 JDBC를 기반으로 한 ORM 도구(Hibernate, JPA)와 함께 사용

역할

  1. 데이터베이스 연결
    • 데이터베이스와 연결을 설정하고 종료합니다.
  2. SQL 실행
    • SELECT, INSERT, UPDATE, DELETE와 같은 SQL 쿼리를 실행합니다.
  3. 결과 처리
    • SQL 쿼리의 실행 결과(조회된 데이터 등)를 처리합니다.
  4. DB 독립성 제공
    • MySQL, Oracle, PostgreSQL 등 다양한 DBMS를 동일한 방식으로 사용할 수 있게 해줍니다.

구성 요소

1. DriverManager

  • 데이터베이스 연결을 관리하는 클래스입니다.
  • JDBC 드라이버를 로드하고, 연결을 설정하거나 해제합니다.

2. Connection

  • 데이터베이스와의 연결을 나타냅니다.
  • 연결을 통해 SQL을 실행할 수 있습니다.

3. Statement

  • SQL 쿼리를 실행하는 객체입니다.
  • 정적 쿼리(Statement)와 동적 쿼리(PreparedStatement)를 실행할 수 있습니다.

4. ResultSet

  • SELECT 쿼리의 결과를 저장하고, 이를 탐색하거나 처리할 수 있습니다.

동작 흐름 

  1. JDBC 드라이버 로드
    • 데이터베이스와 연결할 수 있도록, DBMS에 맞는 JDBC 드라이버를 로드합니다.
  2. 데이터베이스 연결
    • DriverManager.getConnection()을 사용하여 DBMS와 연결을 설정합니다.
  3. SQL 실행
    • SQL 쿼리를 Statement 또는 PreparedStatement 객체를 사용해 실행합니다.
  4. 결과 처리
    • SELECT 쿼리의 경우, 결과는 ResultSet 객체로 반환되어 데이터를 탐색하고 처리합니다.
  5. 연결 종료
    • 사용이 끝난 Connection, Statement, ResultSet 객체를 닫아 자원을 해제합니다.

MySQL 연결 예시

import java.sql.*;

public class JdbcExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase"; // DB URL
        String username = "root"; // DB 사용자 이름
        String password = "password"; // DB 비밀번호

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {
            // 1. JDBC 드라이버 로드
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 데이터베이스 연결
            connection = DriverManager.getConnection(url, username, password);
            System.out.println("Connected to the database!");

            // 3. SQL 실행
            statement = connection.createStatement();
            String query = "SELECT * FROM users"; // SQL 쿼리
            resultSet = statement.executeQuery(query);

            // 4. 결과 처리
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                System.out.println("ID: " + id + ", Name: " + name);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 5. 자원 해제
            try {
                if (resultSet != null) resultSet.close();
                if (statement != null) statement.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

장단점 

* 장점

  1. 표준화된 인터페이스 제공
    • 모든 데이터베이스 시스템을 동일한 방식으로 다룰 수 있음
  2. 다양한 데이터베이스 지원
    • MySQL, Oracle, PostgreSQL, MS SQL Server 등 다양한 DBMS와 호환 가능
  3. 확장성
    • 추가적인 JDBC 드라이버를 통해 새로운 DBMS를 쉽게 지원할 수 있음
  4. 결과 처리의 유연성
    • ResultSet을 사용해 데이터를 행 단위로 탐색하거나 처리할 수 있음

* 단점

  1. 직접적인 코딩 필요
    • SQL을 직접 작성해야 하며, 반복적인 코드가 많아질 수 있음
  2. 복잡성 증가
    • 대규모 애플리케이션에서 JDBC만으로 데이터베이스를 처리하면 복잡하고 오류 발생 가능성이 높아짐
  3. SQL 의존성
    • 데이터베이스에 종속적인 SQL을 사용하면, 다른 DBMS로 전환하기 어려움

JDBC와 연관된 개념

1. JDBC 드라이버

  • 데이터베이스와 통신하기 위해 필요한 소프트웨어 구성 요소입니다.
  • 데이터베이스 벤더가 제공하며, 애플리케이션이 DBMS와 상호작용할 수 있게 합니다.
  • ex. MySQL용 mysql-connector-java, Oracle용 ojdbc.

2. Connection Pooling

  • 데이터베이스 연결을 재사용하여 성능을 개선하는 기술
  • JDBC 연결은 무겁기 때문에, 풀링을 통해 연결을 미리 만들어두고 필요할 때 가져다 씁니다.

3. ORM (Object-Relational Mapping)

  • JDBC의 복잡성을 줄이기 위해, 객체 지향 방식으로 데이터베이스를 다루는 기술
  • ex. Hibernate, JPA(Spring Data JPA)

요약

  • JDBC는 자바 애플리케이션과 데이터베이스 간의 표준화된 연결 방식으로, 다양한 DBMS를 다룰 수 있는 유연성을 제공합니다.
  • 하지만 직접적인 SQL 작성과 반복적인 코드 작성이 필요하므로, ORM 도구와 함께 사용하는 것이 일반적입니다.

출처

OpenAI ChatGPT (https://openai.com)

 

 

'DB > JDBC' 카테고리의 다른 글

JDBC 의존성 (Dependency)  (0) 2025.01.11