JDBC란?
JDBC(Java Database Connectivity) : 애플리케이션에서 데이터베이스에 데이터를 저장하거나 업데이트, 접근할 수 있도록 도와주는 자바 API
데이터베이스 연결, SQL문 실행, 쿼리 결과 처리 등을 위한 표준 인터페이스를 제공한다.
등장 배경
애플리케이션 개발 시 중요 데이터는 주로 데이터베이스에 저장된다.
클라이언트가 데이터를 저장하거나 조회할 때 과정은 간단히 다음과 같다.
- 애플리케이션 서버는 TCP/IP를 통해 데이터베이스와 연결하고(커넥션 연결),
- 연결된 커넥션으로 SQL을 전달하면 데이터베이스가 SQL 수행한 결과를 보내고, 애플리케이션에서 응답으로 받는다.
하지만, 수십개에 달하는 각 관계형 데이터베이스마다 연결, SQL 전달, 결과 응답 방식이 다르므로,
- 데이터베이스 변경 시 해당 코드도 함께 수정해야 한다.
- 개발자는 다양한 데이터베이스에 대한 연결 방법, SQL 전달 방법, 결과 수신 방법을 각각 학습해야 한다.
라는 문제점이 있다. 이런 문제를 해결하기 위해 JDBC라는 자바 표준이 등장한 것
최근에는 JDBC의 직접적인 사용이 줄고 Spring Data JDBC, Spring Data JPA 같은 기술이 등장했지만, 이들 기술 역시 내부적으로 JDBC를 활용하기 때문에 JDBC의 작동 원리를 이해하는 것은 여전히 중요하다.
JDBC 작동 과정
- JDBC 드라이버 로드 : 데이터베이스 벤더가 제공하는 JDBC 드라이버를 로드한다.
- 데이터베이스 연결 생성 : DriverManager 클래스를 사용해 데이터베이스와 연결을 생성한다.
- SQL 실행 : Connection 객체를 통해 SQL 문을 실행하고 결과를 처리한다.
- 데이터베이스 연결 종료 : 더 이상 사용하지 않는 연결은 닫아준다.
JDBC의 장점
- 데이터베이스 독립성
- 일관된 API 제공 -> 데이터베이스 변경 시 코드 수정 최소화
- 애플리케이션 로직은 JDBC 인터페이스에만 의존하므로, 데이터베이스 변경 시 JDBC 구현 라이브러리만 변경하면 된다.
- 데이터 영속성 보장 : 안전하게 데이터 저장/관리
- 다양한 데이터베이스 지원
- Oracle, MySQL, PostgreSQL 등을 포함한 다양한 데이터베이스를 지원
- 따라서 한 번 배우면 다양한 데이터베이스에 적용할 수 있다.
- XML 데이터 자동 생성 : 데이터베이스에서 XML 형식의 데이터를 자동으로 생성
JDBC의 단점
- 반복적인 코드: 연결 생성, SQL 실행, 결과 처리 등 반복적인 코드가 필요하다.
- SQL 직접 작성
- 개발자가 직접 SQL 문을 작성해야 한다.
- 데이터베이스마다 SQL, 데이터타입 등의 사용법이 다를 수 있다.
이러한 단점을 해결하기 위해 Spring Data JDBC, Spring Data JPA 등의 기술이 등장했는데, 이 기술들은 JDBC의 단점을 해결하는 동시에 장점을 활용할 수 있게 한다.
특히 JPA(Java Persistence API)를 사용하면 이렇게 각각의 데이터베이스마다 다른 SQL을 정의해야 하는 문제도 많은 부분 해결할 수 있다.
JDBC와 최신 데이터 접근 기술
JDBC를 보다 편리하게 사용할 수 있는 대표적인 기술로는 SQL Mapper와 ORM 기술이 있다.
- SQL Mapper
- SQL 응답 결과를 객체로 쉽게 변환 -> SQL문 작성 이외의 반복적인 코드 불필요
- 대표적인 기술 : 스프링 JdbcTemplate, MyBatis
- 단, 개발자가 SQL을 직접 작성해야 한다.
- ORM
- SQL Mapper와 ORM 기술은 각각 장단점이 있으며, 상황에 따라 적절한 기술을 선택하는 것이 중요하다.
중요한 점은 이 모든 기술이 내부적으로 JDBC를 사용한다는 것이다. 따라서 처음에 서술했듯 JDBC의 기본 원리를 이해하는 것이 중요하다.
참고 : JDBC 연결 풀
JDBC 연결 풀을 사용하면 연결 생성 및 해제 비용을 줄이고 성능을 향상시킬 수 있다.
Apache Commons DBCP, HikariCP 등이 대표적인 JDBC 연결 풀 라이브러리다.
GitHub 댓글