[Spring Boot] JPA와 Hibernate란 ?

BitedRadish·2025년 5월 17일
post-thumbnail

✅ JPA (Java Persistence API)란?

JPA(Java Persistence API)는 자바 애플리케이션에서 객체(Object)와 관계형 데이터베이스(Relational Database) 사이의 데이터를 매핑해주는 ORM(Object-Relational Mapping) 기술에 대한 표준 명세(Interface)입니다.

쉽게 말해, JPA는 자바 개발자들이 SQL을 직접 작성하지 않고도 객체 지향적으로 DB를 다룰 수 있도록 도와주는 “기준”입니다.
즉, 실제로 동작하는 구현체는 아니며, 대표적인 구현체로는 Hibernate, EclipseLink 등이 있습니다.

🧱 왜 JPA를 써야 할까?
자바에서 DB와 연동하는 가장 기본적인 방식은 JDBC입니다. JDBC로 쿼리를 날릴 땐 SQL을 직접 작성해야 하며, 매핑도 수동으로 해야 합니다.

SELECT * FROM user WHERE id = 1;

이런 쿼리를 작성하는 건 반복적일 뿐만 아니라,

  • 쿼리 작성 시 실수 가능성 (문법 오류)
  • DB 컬럼 ↔ 객체 필드 간 매핑 수작업
  • 쿼리 재사용 어려움

등의 문제가 발생합니다.

반면 JPA를 사용하면 객체 중심으로 코드를 작성하고, 복잡한 SQL 없이도 대부분의 CRUD를 처리할 수 있습니다.

userRepository.findById(1L);

JPA는 내부적으로 적절한 JPQL(HQL)을 생성하고, 이를 다시 SQL로 번역하여 실행합니다.
즉, 비즈니스 로직은 객체 중심, 실행은 SQL 기반으로 처리됩니다.

✅ Hibernate란?

앞에서 설명한 것처럼 JPA는 단순히 "규약(인터페이스)"일 뿐이라, 혼자서는 아무것도 실행할 수 없습니다.

그래서 이 JPA를 실제로 동작하게 해주는 구현체(Implementation)가 필요한데,
그 중 가장 대표적이고 널리 사용되는 것이 바로 Hibernate입니다.

📌 Hibernate는 JPA를 구현한 ORM 프레임워크입니다.

✅ Hibernate는 JPA보다 많은 기능을 제공합니다

JPA는 말 그대로 최소한의 기능만 정의한 표준이에요.
Hibernate는 이걸 기반으로 더 많은 부가기능을 제공합니다.

JPA 기능Hibernate에서 지원하는 추가 기능
CRUD (save, find 등)Dirty Checking (변경 감지)
JPQLNative SQL 지원, Criteria API 확장
엔티티 매핑1차 캐시, 2차 캐시, 배치 처리, 통계 기능 등
트랜잭션 관리더 다양한 전파 옵션, 고급 설정 가능

✅ Hibernate는 어떻게 동작할까?

Spring Boot 프로젝트에 아래 의존성을 추가하면,

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

이 내부적으로 Hibernate를 기본 JPA 구현체로 사용합니다.
즉, 우리가 @Entity, @Repository, @Transactional 등을 쓰면,
실제로 SQL을 만들고 실행하는 건 Hibernate입니다.

✅ Hibernate가 SQL을 만드는 흐름

userRepository.save(new User("kim", "kim@email.com"));

위 코드 한 줄이 실행되면,

  1. User 클래스의 @Entity 정보를 Hibernate가 분석
  2. 필요한 SQL(예: INSERT INTO users (...) VALUES (...))을 생성
  3. 트랜잭션이 커밋될 때 실제 DB에 반영

Hibernate는 중간에서 이 모든 일을 처리해주는 ORM 엔진입니다.

profile
코딩 주니어

0개의 댓글