영속성 컨텍스트 & Entity Manager

GreatCloud·2025년 12월 11일

백엔드

목록 보기
3/14

JPA 구조

JPA = 자바의 표준 ORM(Object Relational Mapping)
Java 진영의 ORM 기술에 대한 API 표준 명세이고 사용하기 위해서는 JPA를 구현한 ORM 프레임워크(하이버네이트, EclipseLink등)를 선택해야한다.

Entity

DB에 매핑될 객체

Entity Manager

Entity들을 관리하는 인터페이스

Entity Manager Factory

Entity Manger를 생성

Persistence Context << 영속성 컨텍스트

Entity를 관리하는 공간

Persistence Unit

영속성 컨텍스트와 DB와 연결 해줌
데이터베이스 연결을 위한 설정
e.g. JDBC 드라이버, URL, 사용자 이름, 비밀번호등
원래 persistence.xml로 설정해야하나
스프링에서는 properties나 yml로 설정가능

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/bookmoa?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
    username: 
    password:
    driver-class-name: com.mysql.cj.jdbc.Driver

JPA 흐름

영속성 컨텍스트

영속성 컨텍스트는 엔티티 인스턴스를 효율적으로 관리하는 공간이다

1차 캐시

엔티티와 그 식별자가 Map 형태로 저장되어 있는 캐시
1차 캐시에 엔티티가 있다면 DB 접근 없이 연산을 수행할 수 있다

쓰기 지연(Write-behind)

Entity instence에 대한 쿼리를 바로 DB로 보내지 않고
1차 캐시에만 변경을 반영하고 쿼리는 쓰기 지연 저장소에 모아둔다
이렇게 되면 '1차 캐시 - DB'간에 불일치가 발생하는데
이를 동기화(flush) 시켜줄 때 모아두었던 쿼리를 한번에 DB로 보낸다

변경 감지(Dirty checking)

자동으로 변경을 감지해주는 것
JPA는 Entity가 영속성 컨텍스트에 처음 들어올 때 그 상태를 복사해 저장한다.(스냅샷)
flush를 하기전, 스냅샷과 현재 상태를 비교해서 UPDATE 쿼리를 쓰기 지연 저장소에 추가한다.

ORM을 사용해서 높은 성능을 내는 이유는 데이터베이스의 접근을 최소화 하기 때문이다

영속성 컨텍스트를 통해 DB접근을 줄여주는 것이 ORM의 주요 역할 중 하나이다

profile
모르는 것에 부끄러워 말고 아는 것에 자만하지 말 것

0개의 댓글