Programming/JDBC

JDBC의 작동원리, 기본 코드. 2021-06-10

최동훈1 2021. 6. 10. 16:28

우선, JDBC는 자바에서 클라이언트로부터 받은 데이터의 요청(쿼리)를 인터페이스를 통해 표준화된 함수들로 Connection(연결), Statement(쿼리 문장실행), Resultset(결과패치) 등을 제공하는 템플릿이다.

왜 이런 JDBC가 필요하냐면, 사용자가 UI에서 어떤 정보를 클릭하면, 그 쿼리를 실질적인 DBMS(데이터 저장소)에 넘겨 줄 수 있다. 그런데 이 DBMS는 많은 종류가 있다. MySQL, ORACLE, RADIS 등... 이런 dbms의 종류에 함수의 이름이 각각 다를 것이고, 그렇다면, DBMS 를 바꿀때 마다, 그에 맞는 코드를 또 다시 짜야 할 것이다.

이런 애로사항을 방지하기위해 JDBC라는 자바에서 표준적으로 제공하는 라이브러리를 통해 쿼리를 작성하면, 각 DBMS에 맞는 함수들로 자동으로 변화시켜준다.

그런데 오해하지 말아야 할 것이, JDBC는 그냥 깡통이다. 즉, 인터페이스 인 것이다. 실질적으로 각 DBMS에 맞는 코드로 바꾸어 주는 역할은 JDBC Driver 라는 곳에서 수행한다. 이 JDBC Driver은, 각 데이터베이스 별로 따로 다운받아서 설치하면 된다. Jar 형식으로 제공된다.

내가 설명한 부분들을 그림으로 도식화하면 이렇다.

이렇게 사용자가 직접적으로 DB에 쿼리를 날리면, Oracle 따로, MS SQL 따로, 두번 다 각각의 DB함수에 맞게 조정해야한다.

하지만 이렇게 JDBC 템플릿을 한단계 거친 다음 DB에 접근한다면, 굳이 DB의 종류에 상관없이 프로그래밍 할 수 있는 장점이 있다.

 

또한 JDBC를 통해 DB에 접근하는 과정은 4가지 단계로 분류할 수 있다.

1.JDBC 드라이버를 메모리에 업로드(객체생성)

2.업로드된 JDBC드라이버와 JAVA간의 연결.

3.연결망을 통해, 실제 쿼리를 날릴수 있는 상태 반환.

4.반환된 상태에 SQL을 넣어, 결과셋에 반환.

5.받은 결과셋을 이용하여 결과출력.

 

이 과정을 자바 코드로 작성해 보겠다.

1.Class.forName("oracle.jdbc.driver.OracleDriver");
2.Connection con = DriverManager.getConnection(...);
3.Statement st= con.createStatement();
4.ResultSet rs= st.executeQuery(sql);
5.rs.next();

그런데, sql을 날려서 결과를 받아오는것이 좀 특이할 것이다. 바로, DB에서는 결과 셋을 따로 만들어놓고 각 셋을 가리키는 포인터(커서)를 둔다. 이를 next()라는 메서드를 활용해서 한 셋씩 프로그램으로 받아오는 것이다.

그림으로 설명하면 이렇다.

원래 연두색 set은 DB의 결과셋에 있는 것인데, rs.next()라는 메서드를 통해 자바로 입력해온 것이다.

 

공부시간 4시간.

순공부시간 2시간.

 

오늘은 집중이 잘 된것 같다. 그날 공부한 내용을 머리속에서 복기하면서 백지상태에 설명하는 식으로 정리하는 공부방법이 매우 기억력과 효율을 높여주는것 같다.