c23 [JDBC] 개요
본문 바로가기
[Database]

[JDBC] 개요

by Jarvis2304 2024. 3. 29.

▶ JDBC (Java DataBase Connectivity)

- 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API

- 애플리케이션(자바 프로그램)이 데이터베이스와 연결되어, 데이터를 주고 받을수 있게 해주는 표준 인터페이스

 

▶ JDBC 등장 배경

- 데이터베이스의 종류에따라 사용방식이 다름

 JDBC와 JDBC Driver를 통해 단일화된 방법으로 여러 데이터베이스를 사용

 

 

▷애플리케이션 서버와 DB 기존 사용법

- 애플케이션 서버가 DB를 사용할때 일반적으로 다음3가지 과정을 거침

1) 커넥션 연결

-주로 TCP/IP를 사용해서 커넥션을 연결한다.

 

2) SQL 전달

-애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다.

 

3) 결과 응답

-DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다.

 

 

▷ DB변경 시 문제 발생

 

- DB를 변경하면, DB마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 결과를 응답 받는 방법이 모두 다르기 때문에 문제점 발생

 

문제점 1) DB를 다른 종류의 DB로 변경하면, 애플케이션 서버에 개발된 DB 사용 코드도 함께 변경해야 함

문제점 2) 개발자가 각각의 DB마다 커넥션 연결, SQL전달, 결과를 응답 받는 방법을 새로 학습해야 함

 

→  이러한 문제점을 해결하기 위해 JDBC 자바 표준 등장

 

 

 

 

▶ 대표적으로 다음 3가지 기능을 표준 인터페이스로 정의해서 제공

  • java.sql.Connection - 연결
  • java.sql.Statement - SQL을 담은 내용
  • java.sql.ResultSet - SQL 요청 응답

 

- 자바는 이렇게 표준 인터페이스를 정의해 둠

- 하지만 인터페이스만 있다고해서 기능이 동작하지 않음(구현체 있어야함)

- 이 JDBC 인터페이스를 각각의 DB 회사에서 자신의 DB에 맞도록 구현해서 라이브러리로 제공

- 이것을 JDBC Driver라고 함

 

▶ JDBC Driver 

- 자바 프로그램에서 여러 데이터베이스를 사용가능하도록 통역해주는 역할

- 데이터베이스의 각 회사가 제공하는 라이브러리 압축파일

 

 

 

▶ JDBC 정리

문제점 1) DB를 다른 종류의 DB로 변경하면, 애플케이션 서버에 개발된 DB 사용 코드도 함께 변경해야 함

→  애플케이션 로직은 이제 JDBC 표준 인터페이스에만 의존. DB를 다른 종류의 DB로 변경하고 싶으면 JDBC 구현 라이브러리만 변경하면 됨.

따라서 다른 종류의 DB로 변경해도, 애플리케이션 서버의 사용 코드를 그대로 유지

 

문제점 2) 개발자가 각각의 DB마다 커넥션 연결, SQL전달, 결과를 응답 받는 방법을 새로 학습해야 함

→  개발자는 JDBC 표준 인터페이스 사용법만 학습하면, 수십개의 DB에 모두 동일하게 적용

 

 

 

 

 

 

 

 

 

▶ JDBC 연결 실습

1) ConnectionConst.java

- 데이터베이스에 접속하기 위한 DB 연결 정보, 상수를 정의

package hello.jdbc.connection;


/**
 * DB연결정보 (커넥션) 상수 정의
 */
public abstract class ConnectionConst {
    public static final String URL = "jdbc:h2:tcp://localhost/~/test";
    public static final String USERNAME = "sa";
    public static final String PASSWORD = "";
}

 

 

 

2) DBConnectionUtil.java

- JDBC를 이용하여 데이터베이스에 연결하는 코드 

- DriverManager가 각 DB(회사)에 맞는 Driver를 찾아, Driver가 DB(회사)에서 구현한 커넥션 획득

- 커넥션은, JDBC Connection 인터페이스를 구현한 org.h2.jdbc.JdbcConnection 구현체를 제공 (그림1)

package hello.jdbc.connection;

import lombok.extern.slf4j.Slf4j;

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

import static hello.jdbc.connection.ConnectionConst.*;

@Slf4j
public class DBConnectionUtil {

    public static Connection getConnection(){

        try {
            //DriverManager가 DB에 맞는 Driver을 찾음 -> Dirver가 커넥션 획득
            Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            log.info("get connection={}, class={}", connection, connection.getClass());
            return connection;

        } catch (SQLException e) {
            throw new IllegalStateException(e);
        }


    }
}

 

그림1

 

 

 

 

▷DirverManager 커넥션 효청 흐름

 

 

 

 

▷DBConnectionUtilTest 

- 데이터베이스 연결 테스트 코드

package hello.jdbc.connection;

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import java.sql.Connection;

import static org.assertj.core.api.Assertions.*;

@Slf4j
class DBConnectionUtilTest {

    @Test
    void Connection() {
        Connection connection = DBConnectionUtil.getConnection();
        assertThat(connection).isNotNull();
    }
}

 

 

 

 

출처: 인프런, 스프링 DB 1편 - 데이터 접근 핵심 원리, 김영한

'[Database]' 카테고리의 다른 글

[JDBC] 트랜잭션  (1) 2024.06.22
[JDBC] 커넥션 풀  (0) 2024.03.31
[DB] ER 다이어그램(개념적 데이터 모델)  (0) 2023.05.05
[DB] 데이터 모델  (0) 2023.05.02
[DB] 데이터 모델링  (0) 2023.05.01

댓글