DB&JDBC(02-1) - JDBC - 수업 24일차
DB 2일차 수업입니다. 1일차 수업을 통해 DB에 관해 간단히 배워볼 수 있었습니다.
그렇다면 DB를 통해 저희는 무엇을 하고자 하는걸까요?
단순히 데이터를 잘 관리하기 위해서? 물론 데이터를 잘 다루기 위해 DB를 사용합니다만, 단순히 기술을 사용하는 부분에만 초점을 두기 보다는 일반 사용자들이 보다 쉽게 프로그램을 사용할 수 있도록 도와주는 부분이 DB뿐만이 아닌 프로그래밍이 지닌 본질적인 가장 강력한 힘이라고 생각합니다.
수업 중 강사님께서 이런 말씀을 하셨습니다.
개발 일을 단순히 돈을 벌기 위한 수단으로만 여길 것이 아니라 사용자들에게 편리함을 제공한다는 의식을 가져야 한다.
이 말이 제게는 큰 울림이 되었던 것 같습니다.
여담은 여기까지만 하고 이제 본격적으로 복습을 진행하겠습니다.
오늘은 JDBC 에 대해 알아보겠습니다.
JDBC는 Java DataBase Connectivity의 약자로 자바응용프로그램과 데이터베이스 연동을 위한 기술을 말합니다. 그래서 자바응용프로그램과 데이터베이스 사이의 중간 다리 역할을 한다고 볼 수 있습니다. 간단히 과정을 살펴보자면,
- Sun에서 JDBC표준(인터페이스) 설계
- DB Vender(회사)에서 JDBC 표준에 의거해 개발(인터페이스를 implements한 class를 정의)
- Java 응용프로그램(application) 개발자는 JDBC 표준(인터페이스)을 이용해 프로그램을 개발
그림으로 살펴보면 아래와 같습니다.
여기서 사용자 입장을 추가해본다면 아래와 같은 흐름이 됩니다.
일반 사용자 <—> Java Application <– JDBC –> Database
위의 설계 방식으로 Java 응용프로그램 개발 진영에서는 각 DB에 관계없이 JDBC 표준 방식만을 보고 개발할 수 있습니다. 쉽게 말하면 하나의 사용 방법만 익히면 되는 거죠. (만약 DB 제품군이 변경되어야 하더라도 JDBC 연동 부분은 같기 때문에 각 DB의 sql 특성만 고려하게 됩니다. 그래서 응용프로그램 변경은 최소화됩니다.)
각 DB Vender에서는 자신의 시스템을 업데이트해도 외부 영향은 최소화 되기에 결합도가 낮아져 유지보수가 용이합니다. 캡슐화(Encapsulation)의 개념과 비슷하다고 볼 수 있겠죠.
하나의 메세지 방식( JDBC 표준 인터페이스 )으로 다양한 구현 객체( Oracle, MS SQL, MySQL , DB2 등)들이 각자의 방식으로 동작하게 할 수 있습니다. 결합도 ↑ , 응집도 ↓
이제 DB를 활용해 자바 프로그램을 만들텐데 그 전에 JDBC 프로그래밍 개발 단계를 알아보겠습니다.
목적에 따라 방법이 약간 달라지는데 DML을 기준으로 다음과 같이 나뉩니다.
SELECT(검색) | INSERT, DELETE , UPDATE (생성, 삭제, 업데이트) |
---|---|
1. JDBC Driver loading | 1. JDBC Driver loading |
2. Connection | 2. Connection |
3. PreparedStatement | 3. PreparedStatement |
4. SQL 실행 : executeQuery() | 4. SQL 실행 : executeUpdate() |
5. ResultSet | 5. close |
6. close |
우선 첫번째 공통 단계인 JDBC Driver loading
에 대해 알아보겠습니다.
자바 API 문서를 보면 java.sql
패키지에 Driver
인터페이스가 존재합니다. 여기에 모든 드라이버 클래스들은 반드시 Driver
인터페이스를 implement
를 해야한다고 명시 되어있고, Class.forName(driverName)
을 통해 드라이버를 연결하고 등록할 수 있습니다. 서버당 한 번은 꼭 드라이버 클래스를 로딩해야하며 클래스를 로딩하면 static
정보(드라이버 초기 정보)가 metaspace
에 저장됩니다. class
를 찾지 못할 경우에는 ClassNotFoundException
이 발생할 수 있습니다. 클래스 드라이버에 관해 공부하다 보면 팩토리 패턴과 관련해서도 공부할 수 있게 될텐데 보다 자세한 내용은 다음에 리플렉션을 배우고 난 뒤 다시 다뤄보도록 하겠습니다. 아래는 사용 예제입니다.
1
2
3
4
5
6
7
8
9
10
11
public class TestJDBC1 {
public static void main(String[] args) {
String driver ="oracle.jdbc.OracleDriver";
try {
Class.forName(driver);
System.out.println("jdbc driver loading");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
먼저 Class.forName()
메서드에 인자로 driver
를 넣어줘야 합니다. 그래서 String 타입으로 driver
변수에 OracleDriver
주소를 할당해주고, Exception
이 발생할 수 있기 때문에 try catch
구문을 사용합니다. 예제에서는 정상 작동 확인을 위해 “jdbc driver loading”구문을 출력하도록 했습니다.
댓글남기기