본문 바로가기
Database

DB - JDBC의 이해

by 개발자-제이 2024. 7. 25.

애플리케이션 개발 시 중요 데이터는 주로 데이터베이스에 보관한다. 

이 데이터는 클라이언트, 애플리케이션 서버, 데이터베이스 간 상호 작용을 통해 처리되고 관리된다. 

 

애플리케이션 서버와 DB의 일반적인 상호작용 

클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회할 때, 애플리케이션 서버는 다음과 같은 과정을 통해 데이터베이스와 통신한다.

  • 1. 커넥션 연결: 애플리케이션 서버는 주로 TCP/IP를 사용하여 데이터베이스와의 커넥션을 설정한다.
  • 2. SQL 전달: 애플리케이션 서버는 데이터베이스가 이해할 수 있는 SQL 문을 커넥션을 통해 전달한다.
  • 3. 결과 응답: 데이터베이스는 전달된 SQL을 실행하고 그 결과를 애플리케이션 서버에 응답한다. 애플리케이션 서버는 이 응답 결과를 이용하여 필요한 처리를 수행한다. 

 

데이터베이스 변경 시 문제점

하지만 각, 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 그리고 결과를 응답 받는 방법이 모두 다르며, 다양한 관계형 데이터베이스가 존재하기 때문에 아래와 같은 문제를 야기한다.

  • 데이터베이스 변경의 어려움: 애플리케이션에서 사용 중인 데이터베이스를 다른 종류의 데이터베이스로 변경할 경우, 데이터베이스와 상호작용하는 코드를 모두 수정해야한다.
  • 데이터베이스 학습의 번거로움: 개발자는 각 데이터베이스마다 커넥션 연결, SQL 전달, 그리고 결과 응답 방법을 새로 학습해야 한다.

 


 

JDBC의 등장

이러한 문제들을 해결하기 위해 자바 표준인 JDBC (Java Database Connectivity) 가 등장했다. 

JDBC는 java 애플리케이션이 여러 데이터베이스와 상호작용할 수 있게 해주는 API이며, 다양한 데이터베이스 시스템에 대해 일관된 방법으로 연결, SQL 쿼리 실행 및 결과 처리 등을 수행할 수 있는 인터페이스를 제공한다. 

 

JDBC 표준 인터페이스 

JDBC 인터페이스의 구조와 동작 원리

 

 

JDBC 인터페이스와 클래스

JDBC는 다음과 같은 주요 구성 요소를 포함한다.

JDBC Driver

JDBC 드라이버는 Java 애플리케이션과 데이터베이스 간 통신을 담당하는 컴포넌트다. 각 데이터베이스 시스템(예: MySQL, Oracle, PostgreSQL 등)은 고유한 JDBC 드라이버를 제공한다.

드라이버는 JDBC 표준 인터페이스를 구현하고, 이를 통해 Java 애플리케이션은 특정 데이터베이스에 구애받지 않고 동일한 방법으로 데이터베이승와 상호작용할 수 있다. 

 

DriverManager

Driver Manager는 데이터베이스 드라이버를 관리하고 데이터베이스와 연결을하는 데 사용되는 클래스이다.

DriverManager.getConnection(String url, String user, String password);

DriverManager는 JDBC 드라이버를 로드하고 관리하며, 각 드라이버(SQLDriver, OracleDriver 등)는 데이터베이스 시스템과 java 애플리케이션 간의 통신을 담당한다.  주로 'getConnection()' 메서드를 사용해서 데이터베이스와의 연결을 얻는다.

 

Connection (JDBC 연결)

Connection 인터페이스는 JDBC에서 데이터베이스와의 연결을 나타내는 인터페이스다. Connection을 통해 데이터베이스와 애플리케이션 로직을 연결하고, SQL 쿼리 실행 및 트랜잭션 관리를 할 수 있다.

 

Statment(JDBC 문장)

Statment 객체는 SQL 쿼리를 데이터베이스에 전달하는 데 사용되며, JDBC는 아래와 같은 세 가지 주요 유형의 Statment를 제공한다. 

  • Statment: 기본 SQL 쿼리를 실행할 때 사용
  • PreparedStatement: 미리 컴파일된 SQL 쿼리를 실행할 때 사용, 쿼리 매개변수를 동적으로 설정할 수 있음
  • CallableStatement: 데이터베이스 저장 프로시저를 호출할 때 사용, 저장 프로시저는 데이터베이스에 미리 컴파일되어 저장된 SQL 코드 블록을 의미

 

ResultSet(JDBC 결과 집합)

ResultSet 객체는 데이터베이스 쿼리의 결과를 나타내는데 사용된다. 이 객체를 통해 쿼리 결과를 순회하면서 데이터를 읽어올 수 있다. 

 

JDBC 예시 코드

public class JDBCExample {
    public static void main(String[] args) {
    	// JDBC URL 및 사용자 정보
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String user = "root";
        String password = "password";

        try {
            // 드라이버 로드 (드라이버 클래스 이름은 드라이버에 따라 다름)
            Class.forName("com.mysql.cj.jdbc.Driver");

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

            // SQL 문 실행
            Statement statement = connection.createStatement();
            String query = "SELECT * FROM mytable";
            ResultSet resultSet = statement.executeQuery(query);

            // 결과 처리
            while (resultSet.next()) {
                System.out.println("Column 1: " + resultSet.getString(1));
                System.out.println("Column 2: " + resultSet.getString(2));
            }

            // 리소스 해제
            resultSet.close();
            statement.close();
            connection.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

 

JDBC의 등장으로 다음과 같은 내용으로 데이터베이스 시스템에 대한 접근이 개선되었다. 

  • 통일된 API 제공: JDBC는 다양한 데이터베이스와의 상호작용을 위한 통일된 API를 제공한다. 이를 통해 개발자는 특정 데이터베이스에 종속되지 않고 애플리케이션을 개발할  수 있다.
  • 데이터베이스 변경의 용이성: 데이터베이스를 변경할 때, JDBC 드라이버만 교체하면 되므로 코드 수정이 최소화된다.
  • 개발 효율성 증대: 개발자는 JDBC를 통해 데이터베이스와 상호작용하는 방법을 한번만 학습하면 된다.

 

 

 

반응형

'Database' 카테고리의 다른 글

JDBC - PreparedStatement  (0) 2023.10.13
JDBC 기본  (0) 2023.10.13