Spring Boot/데이터베이스 연동

[Spring boot] 영속성 컨텍스트

재윤 2025. 8. 17. 17:32
반응형
  • 영속성 컨텍스트(Persistence Context)는 애플리케이션과 데이터베이스 사이에서 엔티티와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 기능을 수행
  • 엔티티 객체가 영속성 컨텍스트에 들어오면 JPA는 엔티티 객체의 매핑 정보를 DB에 반영하는 작업 수행
  • 엔티티 → 영속성 켄텍스트에 들어와 JPA의 관리 대상이 되는 시점붙너는 영속 객체(Persistence Object)라고 한다

 

영속성 컨텍스트

  • 세션 단위의 생명 주기를 가진다.
  • DB에 접근하기 위한 세션이 생성되면 영속성 컨텍스트가 만들어지고 세션이 종료되면 영속성 컨텍스트도 없어진다.
  • 엔티티 매니저는 이러한 일련의 과정에서 영속성 컨텍스트에 접근하기 위한 수단으로 사용

 

엔티티 매니저(EntityManager)

  • 엔티티를 관리하는 객체
  • DB에 접근해서 CRUD 작업을 수행

Spring Data JPA를 사용하면 리포지토리를 사용해서 DB에 접근

밑 코드는 실제 내부 구현체인 SimpleJpaRepository가 레포지토리에서 엔티티 매니저를 사용하는 것을 알 수가 있다.

public SimpleJpaRepository(JpaEntityInformation<T, ?> entityInformation, EntityManager entityManager) {
    this.escapeCharacter = EscapeCharacter.DEFAULT;
    Assert.notNull(entityInformation, "JpaEntityInformation must not be null");
    Assert.notNull(entityManager, "EntityManager must not be null");
    this.entityInformation = entityInformation;
    this.entityManager = entityManager;
    this.provider = PersistenceProvider.fromEntityManager(entityManager);
}
  • 엔티티 매니저는 엔티티 매니저 팩토리(EntityMangerFactory)가 만든다.
    • 엔티티 매니저 팩토리는 DB에 대응하는 객체로서 스프링 부트에서는 자동 설정 기능이 있기 때문에 application.properties에서 작성한 최소한의 설정만으로도 동작하지만 → 자동
  • JPA의 구현체 중 하나인 하이버네이트에서는 persistence.xml이라는 설정 파일을 구성하고 사용해야하는 객체 == 수동

 

밑은 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 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을 설정하면 해당 유닛이름을 가진 엔티티 매니저 팩토리가 생성됨
  • 엔티티 매니저 팩토리는 애필르케이션에서 단 하나만 생성
  • 모든 엔티티가 공우해서 사용
 <persistence-unit name="entity_manager_factory" transaction-type="RESOURCE_LOCAL">

엔티티 매니저 팩토리로 생성된 엔티티 매니저는 엔티티 영속성 컨텍스트에 추가해서 영속 객체로 만드는 작업을 수행

영속성 컨텍스트와 DB를 비교하면서 실제 DB를 대상으로 작업 수행

 

엔티티 생명주기

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

  • 비영속(New)
    • 영속성 컨텍스트에 추가되지 않은 엔티티 객체
  • 영속(Managed)
    • 영속성 컨텍스트에 의해 엔티티 객체가 관리되는 상태
  • 준영속(Detached)
    • 영속성 컨텍스트에 의해 관리되던 엔티티 객체가 컨텍스트 분리된 상태
  • 삭제(Removed)
    • DB에서 레코드를 삭제하기 위해 영속성 컨텍스트에 삭제 요청을 한 상태
반응형

'Spring Boot > 데이터베이스 연동' 카테고리의 다른 글

[Spring boot] 엔티티 설계 - 실습  (0) 2025.08.17
[Spring boot] DB 연동 - 실습  (0) 2025.08.17
[Spring boot] JPA  (1) 2025.08.17
[Spring boot] ORM  (0) 2025.08.17
[Spring boot] 마리아 DB 설치  (0) 2025.08.17