본문 바로가기

Java

JDBC가 뭐지?

오늘은 JAVA 애플리케이션을 개발할 때 꼭 쓰게 되는 JDBC에 대해서 알아보겠다.

JDBC가 뭐지?

아주 간단히 말하면 JAVA 애플리케이션에서 DATABASE에 접속할 수 있도록 도와주는 API이다.

이 JDBC는 처음 썬마이크로즈에서 JDK 1.1을 출시했을 때 일부로 같이 출시하였다고 한다. 현재 JAVA의 javax.sql 패키지에 포함되어 있다.

 

다시 설명하면, JDBC는 테이블 형식의 데이터(특히 관계형 테이터베이스) 에 접근하게 해준다.

JDBC는 아래 세가지의 역할을 한다.

1. datasource에 연결해준다.

2. 쿼리를 보내고, 명령문을 데이터베이스에 업데이트해준다.

3. 우리가 보낸 쿼리를 데이터 베이스가 처리하고 그에 대한 처리결과를 알려준다.

다음 짦은 예시가 소개한 세가지를 이해하는데 도움이 될 것이다.

public void connectToAndQueryDatabase(String username, String password) {

    Connection con = DriverManager.getConnection(
                         "jdbc:myDriver:myDatabase",
                         username,
                         password);

    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");

    while (rs.next()) {
        int x = rs.getInt("a");
        String s = rs.getString("b");
        float f = rs.getFloat("c");
    }
}

 

비록 코드는 짧지만 JDBC의 역할을 잘 보여준다.

DriverManager 객체는 database driver에 연결해주고 파라미터로 넘겨받은 사용자이름으로 접속해준다.

그 아래 Statement 객체는 우리가 SQL로 작성한 쿼리를 데이터베이스에 executeQuery로 실행시켜주고, 그에 대한 실행 결과를 ResultSet에 담아서 우리가 확인할 수 있도록 보여준다.

이정도면 JDBC가 뭐하는 애인지 설명이 되었다.

JDBC의 구성요소

JBDC는 4가지 요소를 포함한다.

1. The JDBC API

JDBC API는 관계형 데이터베이스에 프로그램적인 접근을 제공해준다. JDBC API를 사용함으로써 애플리케이션은 SQL문을 실행하고, 실행결과를 돌려받고, 변경사항을 datasource기반으로 반영한다.

또한 광범위하고, 다양한 환경에서 다수의 datasource와 상호작용할 수 있도록 해준다.

JDBC API는 Java SE와 java EE에 포함된 java 플랫폼에 일부이다. JDBC 4.0 API는 java.sql과 javax.sql 두개의 패키지로 분리되었다. 역시 둘 다 Java SE와 Java EE 플랫폼에 포함되어 있다.

2. JDBC Driver Manager

JDBC DriverManger(클래스)는 Java 애플리케이션을 JDBC Driver로 연결할 수 있도록 명시되어 있다. Driver Manager는 JDBC 아키텍쳐의 근간이라고 볼 수 있다. 꽤 작고 단순한 구조로 되어 있다.

3. JDBC Test Suite

JDBC Driver test suite는 우리가 JDBC Driver가 일을 잘 하는지 테스트하는 것을 도와주는 역할을 한다. 이 테스트들은 전체적으로 철저하게 테스트하지는 않지만 JDBC API의 중요한 기능의 많은 부분을 테스트해준다.

4. JDBC-ODBC Bridge

Java Software bridge는 ODBC drivers를 거쳐 JDBC 접근을 하도록 해준다. 우리는 ODBC 바이너리코드를 이 driver를 사용하는 각 클라이언트에 로드시켜놓아야한다. 주로 ODBC driver는 클라이언트 설치가 문제가 되지 않는 기업 네트워크 환경이나 3계층 구조 환경에서 Java 언어로 쓰여진 애플리케이션 서버의 경우 사용이 적절하다.

이 구성요소 중 1,2번째 요소는 데이터베이스에 연결해주고 관계형 테이터베이스와 교류하기 위해 SQL문을 사용하는 자바프로그램을 빌드한다.

3,4 번째 요소는 전문적인 환경에서 웹 애플리케이션을 테스트하는데 사용하거나 ODBC 거치는 DBMS와 소통한다.

JDBC Architecture

JDBC 아키텍쳐는 우선  2계층, 3계층 타입 모두 지원한다.

2-Tier

2 Tier 아키텍쳐는 기본 client-server 모델과 유사하다. 클라이언트쪽의 애플리케이션은 직접적으로 서버 쪽의 데이터베이스에 접근한다. ODBC, JDBC 같은 API가 이 교류하는 역할을 했다. 서버 쪽은 쿼리를 실행하고, 트랜잭션 관리를 할 책임이 있었고, 클라이언트는 user 인터페이스와 애플리케이션 프로그램을 실행해야했다. 클라이언트 쪽의 애플리케이션은 서버쪽과 데이터베이스에 접근하기 위해 커넥션을 맺고 이 타입의 이점은 유지보수와 이해하기가 쉽다는 장점이 있고 이미 존재하는 시스템과의 호환이 된다. 하지만 많은 양의 유저가 있을 경우 저조한 성능을 보인다.

3-Tier

여기에는 client-server 사이에 또다른 layer가 존재한다. client는 2-Tier 처럼 직접적으로 server에 접근하지 않는다. 대신 애플리케이션 서버가 데이터베이스 시스템과 연동해서 쿼리를 처리하고 트랜잭션을 관리한다. 이 중간층이 server와 client 사이에서 부분적으로 처리될 데이터를 교환해주는 역할을 한다. 이 아키텍쳐 타입은 규모가 큰 웹 애플리케이션에 사용된다.

 

 

두 개의 개념을 간단하게 공부해봤다. 그럼 이 안에서 JDBC는 어떻게 구성되어 있고 흐름은 어떻게 흘러가는 걸까?

 

 

 

 

  • JDBC Driver Manager: 모든 JDBC drivers의 목록을 가지고 있는 클래스이다. 커넥션 요청을 받으면 이 Driver Manager가 적절한 JDBC Driver와 매칭시켜준다. 
  • JDBC Driver: 데이터베이스 서버와의 소통을 제어하는 인터페이스다. 
  • Connection: 데이터베이스와 연결하는 메서드를 포함한 인터페이스이다.
  • Statement: 이 인터페이스는 SQL 쿼리나 명령문을 데이터베이스에 날릴 수 있는 객체를 생성시켜준다.
  • ResultSet: SQL문 처리 후 처리결과를 포함한다.
  • SQLException: 데이터베이스에서 발생한 에러는 이 클래스로 다룰 수 있다.

 

 

 


참고

 

 

 

'Java' 카테고리의 다른 글

컬렉션을 쓰는 이유  (0) 2021.05.27
equals와 hashcode는 왜쓰는거지?  (0) 2021.05.25
[WS live-study] 8주차: 인터페이스  (0) 2021.02.13
[WS live-study] 7주차: 패키지  (0) 2021.02.07
[WS live-study] 6주차: 상속  (0) 2021.02.04