Java에서 DB와 연결되어 데이터를 주고 받을 수 있도록 하기 위해 제공하는 API입니다. Java의 모든 Data Access는 내부적으로 JDBC API를 이용하게 됩니다. Spring에서는 Spring-JPA를 통해 DBMS(Database Management System)의 종류에 상관 없이 JDBC API를 이용해 쉽게 프로그래밍 할 수 있도록 합니다.
원래 Oracle과 MySQL과 같은 DBMS들은 각자의 DB Driver을 가지고 있고, 개발자는 각각이 요구하는 작성 방식에 따라 쿼리문을 적을 필요가 있었습니다. JDBC는 DB Driver들의 작성 방식을 통일시켜 API로 명세한 것입니다. 만약 JDBC API를 사용하고 있다면, Oracle에서 MySQL로 DB를 변경하게 된다 해도 기존의 DB Driver에 따라 새로 작성할 필요가 없습니다. 👍
객체 지향 언어 (Oject-Oriented Language)
: 필드와 메서드 등을 클래스로 캡슐화해 객체로써 사용하며, 외에도 추상화, 상속, 정보은닉, 다형성 등의 장치가 존재합니다.
관계형 데이터베이스 (RDB, Relational Database)
: 데이터 항목 간에 사전 정의를 통해, 속성별로 데이터를 나누어 저장합니다.
서로가 지향하는 바가 다르니 문제가 발생하게 됩니다. DB에는 추상화, 상속 등의 장치가 존재하지 않고, 도리어 데이터를 쪼개어 저장할 필요가 있습니다. 이를 해결하기 위해서 개발자는 SQL을 잘 서술해야 했고, 자연스럽게 SQL에 대한 의존도가 높아지게 되었습니다.
객체와 RDB의 데이터를 자동으로 매핑해주어, 객체간의 관계를 바탕으로 SQL문을 자동으로 생성해줍니다. 즉, 객체는 객체대로, RDB는 RDB에 맞게 설계할 수 있도록 도와줍니다. 따라서, 개발자는 ORM을 이용해 직관적인 코드로 데이터를 조작할 수 있게 됩니다.
Java에서 제공하는 Java ORM 기술에 대한 표준 API입니다. Java 애플리케이션과 JDBC 사이에서 동작합니다. 개발자가 JPA를 사용하면, JPA 내부에서 JDBC API를 사용해 SQL을 호출하여 DB와 통신합니다. 객체에 하나의 정보를 추가하고자 할 때, 관련된 모든 쿼리에 정보를 추가할 필요가 없어졌습니다.
Persistence framework 종류
- SQL 문장으로 직접 데이터베이스 데이터를 다루는 SQL Mapper (ex. Mybatis 등)
- 객체를 통해 간접적으로 데이터베이스 데이터를 다루는 ORM (ex. Hibernate 등)