JDBC(Java Database Connectivity)

박세현·2024년 10월 9일

추가공부

목록 보기
5/12
post-thumbnail

JDBC(Java Database Connectivity)

자바(Java)에서 데이터베이스에 연결하고, SQL 쿼리를 실행하여 데이터를 처리할 수 있도록 지원하는 표준 API입니다. JDBC는 자바 애플리케이션과 다양한 데이터베이스 시스템(예: MySQL, Oracle, PostgreSQL 등) 간의 상호 작용을 가능하게 해주는 중간 다리 역할을 합니다.

JDBC의 주요 기능

1. 데이터베이스 연결

JDBC는 자바 애플리케이션과 데이터베이스를 연결하기 위한 기능을 제공합니다. 이 연결은 JDBC 드라이버를 통해 이루어지며, JDBC는 데이터베이스 종류에 관계없이 표준화된 방식으로 이 작업을 수행할 수 있습니다.

2. SQL 쿼리 실행

JDBC를 통해 SQL 명령(SELECT, INSERT, UPDATE, DELETE)을 데이터베이스에 전달하고, 그 결과를 받아올 수 있습니다. 즉, 데이터베이스에 명령을 내리고 데이터를 처리하는 것이 가능합니다.

3. 결과 처리

SQL 쿼리의 결과는 JDBC를 통해 자바 애플리케이션으로 전달됩니다. JDBC는 이를 ResultSet 객체로 제공하며, 이를 통해 데이터베이스에서 반환된 결과를 처리할 수 있습니다.

4. 트랜잭션 관리

JDBC는 트랜잭션을 관리할 수 있는 기능을 제공합니다. 이를 통해 여러 SQL 작업을 하나의 트랜잭션으로 묶어, 작업이 모두 성공하면 커밋하고, 실패하면 롤백할 수 있습니다.

JDBC 동작 방식

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCExample {
    public static void main(String[] args) {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {
            // 1. JDBC 드라이버 로드 (드라이버는 데이터베이스에 따라 다름)
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 데이터베이스 연결 설정
            String url = "jdbc:mysql://localhost:3306/mydb";
            String user = "username";
            String password = "password";

            // 3. 데이터베이스 연결
            connection = DriverManager.getConnection(url, user, password);

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

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

1. JDBC 드라이버

JDBC는 데이터베이스와 직접 통신하지 않고, JDBC 드라이버를 통해 통신합니다. JDBC 드라이버는 특정 데이터베이스에 맞는 라이브러리로, JDBC가 데이터베이스에 접근할 수 있도록 해줍니다. 각 데이터베이스는 JDBC 표준에 맞는 드라이버를 제공해야 하며, 드라이버를 통해 SQL 명령이 데이터베이스로 전달됩니다.

2. 연결(Connection)

DriverManager 클래스를 사용해 데이터베이스에 연결합니다. 연결을 설정할 때 데이터베이스 URL, 사용자 이름, 비밀번호와 같은 정보를 제공해야 합니다.

3. SQL 명령 실행

연결이 성공하면 Statement 또는 PreparedStatement 객체를 사용해 SQL 명령을 실행할 수 있습니다. 이 객체를 통해 데이터베이스와 상호작용하며, SELECT 쿼리로 데이터를 조회하거나 INSERT, UPDATE, DELETE와 같은 작업을 수행할 수 있습니다.

4. 결과 처리(ResultSet)

SELECT 쿼리의 결과는 ResultSet 객체로 반환됩니다. 이를 통해 반환된 데이터를 한 행씩 순차적으로 읽거나 처리할 수 있습니다.

5. 연결 종료

모든 작업이 끝난 후에는 반드시 데이터베이스 연결을 종료해야 합니다. 이는 리소스를 낭비하지 않기 위한 중요한 작업입니다.

JDBC 주요 인터페이스 및 클래스

1. DriverManager

JDBC 드라이버를 관리하고 데이터베이스에 연결하는 역할을 합니다. getConnection() 메서드를 사용하여 데이터베이스 연결을 설정합니다.

2. Connection

데이터베이스와의 연결을 나타냅니다. SQL 명령을 실행하기 위해 Statement나 PreparedStatement를 생성하는 역할을 합니다. 트랜잭션 관리도 이 객체를 통해 이루어집니다.

3. Statement

SQL 쿼리를 실행하기 위한 객체입니다. 주로 간단한 SQL 문을 실행할 때 사용됩니다.

4. PreparedStatement

Statement의 하위 클래스이며, 파라미터화된 SQL 쿼리를 실행할 수 있습니다. 이를 통해 SQL 인젝션을 방지할 수 있으며, 복잡한 쿼리 처리에 적합합니다.

5. ResultSet

SELECT 쿼리의 결과를 저장하고, 그 결과를 탐색할 수 있도록 도와줍니다. next() 메서드를 통해 한 행씩 결과를 읽어올 수 있습니다.

JDBC의 장점

1. 데이터베이스 독립성

JDBC는 자바 표준 API이므로, 한 번 JDBC 코드를 작성하면 데이터베이스에 따라 코드 수정을 최소화할 수 있습니다. 데이터베이스 변경 시에는 드라이버만 바꾸면 대부분의 코드가 재사용 가능합니다.

2. 표준화된 방식

JDBC는 데이터베이스 연결과 쿼리 실행을 위한 표준화된 방법을 제공하므로, 개발자가 특정 데이터베이스에 맞춰 코드를 작성할 필요가 없습니다.

JDBC의 단점

1. 복잡한 코드

데이터베이스 작업을 수행할 때마다 연결, 쿼리 실행, 자원 해제 등의 과정을 직접 처리해야 하므로 코드가 길고 복잡해질 수 있습니다.

2. SQL 직접 작성 필요

JDBC에서는 SQL 쿼리를 직접 작성해야 하기 때문에, 데이터베이스 구조가 변경되면 쿼리도 수정해야 하는 문제가 발생할 수 있습니다.

3. 반복적인 작업

데이터베이스 작업에 필요한 많은 반복적인 코드(연결 설정, 자원 해제 등)가 발생합니다. 이를 보완하기 위해 ORM 프레임워크(예: Hibernate, JPA)가 많이 사용됩니다.

JDBC와 ORM의 차이

  • JDBC는 SQL 쿼리를 직접 작성하고 실행하는 방식이며, 데이터베이스와 자바 애플리케이션 간의 저수준 통신을 처리하는 API입니다.
  • ORM(Object-Relational Mapping) 프레임워크(예: Hibernate)는 자바 객체를 데이터베이스 테이블과 매핑하여, SQL을 직접 작성하지 않고도 데이터를 처리할 수 있는 고수준의 추상화 도구입니다. ORM은 데이터베이스 작업을 더 쉽게 만들지만, 복잡한 SQL 쿼리 성능에 문제가 발생할 수 있는 경우에는 JDBC를 사용하는 것이 더 유리할 수 있습니다.

JDBC는 데이터베이스와 자바 애플리케이션 간의 표준적인 데이터 통신 방법을 제공하며, SQL을 직접 사용해야 하는 만큼 유연성과 통제력을 제공합니다. 하지만 더 나은 생산성을 위해 ORM 프레임워크와 함께 사용되는 경우가 많습니다.

profile
귤귤

0개의 댓글