클라이언트 데이터를 저장할때 서버에 데이터를 전달하고 서버는 DB에 데이터를 저장한다. 또한 클라이언트가 데이터를 조회 요청을 보내면 서버는 DB에서 데이터를 조회한다.
일반적으로 서버와 DB 사용법은 서버는 DB에 TCP/IP를 사용해서 커넥션을 연결하고 SQL을 DB에 전달하면 DB에서는 해당 데이터의 결과 값을 서버에 반환한다.
그러나 DB마다 커넥션 연결 방법, SQL 전달 방법, 응답 결과를 받는 방법이 모두 달라 개발자는 사용할 DB마다 사용해야 하는 방법을 새로 학습해야 했다. 또한 코드도 해당되는 DB에 맞는 코드로 재작성해야 하는 번거로움도 있었다.
이를 해결하기 위해 JDBC(Java DataBase Connectivity)가 등장했다.
JDBC는 자바에서 데이터베이스에 접속할 수 있도록하는 자바 API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다.
JDBC 인터페이스에서는 표준 인터페이스를 정해두었다.
개발자는 이 표준 인터페이스를 사용해서 개발하면 되는데 이 인터페이스만을 가지고는 기능이 동작하지 않고 DB 회사에서 제공하는 라이브러리를 사용해야한다. 이를 JDBC 드라이버라고 한다.
JDBC 등장으로 기존의 문제가 해결되었다. 이제 애플리케이션 로직이 DB마다 다르게 짤 필요가 없이 JDBC 표준 인터페이스에만 의존하여 코딩하면 되었다. 따라서 다른 DB로 변경하고 싶으면 JDBC 구현 라이브러리만 변경하면 된다. 또한 개발자는 DB에 맞는 커넥션 연결, SQL 전달, 결과 받는 방법을 학습할 필요가 없이 JDBC 인터페이스 사용법만 학습하면된다.
그러나 DB마다 일부 사용방법이 다르기 때문에 일반적인 부분만 공통화 되어있기 때문에 한계가 존재했다.
JDBC를 직접 사용하기 보다 JDBC를 편리하게 사용하는 기술을 사용하면 보다 쉽게 JDBC를 사용할 수 있다. 대표적 기술로서 ORM과 SQL Mapper가 있다.
JDBC를 편리하게 사용하도록 도와준다. SQL 응답 결과를 객체로 편리하게 반환해주고 JDBC 반복 코드를 제거해준다. 그러나 개발자가 직접 SQL 문을 작성해야 한다.
대표적 기술 : spring JdbcTemplate, MyBatis
ORM은 객체를 관계형 DB 테이블과 매핑해주는 기술이다. 개발자는 ORM 덕분에 SQL문을 직접 작성하지 않고, ORM 기술이 개발자 대신에 SQL문을 동적으로 만들어 실행해준다. DB마다 다른 SQL 문제도 ORM을 해결해준다.
대표적 기술 : JPA, 하이버네이트, 이클립스링크
각각의 기술마다 장단점이 존재하는데 SQL Mapper는 개발자가 직접 SQL문을 작성하는 문제가 있지만 다른 번거로운 일은 Mapper가 대신 해겨해준다. ORM은 SQL 자체를 작성할 필요가 없어 생산성이 높아지지만 높은 이해도가 필요하다.