1. JDBC 개요
- JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API입니다.
- JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공합니다.
- JDBC는 표준 인터페이스로, 다양한 데이터베이스와 연동할 수 있게 해줍니다.
1.1 JDBC의 등장 이유
- 애플리케이션을 개발할 때 중요한 데이터는 대부분 데이터베이스에 보관합니다.
- 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해서 데이터베이스를 사용합니다.
1.1.1 데이터베이스 사용 과정
- 커넥션 연결: 주로 TCP/IP를 사용해서 커넥션을 연결합니다.
- SQL 전달: 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달합니다.
- 결과 응답: DB는 전달된 SQL을 수행하고 그 결과를 응답합니다. 애플리케이션 서버는 응답 결과를 활용합니다.
1.1.2 데이터베이스 변경시 문제점
- 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 그리고 결과를 응답 받는 방법이 모두 다릅니다.
- 데이터베이스를 다른 종류의 데이터베이스로 변경하면 애플리케이션 서버에 개발된 데이터베이스 사용 코드도 함께 변경해야 합니다.
- 개발자가 각각의 데이터베이스마다 커넥션 연결, SQL 전달, 그리고 그 결과를 응답 받는 방법을 새로 학습해야 합니다.
- 이러한 문제점을 해결하기 위해 JDBC라는 표준이 만들어졌습니다.
정보
JDBC 이전에는 개발자가 Oracle, MySQL, PostgreSQL 등 각 데이터베이스별로 다른 방식의 코드를 작성해야 했습니다. JDBC는 이러한 문제를 해결하기 위해 표준 인터페이스를 제공합니다.
1.2 JDBC 인터페이스
- JDBC는 대표적으로 아래 3가지 인터페이스를 제공합니다.
- java.sql.Connection: 데이터베이스와의 연결을 담당합니다.
- java.sql.Statement: SQL 쿼리를 실행하기 위한 인터페이스입니다.
- java.sql.ResultSet: SQL 쿼리 실행 결과를 담는 객체입니다.
- 개발자는 이 표준 인터페이스를 사용해 데이터베이스를 사용하면 됩니다.
1.3 JDBC 구현체
- JDBC 인터페이스만으로는 기능이 동작하지 않습니다. 이를 구현한 구현체가 필요합니다.
- 각각의 DB 벤더는 자신의 DB에 맞도록 JDBC 인터페이스를 구현해 제공하며 이를
JDBC 드라이버라고 합니다. - 예를 들어서 MySQL DB에 접근 할 수 있는 것은 MySQL JDBC 드라이버라 하고, Oracle DB에 접근할 수 있는 것은 Oracle JDBC 드라이버라 합니다.
1.4 JDBC의 장점
- 애플리케이션 로직이 JDBC 인터페이스에 의존하기 때문에 다른 DB로 변경하는 경우 애플리케이션 로직 코드의 변경 없이 드라이버만 변경하면 됩니다.
- 과거 각각의 DB 사용법을 익혀야 했지만 표준 API인 JDBC를 사용하므로 개발자는 JDBC 인터페이스 사용법만 학습하면 됩니다.
1.5 한계점
- JDBC의 등장으로 많은 것이 편리해졌지만, 각각의 데이터베이스마다 SQL, 데이터타입 등의 일부 사용법이 다릅니다.
- ANSI SQL이라는 표준이 있기는 하지만 일반적인 부분만 공통화했기 때문에 한계가 있습니다.
- 결국 데이터베이스를 변경하면 JDBC 코드는 변경하지 않아도 되지만 SQL은 해당 데이터베이스에 맞도록 변경해야합니다.
- JPA(Java Persistence API)를 사용하면 이렇게 각각의 데이터베이스마다 다른 SQL을 정의해야 하는 문제도 많은 부분 해결할 수 있습니다.
- JDBC는 1997년에 출시될 정도로 오래된 기술이고, 사용하는 방법도 복잡합니다.
- 그래서 최근에는 JDBC를 직접 사용하기 보다는 JDBC를 편리하게 사용하는 다양한 기술이 존재합니다.
2. ORM과 SQL Mapper
- 최근에는 JDBC를 직접 사용하기 보다 ORM이나 SQL Mapper를 사용합니다.
- 이 기술들도 내부에서는 모두 JDBC를 사용합니다.
2.1 SQL Mapper
- SQL Mapper는 SQL만 직접 작성하면 나머지 번거로운 일은 SQL Mapper가 대신 해결해줍니다.
- 결과를 객체로 편리하게 매핑해줍니다.
- 대표적으로 스프링 JdbcTemplate, MyBatis가 있습니다.
2.1.1 SQL Mapper의 장점
- JDBC를 편리하게 사용하도록 도와줍니다.
- SQL 응답 결과를 객체로 편리하게 변환해줍니다.
- JDBC의 반복 코드를 제거해줍니다.
- SQL Mapper는 SQL만 작성할 줄 알면 금방 배워서 사용할 수 있습니다.
2.1.2 SQL Mapper의 단점
- 개발자가 SQL을 직접 작성해야합니다.
- 데이터베이스 변경 시 SQL 쿼리를 수정해야 할 수 있습니다.
2.2 ORM
- ORM은 객체를 관계형 데이터베이스 테이블과 매핑해주는 기술입니다.
- JPA는 자바 진영의 ORM 표준 인터페이스이고, 이것을 구현한 것으로 하이버네이트와 이클립스 링크 등의 구현 기술이 있습니다.
- 스프링 데이터 JPA, Querydsl은 JPA를 더 편리하게 사용할 수 있게 도와주는 프로젝트입니다.
2.2.1 ORM의 장점
- 개발자는 반복적인 SQL을 직접 작성하지 않고, ORM 기술이 개발자 대신에 SQL을 동적으로 만들어 실행해줍니다.
- 각각의 데이터베이스마다 다른 SQL을 사용하는 문제도 중간에서 해결해줍니다.
- 객체 중심의 개발이 가능하여 생산성이 향상됩니다.
2.2.2 ORM의 단점
- 편리한 반면에 쉬운 기술은 아니므로 실무에서 사용하려면 깊이있게 학습해야 합니다.
- 복잡한 쿼리나 성능이 중요한 경우 직접 SQL을 작성하는 것이 더 효율적일 수 있습니다.
팁
ORM과 SQL Mapper는 상호 배타적인 기술이 아닙니다. 많은 프로젝트에서 두 가지 접근 방식을 함께 사용하여 각 기술의 장점을 활용합니다. 예를 들어, 간단한 CRUD 작업에는 ORM을, 복잡한 쿼리에는 SQL Mapper를 사용하는 방식입니다.