CS

JDBC의 이해

Ynghan 2024. 3. 7. 20:51

※ 글의 목적 : JDBC가 어떻게 탄생했는지, 흐름을 알아보자!

 

초기 개발에는 데이터베이스 벤더(회사)마다 서버와의 통신 방식이 모두 제각각이었다.

1. DB와 커넥션 연결하는 방법

2. DB에  SQL을 전달하는 방법

3. DB의 결과를 응답받는 방법

이 세가지가 모두 벤더마다 달라 사용하는 DB에 맞게 코드를 짜야했다.

이러한 문제를 해결하기 위해 JDBC 표준 인터페이스를 만들어 모든 데이터베이스에 대한 규격을 일치시키고,

각각의 DB 벤더는 해당 라이브러리를 상속받아 인터페이스에 맞게 코드를 구현하여 라이브러리로 제공한다.

예를 들어, MySQL DB에 접근할 수 있는 MySQL JDBC 드라이버를 구현하여 라이브러리로 제공한다.

대표적으로, JDBC는 세 가지를 표준 인터페이스로 정의하여 제공한다.
- java.sql.Connection : 연결
- java.sql.Statement : sql을 담은 내용
- java.sql.ResultSet : sql 요청 응답

그러나, 이렇게 JDBC 표준 인테페이스로 추상화해도

JDBC에 대한 코드들은 어떤 DB의 종류에 상관없이 서버의 코드를 일관되게 유지할 수 있지만, SQL에 대한 코드는 공통처리되지 않은 부분이 있기 때문에 DB에 따라 수정해주어야 한다.

 

JDBC 또한 굉장히 Low 레벨로 구현되어 있기 때문에, 현재 개발자들이 사용하기가 다소 어렵다. JDBC를 편리하게 사용해주는 2가지 기술이 있다.

1. SQL Mapper

2. ORM

이 두 가지 기술은 각각 장단점이 존재한다.

SQL Mapper의 경우, 쿼리를 직접 작성해야 하기 때문에 쿼리에 대한 깊은 이해를 바탕으로 한다. 그러나 이외의 객체로 변환해주는 방법 등을 편리하게 자동화 해주는 이점이 있다.

ORM 기술의 경우, 쿼리를 단순화 시켜 자바 컬렉션을 사용하는 것 처럼 용이하게 사용할 수 있다. 그러나 해당 기술 자체의 깊이가 있기 때문에 ORM 기술 자체를 학습해야 하는 부분이 많은 단점이 있다.

하지만, 이러한 기술 모두 결국 JDBC를 활용하는 기술이기 때문에, JDBC에 대해 알아야 추후에 발생할 트러블 슈팅에 대한 처리가 가능하다.