Back-End/JPA
JPA랑 Hibernate
봉의일상
2025. 3. 9. 22:35
1. JPA란?
JPA(Java Persistence API)란?
JPA는 자바 객체(Entity)와 관계형 데이터베이스(RDB)를 매핑하는 ORM(Object-Relational Mapping) 기술의 표준 인터페이스입니다. 즉, JPA 자체는 구현체가 아니라 ORM을 위한 표준 스펙(명세, API) 을 정의하는 역할을 합니다.
JPA의 주요 특징
- 객체와 관계형 데이터베이스 매핑 → 자바 객체(Entity)와 데이터베이스 테이블을 자동으로 매핑
- SQL 대신 메서드 기반 데이터 조작 → JPQL을 사용하여 SQL 없이 데이터 조회 및 조작 가능
- 트랜잭션 및 영속성 컨텍스트 관리 → 데이터 변경 감지, 1차 캐시, 자동 플러시 등의 기능 제공
- 데이터베이스 독립성 보장 → 특정 DBMS(MySQL, PostgreSQL, Oracle 등)에 종속되지 않고 구현체 변경 가능
즉, JPA는 SQL을 직접 다루지 않고 객체 중심으로 데이터베이스를 관리할 수 있도록 도와주는 표준 기술입니다.
2. Hibernate란?
Hibernate란?
Hibernate는 JPA의 구현체(Provider) 중 하나입니다. JPA가 인터페이스라면, Hibernate는 그 인터페이스를 실제로 동작하게 만드는 라이브러리라고 볼 수 있습니다.
Hibernate의 주요 특징
- JPA의 모든 기능을 지원하며, 추가적인 기능 제공
- Lazy Loading & Fetch 전략 지원 → 연관된 엔티티를 필요할 때만 불러오는 기능
- Hibernate Query Language (HQL) 지원 → JPQL과 유사한 쿼리 언어 제공
- 배치 처리 및 캐싱 최적화 → 벌크 연산 및 1차/2차 캐싱을 지원하여 성능 개선
Hibernate는 JPA 표준을 따르면서도 고유한 기능을 추가로 제공하는 강력한 ORM 프레임워크입니다.
3. JPA와 Hibernate의 차이점
JPAHibernate
JPA | Hibernate | |
역할 | ORM의 표준 인터페이스(명세) | JPA 구현체(라이브러리) |
독립성 | 특정 벤더(구현체)에 종속되지 않음 | JPA 표준을 따르지만 Hibernate만의 기능 제공 |
사용법 | @Entity, @PersistenceContext 등 API 제공 | JPA API를 구현하며 추가 기능 제공 |
쿼리 방식 | JPQL(Java Persistence Query Language) 사용 | HQL(Hibernate Query Language) 사용 가능 |
캐싱 | 기본적으로 1차 캐시만 제공 | 1차 캐시 + 2차 캐시 제공 |
4. Spring Boot에서 JPA와 Hibernate
Spring Boot에서는 기본적으로 Hibernate를 JPA의 구현체로 사용합니다. 따라서 JPA를 사용할 경우 Hibernate가 자동으로 적용됩니다. 하지만 JPA는 특정 구현체에 의존하지 않기 때문에 필요하면 EclipseLink, OpenJPA 등의 다른 구현체로 교체할 수도 있습니다.
JPA와 Hibernate 설정 예제
Spring Boot에서 JPA(Hibernate) 설정
spring.datasource.url=jdbc:mysql://localhost:3306/testdb
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
위 설정을 적용하면 JPA를 사용할 수 있으며, 기본적으로 Hibernate가 구현체로 동작합니다.