프로그래밍/Spring & Spring boot

[Spring/스프링] JPA(Java Persistence API)

pupu91 2022. 9. 23. 16:45
반응형

JPA(Java Persistence API) 

- 자바 어플리케이션에서 관계형 테이터 베이스를 사용하는 방식을 정의한 인터페이스

 

 


Hibernate

- 사용이 보편화 되어 있는 JPA 명세의 구현체

 

 

Spring Data JPA 

- Spring에서 제공하는 모듈로 개발자가 JPA를 더 쉽게 사용할 수 있도록 도와줌

 

 

반응형

엔터티 매니저(EntitiyManager)

- 엔터티를 저장하는 메모리상의 데이터 베이스

- 엔터티를 저장, 수정, 삭제, 조회 등 엔터티와 관련된 모든 일을 함

- 스레드세이프 하지 않기 때문에 동시성 문제 발생 할 수 있어 스레드간 공유 하면 안됨.

- web의 경우 일반적으로는 request scope와 일치시킴

 

엔터티 매니저 팩토리(EntityManagerFactory)

- 엔터티 매니저를 생성할 수 있는 기능을 제공하는 팩토리 클래스

- 여러 스레드가 동시에 접근해도 안전하기 때문에 서로 다른 스레드간 공유해서 재사용함.

- 스레드 세이프 한 기능을 요청 스코프마다 생성하기에는 비용(시간, 메모리)부담이 크기 때문에 보통application 스코프     와  동일한 싱글톤(단하나의 객체)으로 생성해서 관리함.

 

영속성 컨텍스트(PersistenceContext)

- 엔터티를 영구 저장하는 환경

- 엔터티 매니저에 엔터티를 저장하거나 조회하면 엔터티 매니저는 영속성 컨텍스트에 엔터티를 보관하고 관리 함.

- 영속성 엔터티를 key value 방식으로 저장하는 저장소 역할

- 엔터티 매니저를 생성할 때 하나 만들어지고, 엔터티 매니저를 통해서 영속성 컨텍스에 접근할 수 있고 영속성 컨텍스트    를 관리할 수 있음

 

// 엔터티 매니저 팩토리는 싱글톤으로 생성해야되서 static으로 선언
private static EntityMangerFactory entityManagerFactory;

// 엔터티는 요청시마다 만들어야 되서 static 제외
private EntityManager entityManager;

@BeforeALL
public static void initFactory(){
	entityManagerFactory = Persistence.createEntityManagerFactory("xml 설정파일 name");
}

@BeforeEach
public void initManager() {
    	entityManager = entityManagerFactory.createEntityManager();
}

@AfterAll
public static void closeFactory() {
    entityManagerFactory.close();
}

@AfterEach
public void closeManager() {
   entityManager.close();
 }

 

반응형