본문 바로가기
카테고리 없음

JDBC의 탄생 배경과 구조

by RoundRyun 2019. 11. 14.

JDBC(Java Database Connectivity)란 자바를 이용하여 데이터베이스에 접근하여 각종 SQL문을 수행할 수 있도록 제공하는 API를 말한다.

 

1. 각종 DBMS를 통합한 표중 라이브러리 필요성

자바가 데이터베이스에 접근하는 프로그램을 시도라려고 할 때 한가지 문제점이 있었다. 그것은 DBMS의 종류가 다양하고, 또한 DBMS마다 구조와 특징이 다르다는 것이다. 이처럼 특정 DBMS에 맞게 API를 개발한다는 것은 자바의 기본 개념에 위배되고, 다른 개발자들에게 상당히 고통스러운 일이기도 했다. 그래서 자바는 모든 DBMS에서 공통적으로사용할 수 있는 인터페이스와 클래스로 구성하는 JDBC를 개발하게 됐고, 실제 구현 클래스는 각 DBMS의 밴더에게 구현하도록 했다. 그리고 각 DBMS의 벤더에서 제공되는 구현클래스를 JDBC드라이버라고 한다. 이런 JDBC 드라이버는 거의 모든 벤더가 제공하고 있다. 따라서 JDBC로 코딩하기 위해서는 DBMS를 선택하고 DBMS에 맞는 JDBC드라이버가 반드시 필요하다.

 

2. JDBC의 구조와 역할

JDBC는 크게 JDBC 인터페이스와 JDBC드라이버로 구성되어 있다. 웹어플리케이션에서 sql문을 만들어 JDBC인터페이스를 통해 전송하면 실제 구현 클래스인 JDBC드라이버에서 DBMS에 접속을 시도하여 SQL문을 전송하게 된다. 그 결과가 JDBC 드라이버에서 JDBC인터페이스에게 전달되고 다시 응용프로그램으로 전달되어 SQL문에 대한 결과를 받아 볼 수 있게 된다. 

 

결론적으로 JDBC는 응용프로그램과 DBMS간의 다리(bridge)역할을 하며 응용프로그램과 DBMS를 연결하여 SQL문을 DBMS에 전달하고 그 결과값을 응용프로그램에 전달하는 역할을 하게 된다.

 


3. JDBC 드라이버의 종류

JDBC드라이버는 DBMS의 벤더나 다른연구 단체들에서 만들어지는데 DBMS에 의존하기 때문에 매우 다양하다. JDBC 드라이버는 크게 네 가지로 분류한다.

 

  • 타입1:  JDBC-ODBC브리지 드라이버

JDBC API로 작성된 프로그램이 JDBC-OJDBC 브리지를 통해 ODBC 드라이버를 JDBC로 여기고 동작하도록 한다. 주의할 것은 JDBC 드라이버가 존재해야 한다는 것이다. 이런 이유 때문에 많은 제약을 가져온다. 왜냐하면 클라리언트에서 서버에 있는 ODBC지원 데이터베이스를 접근하는 프로그램을 작성하였을 경우, 클라이언트에 반드시 ODBC 드라이버가 존재해야 하기 때문이다.

 

그러므로 이 드라이버의 형태는 클라이언트에 전부 ojdbc 드라이버가 설치되어 있거나 설치가 용이한 경우, 또는 3tier 구조에서 서버 프로그램을 작성할 때 많이 사용된다.

 

  • 타입2: 데이터베이스 API 드라이버

JDBC API 호출을 특정 데이터베이스의 클라이언트 호출 API로 바꿔주는 드라이버다.

오라클의 OCI드라이버가 여기에 속한다. 예를 들어, 오라클 데이터베이스를 지원하는 형태의 JDBC드라이버는 JDBC APi호출을 오라클에서 제공하는 클라이언트의 API로 바꿔서 호출시켜 준다. 이 형태도 JDBC 프로그램이 동작하는 클라이언트의 API로 바꿔서 호출시켜 준다. 이 형태도 JDBC 프로그램이 동작하는 클라이언트쪽에 반드시 특정 데이터베이스의 클라이언트 코드가 있어야 하기 때문에 제약이 있다.

 

  • 타입3: 네트워크 프로토콜 드라이버

이 드라이버는 클라이언트의 JDBC API 호출을 특정 데이터베이스의 프로토콜과 전혀 상관없는 독자적인 방식의 프로토콜로 바꾸어 서버로 전송한다. 서버에는 미들웨어가 있어서 그 프로토콜을 특정 데이터베이스의 api로 바꾸어서 처리한다. 서버의 미들웨어가 맡는 역할을 서버의 다양한 데이터베이스를 접근 할 수 있도록 클라리언트의 요청을 처리하는 중요한 임무를 맡게 된다. 일반적으로 현재 이 방식의 드라이버가 인트라넷 환경에서 많이 적용되는 스타일이다.

 

  • 타입4: 데이터베이스 프로토콜 드라이버

JDBC APi호출을 서버의 특정 데이터베이스에 맞는 프로토콜로 변환시켜 서버로 전송하는 다르이버라고도 한다. 이것은 데이터베이스 API 드라이버와 비슷하지만 데이터베이스의 클라이언트 API로 변환시키는 것이 아니라 직접 서버의 데이터베이스로 요청을 한다는 것이 다르다. 이 형식의 드라이버는 데이터베이스를 생산하는 회사에서 직접 제공하는 경우가 많다. 그것은 이 드라이버가 특정 데이터베이스의 프로토콜로 SQL문장들을 직접 변환시켜야 하기때문에 그 회사만이 만들 수 있다.