Intellij) JDBC 프로젝트 (4) JDBC 연결하기

Intellij) JDBC 프로젝트 (4) JDBC 연결하기

Simple JDBC Project (kor)
(1) 
Java, DB 설치 + Docker Compose로 쉽게 해 보기
(2) 프로젝트 생성, Postgresql 컨테이너 게시
(3) Flyway 도입하기
(4) JDBC 연결하기
(5) 위임된 Main Application

JDBC Driver가 추가되었는지 확인하기

이번 글에서는 JDBC를 통해 데이터베이스에 잘 연결할 수 있는지 확인해 보는 짧은 코드를 제시합니다.

우선 우리는 Flyway 적용 과정에서 이미 Postgresql용 JDBC 드라이버 라이브러리를 추가했습니다. org.postgresql:postgresql:42.7.3 라이브러리가 잘 추가되어 있는지 확인해 보세요.

dependencis {
    // ...

    // db
    implementation 'org.postgresql:postgresql:42.7.3'
    implementation 'org.flywaydb:flyway-mysql:9.22.3'

    // ...
}

JDBC 및 데이터베이스 연결 확인해 보기

이제 JDBC 드라이버를 통해 데이터베이스에 연결이 잘되고 있는지 확인해 봅니다.

확인용 클래스 생성 (권장)

우리는 연습삼아 JDBC 연결 확인용 클래스를 만들어 봅시다.

DriverManager의 static 메서드인 getConnection(URL, username, password) 메서드를 통하여 DB 연결을 확인할 수 있습니다. 이 함수는 checked exception으로 SQLException을 catch 또는 throw 하도록 지시합니다.

우리가 주목해야 할 주요 동작은 try~catch~resources 구문에서 connection을 꺼내 온 것입니다. 그리고 그 connection이 null이면 연결되지 않은 것, null이 아니라면 연결이 잘 수행된 것입니다.

참고: try~catch~resources 구문은 connection.close()를 보장해 줍니다. (만약 AutoClosable 인터페이스를 구현한 클래스라면 try~catch~resources 구문을 통해 close를 보장하는 게 좋습니다.)

  • package: com.example.common.support.db
package com.example.common.support.db;

import java.sql.DriverManager;

public class JdbcAccessChecker {

    private final String dbUrl;
    private final String username;
    private final String password;

    // static 초기화 블록
    //  JdbcAccessChecker.class가 로드될 때 한 번 실행됩니다.
    static {
        try {
            // [1] Driver 로드를 명시합니다. (일부 데이터베이스용 드라이버는 자동으로 로드 되지만, 일부는 명시해야 합니다.)
            Class.forName("org.postgresql.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    // [2] 생성자에서 DB 접속 정보를 받습니다.
    public JdbcAccessChecker(
            String dbUrl,
            String dbUsername,
            String dbPassword
    ) {
        this.dbUrl = dbUrl;
        this. username = dbUsername;
        this. password = dbPassword;
    }

    // [3] DB 연결에 성공하면 true, 아니면 false를 반환하는 메서드를 만듭니다.
    //     커넥션을 생성해 보고, 이것이 null이면 false를 반환하도록 구현합니다.
    public boolean hasConnectivity() {
        try (
                // 데이터베이스에 대한 '접속' 또는 '연결'이라고 부르는 객체입니다.
                Connection connection =
                        DriverManager.getConnection(dbUrl, username, password);
        ) {
            // connection이 null이 아니면 DB 연결에 성공한 것입니다.
            return connection != null;
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

연결 확인

import com.example.common.flyway.config.MyFlyway;

import com.example.common.support.db.MyJdbcConnectivityChecker;

import static com.example.common.support.db.DatabaseAccessConstants.DB_PASSWORD;
import static com.example.common.support.db.DatabaseAccessConstants.DB_URL;
import static com.example.common.support.db.DatabaseAccessConstants.DB_USERNAME;

public class Main {

    public static void main(String[] args) {
        // 이전 글에서 작성한 플라이웨이 실행 코드입니다.
        MyFlyway myFlyway = new MyFlyway(DB_URL, DB_USERNAME, DB_PASSWORD);
        myFlyway.migrate();

        // JDBC 연결을 확인합니다.
        validateJdbcConnectivity();
    }

    private static void validateJdbcConnectivity() {
        // 연결 확인용 객체입니다.
        JdbcAccessChecker checker =
                new JdbcAccessChecker(DB_URL, DB_USERNAME, DB_PASSWORD);

        // 연결 여부 확인: `checker.hasConnectivity()`
        boolean hasConnectivity = checker.hasConnectivity();

        // 연결되지 않았다면 런타임 예외를 발생시킵니다.
        if (!hasConnectivity) {
            throw new RuntimeException("JDBC 연결 필요");
        }

        // 정상적으로 연결되었다면 위에서 throw되지 않고 이곳에 도착합니다.
        System.out.println("JDBC 연결 성공");
    }
}

< Prev

(3) Flyway 도입하기

Next >

(5) 위임된 Main Application