ORM, JPA, Hibernate, SpringDataJpa, EntityManager 핵심 개념 정리

ORM(Object-Relational Mapping)
- 객체 지향 언어에서 사용하는 객체를 DB 와 매핑해 주는 관련 기술. 아래의 기술들로 구성됨.
- 클래스 ↔ 테이블 매핑 지원
- CRUD SQL 쿼리 자동 매핑 지원
- 연관 관계(참조 관계), 상속 자동 지원
- 객체 그래프를 RDB의 FK나 JOIN전략으로 다룸
JPA(JavaPersistanceApi)
- 자바 진영에서 ORM을 사용하기 위해 정의한 표준 인터페이스.
EntityManager
, @Entity
, @OneToMany
등이 정의된다.
EntityManager
: 영속성 컨텍스트를 관리하는 JPA의 핵심 인터페이스 객체 (ORM 기능을 제공)
@Entity
, @OneToMany
: JPA 스펙에 정의된 메타데이터로, 별도의 기능 코드는 없음.(엔티티 정보 제공용)
- 변경 감지, 엔티티 캐싱, 지연 로딩 지원
Hibernate
- JPA를 구현하는 실제 구현체이며, 1차 캐시 등의 자체 기능도 추가적으로 제공함.
- 내부의
AnnotationBinder
, MetadataBuilder
가 @Entity
등의 메타데이터를 읽고 해당 정보를 기반으로 SessionFactory
를 생성
SessionFactory
가 생성하는 Session
이 EntityManger
실제 구현체
- 1차 캐시(≓영속성 컨텍스트) : EntityManager가 관리하는 메모리 공간 객체
SpringDataJpa
- JPA를 구현하는 구현체를 설정 및 주입하고 이를 한 번 더 추상화하며 편의 기능을 추가한 Spring 기반 프레임워크
- 리포지토리 메서드 선언 만으로 메서드 이름을 활용하여 기본적인 CRUD 코드를 자동으로 지원하는 기능이 추가되었다.
- 기본적으로 JPA 구현체로 Hibernate를 사용하지만, 다른 구현체로 변경도 가능하다
떠먹는 요거트님 글이 항상 직관적이고 잘 읽히네요!