Spring Data JPA
JPA 사용을 도와주는 스프링 하위 프로젝트 중 하나인 Spring Data JPA에 대해서 알아보겠습니다.
Spring Data JPA
Spring Data JPA는 JPA를 편리하게 사용할 수 있도록 지원하는 스프링 하위 프로젝트 중 하나이다.
CRUD 처리에 필요한 인터페이스를 제공하며, 하이버테이트의 엔티티메니저(EntityManager)를 직접 다루지 않는다.
리포지토리(Repository)를 정의해 사용함으로써 스프링이 적합한 쿼리를 동적으로 생성하는 방식으로 DB를 조작한다.
이를 통해, 하이버네이트에서 자주 사용되는 기능을 더 쉽게 사용할 수 있게 구현한 라이브러리이다.
영속성 컨텍스트(Persistence Context)
- 애플리케이션과 데이터베이스 사이에서 엔티티(Entity)와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 기능을 수행한다.
- 엔티티 객체가 영속성 컨텍스트에 들어오면, JPA는 엔티티 객체의 매핑 정보를 데이터베이스에 반영하는 작업을 수행한다.
- 이처럼, 엔티티 객체가 영속성 컨텍스트에 들어와 JPA의 관리 대상이 되는 시점부터는 해당 객체를 영속 객체(Persistence Object)라고 부른다.
https://shirohoo.github.io/spring/spring-data-jpa/2021-06-23-jpa-3/ - 영속성 컨텍스트는 세션 단위의 생명 주기를 가진다.
- 데이터 베이스에 접근하기 위한 세션이 생성되면 영속성 컨텍스트가 만들어지고, 종료되면 컨텍스트도 없어진다.
- 엔티티 매니저는 일련의 과정에서 영속성 켄텍스트에 접근하기 위한 수단으로 사용된다.
엔티티 매니저(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)
- 데이터베이스에서 레코드를 삭제하기 위해 영속성 컨텍스트에 삭제 요청을 한 상태이다.
반응형
'Book > 스프링부트 핵심가이드' 카테고리의 다른 글
스프링부트 프로젝트 생성(feat. MariaDB) (0) | 2023.11.02 |
---|---|
ORM과 JPA의 개념 이해 (0) | 2023.11.01 |
로깅 라이브러리 - Logback (1) | 2023.10.26 |
댓글