Book/스프링부트 핵심가이드

Spring Data JPA와 Entity의 설명

블로그 주인장 2023. 11. 1.

Spring Data JPA

JPA 사용을 도와주는 스프링 하위 프로젝트 중 하나인 Spring Data JPA에 대해서 알아보겠습니다.

 

Spring Data JPA


Spring Data JPA는 JPA를 편리하게 사용할 수 있도록 지원하는 스프링 하위 프로젝트 중 하나이다.

CRUD 처리에 필요한 인터페이스를 제공하며, 하이버테이트의 엔티티메니저(EntityManager)를 직접 다루지 않는다.

리포지토리(Repository)를 정의해 사용함으로써 스프링이 적합한 쿼리를 동적으로 생성하는 방식으로 DB를 조작한다.

이를 통해, 하이버네이트에서 자주 사용되는 기능을 더 쉽게 사용할 수 있게 구현한 라이브러리이다.

 

영속성 컨텍스트(Persistence Context)


  1. 애플리케이션과 데이터베이스 사이에서 엔티티(Entity)와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 기능을 수행한다.
  2. 엔티티 객체가 영속성 컨텍스트에 들어오면, JPA는 엔티티 객체의 매핑 정보를 데이터베이스에 반영하는 작업을 수행한다.
  3. 이처럼, 엔티티 객체가 영속성 컨텍스트에 들어와 JPA의 관리 대상이 되는 시점부터는 해당 객체를 영속 객체(Persistence Object)라고 부른다.
    https://shirohoo.github.io/spring/spring-data-jpa/2021-06-23-jpa-3/
  4. 영속성 컨텍스트는 세션 단위의 생명 주기를 가진다.
  5. 데이터 베이스에 접근하기 위한 세션이 생성되면 영속성 컨텍스트가 만들어지고, 종료되면 컨텍스트도 없어진다.
  6. 엔티티 매니저는 일련의 과정에서 영속성 켄텍스트에 접근하기 위한 수단으로 사용된다.

 

엔티티 매니저(Entity Manager)


 

  • 엔티티 매니저(EntityManager)는 이름 그대로 엔티티를 관리하는 객체이다.
  • 데이터베이스에 접근해서 CRUD 작업을 수행한다.
  • Spring Data JPA를 사용하면 리포지토리(Repository)를 사용해서 데이터베이스에 접근한다.

 

엔티티 매니저 팩토리(Entity Manager Factory)


  • 엔티티 매니저는 엔티티 매니저 팩토리(EntityManagerFactory)에서 만든다.
  • 데이터베이스에 대응하는 객체로써 스프링부트에서는 자동설정이 있다.
  • application.properties에서 작성한 최소한의 설정만으로도 동작하지만, JPA의 구현체 중 하나인 하이버네이트에서는 persistence.xml 이라는 설정파일을 구성하고 사용해야하는 객체이다.
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" version="2.1">
    <persistence-unit name="entity_manager_factory" transaction-type="RESOURCE_LOCAL">
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver"/> <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="password"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mariadb://localhost:3306/springboot"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MariaDB103Dialect"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>
  • persistence-unit 을 설정하면 해당 유닛의 이름을 가진 엔티티 매니저 팩토리가 생성된다.
  • 엔티티 매니저 팩토리는 애플리케이션에서 단 하나만 생성되며, 모든 엔티티가 공유해서 사용한다.
  • 엔티티 매니저 팩토리로 생성된 엔티티 매니저는 엔티티를 영속성 컨텍스트에 추가해서 영속 객체를 만드는 작업을 수행하고, 영속성 켄텍스트와 데이터베이스를 비교하면서 실제 DB를 대상으로 작업을 수행한다.

 

엔티티의 생명주기


비영속(NEW)

  • 영속성 컨텍스트에 추가되지 않은 엔티티 객체의 상태를 의미한다.

영속(Managed)

  • 영속성 컨텍스트에 의해 엔티티 객체가 관리되는 상태이다.

준영속(Detached)

  • 영속성 컨텍스트에 관리되던 엔티티 객체가 컨텍스트와 분리된 상태이다.

삭제(Removed)

  • 데이터베이스에서 레코드를 삭제하기 위해 영속성 컨텍스트에 삭제 요청을 한 상태이다.
반응형

댓글