Chat 상우

[java DB] JDBC란? java에서 데이터베이스 사용하기 본문

Language/java

[java DB] JDBC란? java에서 데이터베이스 사용하기

chat-rilla 2023. 11. 19. 21:42

안녕하세요 chat 상우입니다.

포스팅에 오류가 있거나 수정해야 할 내용은 피드백해주시면 감사하겠습니다.

자바 프로그래밍을 어느정도 하였다면 우리의 프로그램에서 발생한 데이터를 관리하거나 프로그램 재시작에 영향을 받지 않고 일관된 데이터를 유지하길 희망할 것이다. 오늘 배워볼 Chap - JDBC 파트에서는 JAVA Application에 DataBase를 연결하는 기술인 JDBC를 알아볼 것이다.

JDBC란?

JDBC(java Database Connectivity)는 자바로 만든 애플리케이션과 데이터베이스를 연결할 수 있는 API로 자바에서 표준화된 방식으로 만들어진 기술이다.

 

JDBC는 자바에서 표현하면 다음과 같은 아키텍처를 갖게 된다. 자바에서 데이터 베이스에 연결되어 값을 조작하고자 하는 경우 해당 데이터베이스와 일치하는 드라이버를 설치하여 명령을 DBMS에 요청을 할 수 있도록 만드는 방식이며 여기서 각각의 데이터베이스와 일치하는 Driver를 하나의 lib로 제공하고 있다. lib는 누군가 미리 만들어 놓은 기능을 이용하여 개발을 편리하게 할 수 있다. 

 

JDBC 아키텍처 구조

아래의 그림을 보면 JDBC라는 인터페이스가 존재하는데 이번에 알아볼 내용이다. JDBC 인터페이스의 역할을 여러 가지 데이터베이스를 조작할 수 있도록 Driver의 기능을 활용할 수 있도록 하는 역할을 제공하게 된다.

JDBC아키텍처

위 개념을 이해하기 위해서 JDBC가 존재하지 않는 상황에서 생각을 해본다. 아래와 같은 상황에서 보면 애플리케이션에서 각 드라이버에서 정의된 api를 이용하여 데이터베이스를 조작하는 코드를 만들게 될 것인데 만약 오라클 데이터 베이스를 사용하다가 mysql로 변경이 된다면 우리는 Application에서 오라클을 조작하기 위해 사용했던 모든 api를 Mysql로 변경해야 할 것이다.

JDBC가 없다면 예시 그림

이러한 방식으로 프로그램을 개발하는 것을 의존도가 높다고 이야기를 하며 이러한 의존성은 개발자에게 유지 보수성을 낮춰 변경 시 매우 많은 작업을 해야한다. 그렇기 때문에 우리는 의존성이 낮춰 유지 보수성을 증가하는 코드를 개발해야 하는데 이러한 것을 느슨한 결합 관계라고 이야기를 한다. 아래의 데이터 베이스를 이용하기 위해서 우리가 알아볼 JDBC는 특정 DBMS에 종속되지 않도록 DBMS에 연결되는 방식을 표준화하는 기술이다.

 

java DB 연결 방법

JDBC를 활용하여 데이터베이스와 연결하는 것을 해볼 것이다.

intelj에서 → empty project 생성 (maven) → pom.xml 아래의 내용 추가

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>workspace</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
    </dependencies>
</project>

DB 드라이버 설치 후

package com.ohgiraffers.section01.connection;

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

public class Application1 {

    public static void main(String[] args) {

        /* DB접속을 위한 Connection instance 생얼을 위한 레퍼런스 변수 선언 */
        Connection con = null;

        try {
            /* 사용할 Driver 등록 */
            Class.forName("com.mysql.cj.jdbc.Driver");

            /* DriverManager를 이용해 Connection 생성 */
            con = DriverManager.getConnection("jdbc:mysql://localhost/DB명, "DB아이디", "비밀번호");

            System.out.println("con : " + con);

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if(con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

위의 프로그램을 실행하였을때 SqlException이 발생된다면 연결이 안 된 것이고 Con의 heap의 주소값이 출력되면 연결된 것이다.