SpringBoot : Spring Data JPA

양현지·2023년 8월 21일
1

Web

목록 보기
8/10

1. JPA와 JPA 구현체

1) JPA (Java Persistence API)

: 자바 진영의 ORM 기술 표준으로 채택된 인터페이스의 모음
즉, 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스

  • Java의 객체와 RDB간의 매핑을 정의하고, 객체 지향적인 방식으로 RDB를 다룰 수 있도록 지원
  • 인터페이스이므로, Hibernate, OpenJPA 등이 JPA를 구현함

2) JPA 구현체

: JPA를 구현하기 위한 구현체 (EclipseLink, Hibernate, DataNucleus)

① Hibernate
: JPA 스펙의 구현체 중 하나로, 객체-관계 매핑(Object-Relational Mapping)을 위한 오픈 소스 프레임워크

② Spring Data JPA
: 스프링 프레임워크의 일부로, JPA를 사용하여 데이터 액세스 작업을 쉽게 처리하도록 지원하는 모듈

※ 차이점
Hibernate vs. Spring Data JPA

  • Spring Data JPA는 Hibernate보다 더 높은 수준의 추상화된 인터페이스를 제공하며, Hibernate에 비해 더 많은 자동화된 기능과 코드 간소화를 제공

프로젝트의 요구 사항과 개발자의 선호에 따라 선택할 수 있으며, 단순한 어플리케이션의 경우 Spring Data JPA를 사용하는 것이 더 편리할 수 있음

2. 영속성 컨텍스트

어플리케이션과 데이터베이스 사이에서 엔티티와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 기능을 수행

① "엔티티 객체"가 영속성 컨텍스트에 들어오면 JPA는 엔티티 객체의 매핑 정보를 데이터베이스에 반영하는 작업을 수행
② 엔티티 객체가 영속성 컨텍스트에 들어와 JPA의 관리 대상이 되는 시점부터 해당 객체를 "영속 객체"

1) 영속성 컨텍스트의 생명 주기

  • 영속성 컨텍스트는 "세션 단위"의 생명 주기를 가짐
    ⓐ 데이터베이스에 접근하기 위한 세션이 생성되면
    -> 영속성 컨텍스트가 생성
    ⓑ 세션 종료
    -> 영속성 컨텍스트 소멸

  • 엔티티 매니저는 이러한 일련의 과정에서 영속성 컨텍스트에 접근하기 위한 수단으로 사용됨

2) 엔티티 매니저

  • "엔티티"를 관리하는 객체
  • 데이터베이스에 접근해 CRUD 작업을 수행
  • Spring Data JPA를 사용하면 "Repository"를 사용해 데이터베이스에 접근
// 실제 내부 구현체 : SimpleJpaRepository
public SimpleJpaRepository(JpaEntityInformation<T,?>entityInformation, EntityManager entityManager){
	Assert.notNull(entityInformation,"JpaEntityInformation must not be null!");
    Assert.notNull(entityManager,"EntityManager must not be null!");
    this.entityInformation = entityInformation;
    this.em = entityManager;
    this.provider = PersistenceProvider.fromEntityManager(entityManager);
}

3) 엔티티의 생명주기

엔티티 객체는 영속성 컨텍스트에서 4가지 상태로 구분

① 비영속(New)
: 영속성 컨텍스트에 추가되지 않은 엔티티 객체

② 영속(Managed)
: 영속성 컨텍스트에 의해 엔티티 객체가 관리되는 상태

③ 준영속(Detached)
: 영속성 컨텍스트에 의해 관리되던 엔티티 객체가 컨텍스트와 분리된 상태

④ 삭제(Removed)
: 데이터베이스에서 레코드를 삭제하기 위해 영속성 컨텍스트에 삭제 요청 한 상태

0개의 댓글

관련 채용 정보