JDBC, ORM, JPA, Hibernate, Spring Data JPA
1. JDBC (Java Database Connectivity)
- 정의: 자바에서 데이터베이스에 연결하고 SQL 쿼리를 실행하기 위한 저수준 API입니다.
- 특징:
데이터베이스와의 연결, 쿼리 실행, 결과 처리 등을 수동으로 관리해야 합니다.
SQL을 직접 작성해야 하며, 코드가 길어질 수 있습니다.
성능은 좋지만, 유지보수가 어렵고 코드가 복잡해질 수 있습니다.
2. ORM (Object-Relational Mapping)
- 정의: 객체 지향 프로그래밍 언어의 객체와 관계형 데이터베이스의 데이터 간의 매핑을 자동으로 처리하는 기술입니다.
- 특징:
SQL 쿼리 없이 객체를 데이터베이스에 저장하거나 조회할 수 있도록 해줍니다.
코드의 가독성과 유지보수성을 높입니다.
ORM 구현체를 사용하면 객체와 데이터베이스 간의 변환을 자동으로 처리합니다.
3. JPA (Java Persistence API)
- 정의: 자바 EE의 스펙으로, ORM을 구현하기 위한 표준 API입니다.
- 특징:
데이터베이스와의 상호작용을 추상화하여, 객체를 영속화하는 방법을 정의합니다.
JPA를 사용하면 다양한 ORM 구현체(Hibernate, EclipseLink 등)를 교체할 수 있습니다.
JPA는 데이터베이스 작업을 객체 지향적으로 처리할 수 있도록 돕습니다.
4. Hibernate
- 정의: JPA의 대표적인 구현체로, 가장 널리 사용되는 ORM 프레임워크입니다.
- 특징:
JPA의 모든 기능을 제공하며, 추가적인 기능(예: 세션 관리, 캐싱 등)을 갖추고 있습니다.
복잡한 쿼리, 관계 매핑, 트랜잭션 관리 등 다양한 기능을 지원합니다.
Hibernate는 JPA의 표준을 따르기 때문에 JPA로 작성된 코드를 사용할 수 있습니다.
5. Spring Data JPA
- 정의: 스프링 프레임워크의 일부로, JPA를 쉽게 사용할 수 있도록 돕는 프로젝트입니다.
- 특징:
리포지토리 패턴을 사용하여 데이터 액세스를 단순화합니다.
기본 CRUD 메서드 및 쿼리를 자동으로 생성하여 개발자의 작업을 줄여줍니다.
JPA와 Hibernate를 쉽게 통합하여 사용할 수 있으며, 스프링의 다양한 기능(예: 트랜잭션 관리, AOP 등)을 활용할 수 있습니다.
관계 및 차이점
JDBC는 가장 기본적인 데이터베이스 연결 방식으로, ORM이나 JPA와는 독립적인 기술입니다.
ORM은 JDBC와 같은 저수준 API 대신 객체와 데이터베이스의 매핑을 자동으로 처리하는 개념입니다. JPA는 ORM의 표준 API입니다.
JPA는 ORM의 표준을 정의하는 것이고, Hibernate는 JPA의 구체적인 구현체입니다. 따라서 Hibernate는 JPA의 규칙을 따르면서 추가 기능을 제공합니다.
Spring Data JPA는 JPA를 쉽게 사용하기 위한 도구로, JPA/Hibernate와 함께 사용되며 데이터 액세스를 단순화합니다.