DB 2일차 수업입니다. 1일차 수업을 통해 DB에 관해 간단히 배워볼 수 있었습니다.

sun cloud

그렇다면 DB를 통해 저희는 무엇을 하고자 하는걸까요?

단순히 데이터를 잘 관리하기 위해서? 물론 데이터를 잘 다루기 위해 DB를 사용합니다만, 단순히 기술을 사용하는 부분에만 초점을 두기 보다는 일반 사용자들이 보다 쉽게 프로그램을 사용할 수 있도록 도와주는 부분이 DB뿐만이 아닌 프로그래밍이 지닌 본질적인 가장 강력한 힘이라고 생각합니다.

수업 중 강사님께서 이런 말씀을 하셨습니다.

개발 일을 단순히 돈을 벌기 위한 수단으로만 여길 것이 아니라 사용자들에게 편리함을 제공한다는 의식을 가져야 한다.

이 말이 제게는 큰 울림이 되었던 것 같습니다.

여담은 여기까지만 하고 이제 본격적으로 복습을 진행하겠습니다.

sun cloud

오늘은 JDBC 에 대해 알아보겠습니다.

JDBC는 Java DataBase Connectivity의 약자로 자바응용프로그램과 데이터베이스 연동을 위한 기술을 말합니다. 그래서 자바응용프로그램과 데이터베이스 사이의 중간 다리 역할을 한다고 볼 수 있습니다. 간단히 과정을 살펴보자면,

  • Sun에서 JDBC표준(인터페이스) 설계
  • DB Vender(회사)에서 JDBC 표준에 의거해 개발(인터페이스를 implements한 class를 정의)
  • Java 응용프로그램(application) 개발자는 JDBC 표준(인터페이스)을 이용해 프로그램을 개발

그림으로 살펴보면 아래와 같습니다.

image

여기서 사용자 입장을 추가해본다면 아래와 같은 흐름이 됩니다.

일반 사용자 <—> Java Application <– JDBC –> Database


위의 설계 방식으로 Java 응용프로그램 개발 진영에서는 각 DB에 관계없이 JDBC 표준 방식만을 보고 개발할 수 있습니다. 쉽게 말하면 하나의 사용 방법만 익히면 되는 거죠. (만약 DB 제품군이 변경되어야 하더라도 JDBC 연동 부분은 같기 때문에 각 DB의 sql 특성만 고려하게 됩니다. 그래서 응용프로그램 변경은 최소화됩니다.)

각 DB Vender에서는 자신의 시스템을 업데이트해도 외부 영향은 최소화 되기에 결합도가 낮아져 유지보수가 용이합니다. 캡슐화(Encapsulation)의 개념과 비슷하다고 볼 수 있겠죠.

하나의 메세지 방식( JDBC 표준 인터페이스 )으로 다양한 구현 객체( Oracle, MS SQL, MySQL , DB2 등)들이 각자의 방식으로 동작하게 할 수 있습니다. 결합도 ↑ , 응집도 ↓


sun cloud

이제 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에 대해 알아보겠습니다.

image

자바 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”구문을 출력하도록 했습니다.



jdbc 설계 방식 두번째 단계부터는 다음 글에서 예제 코드를 통해 자세히 살펴보고, 전체 과정을 연습해보도록 하겠습니다.

Database 카테고리 내 다른 글 보러가기

댓글남기기