본문 바로가기

Spring

Spring - Database Driver

데이터베이스에서 `드라이버(driver)`는 애플리케이션과 데이터베이스 간의 통신을 가능하게 하는 소프트웨어 컴포넌트입니다. Java에서는 JDBC(Java Database Connectivity) 드라이버가 애플리케이션에서 데이터베이스로 SQL 쿼리를 전달하고, 결과를 다시 받아오는 역할을 수행합니다. 드라이버는 데이터베이스 벤더가 제공하며, 각 DBMS마다 고유한 드라이버가 필요합니다.

1. JDBC 드라이버의 역할

JDBC 드라이버는 애플리케이션과 데이터베이스 간의 인터페이스 역할을 하며, 주요 역할은 다음과 같습니다:

  • 연결(Connection) 제공: 데이터베이스에 연결할 수 있는 Connection 객체를 생성하여 애플리케이션이 DB에 접근할 수 있도록 합니다.
  • SQL 문 실행: 애플리케이션에서 SQL 문을 실행하여 데이터 조회, 삽입, 수정 등을 가능하게 합니다.
  • 결과(ResultSet) 제공: SQL 실행 결과를 받아 애플리케이션이 사용할 수 있는 형태로 제공합니다.
  • 데이터 타입 변환: Java 데이터 타입과 데이터베이스 데이터 타입 간의 변환을 수행하여 호환성을 보장합니다.

 

2. JDBC 드라이버의 종류

JDBC 드라이버는 연결 방식에 따라 4가지로 나뉩니다:

  1. Type 1: JDBC-ODBC 브리지 드라이버
    • Java의 JDBC 호출을 ODBC(Open Database Connectivity) 호출로 변환하여 데이터베이스에 연결합니다.
    • ODBC가 설치된 시스템에서만 동작하며, 성능이 좋지 않아 거의 사용되지 않습니다.
  2. Type 2: 네이티브 API 드라이버
    • Java의 JDBC 호출을 DBMS의 네이티브 API 호출로 변환하여 데이터베이스와 연결합니다.
    • 데이터베이스 벤더가 제공하는 네이티브 API가 필요하며, 플랫폼 종속적이라 특정 OS에서만 동작할 수 있습니다.
  3. Type 3: 네트워크 프로토콜 드라이버
    • JDBC 호출을 미들웨어 서버로 전달하고, 미들웨어 서버가 DBMS와 통신하여 데이터를 전달합니다.
    • 분산 환경에서 적합하지만, 추가 서버가 필요하기 때문에 관리가 복잡할 수 있습니다.
  4. Type 4: 순수 Java 드라이버
    • Java로 구현된 드라이버로, 네이티브 코드 없이도 데이터베이스에 직접 연결합니다.
    • 가장 많이 사용되는 방식이며, 플랫폼 독립적이고 성능이 우수합니다.

 

3. JDBC DriverManager와 연결 과정

`DriverManager`는 애플리케이션에서 데이터베이스 드라이버를 관리하고, `Connection` 객체를 생성하는 클래스입니다. JDBC를 통해 데이터베이스에 연결하는 과정은 다음과 같습니다

 

1. JDBC 드라이버 로드

Class.forName("com.mysql.cj.jdbc.Driver"); // 예: MySQL 드라이버 로드

 

이 명령을 통해 DriverManager에 드라이버가 등록됩니다.

 

2. Connection 객체 생성

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "username", "password");

 

`DriverManager`는 URL과 일치하는 드라이버를 찾아, 데이터베이스와의 연결을 생성합니다.

 

3. Statement 객체 생성 및 SQL 실행

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users");

 

`Statement` 객체는 SQL 문을 데이터베이스에 전달하고, `executeQuery`를 통해 결과를 받아옵니다.

 

4. ResultSet 객체 생성

- `executeQuery` 메서드는 결과를 `ResultSet` 객체로 반환합니다.

- `ResultSet` 을 통해 데이터베이스의 조회 결과를 순회하며 필요한 데이터를 읽습니다.

 

 

while (rs.next()) {
    System.out.println("ID: " + rs.getInt("id"));
    System.out.println("Name: " + rs.getString("name"));
}

 

5. 자원 반환

rs.close();
stmt.close();
conn.close();

 

 

4. Connection, Statement, ResultSet 생성 과정의 흐름

1) Connection 생성

`DriverManager.getConnection()` 메서드를 호출하면 DriverManager는 등록된 드라이버 목록에서 URL을 인식하여 적합한 드라이버를 찾아 데이터베이스와 연결합니다. 이때 `Connection` 객체가 반환됩니다.

2) Statement 생성

`Connection.createStatement()` 메서드를 호출하면 `Statement`객체가 생성됩니다. 이 객체는 SQL 문을 데이터베이스에 전달할 수 있게 해주는 인터페이스입니다.

3) SQL 실행 및 ResultSet 생성

`Statement` 객체의 `executeQuery` 메서드를 호출하여 SQL을 실행하면 데이터베이스는 해당 쿼리를 처리하고 결과를 반환합니다. 결과는 `ResultSet` 객체로 반환되며, 이 객체를 통해 데이터베이스의 결과값을 순회하고 필요한 데이터를 추출할 수 있습니다.

 

전체 흐름

  1. 드라이버 로드: 애플리케이션이 사용할 데이터베이스 드라이버를 Class.forName을 통해 등록합니다.
  2. 연결 생성: DriverManager.getConnection을 통해 Connection 객체를 생성하고, 데이터베이스와 연결합니다.
  3. Statement 생성: SQL을 실행하기 위해 Connection.createStatement를 통해 Statement 객체를 생성합니다.
  4. SQL 실행 및 결과 수신: Statement.executeQuery로 SQL을 실행하고 ResultSet 객체로 결과를 수신합니다.
  5. 데이터 처리: ResultSet을 순회하며 필요한 데이터를 추출합니다.
  6. 자원 해제: 데이터베이스 자원을 반납하여, 연결을 종료하고 메모리를 확보합니다.

이 과정을 통해 JDBC는 데이터베이스와 애플리케이션 간의 안정적이고 효율적인 데이터 처리 및 전송을 수행합니다.

728x90
반응형

'Spring' 카테고리의 다른 글

Spring - Spring Security  (0) 2024.11.13
Spring - JDBC Template  (1) 2024.11.10
Spring - H2 Database  (0) 2024.11.08
Spring - @Transactional  (1) 2024.11.05
Spring - REST API 와 RESTful  (0) 2024.10.18