본문 바로가기
데이터 접근 기술/JPA

JPA 영속성

by oncerun 2020. 9. 2.
반응형

 

JPA를 이해하는 데 가장 중요한 용어는 영속성 콘텍스트이다. 엔티티를 영구 저장하는 환경이며 가상의 데이터베이스라고 생각하면 된다.

 

Entity를 jpa를 통해 저장하게 되면 엔티티 매니저를 사용해 엔티티를 영속성 컨텍스에 저장하는 방법이다.

그 이후  트랜잭션이 끝나서 commit되거나,

sql문이 호출된 경우 jpa는 엔티티와 데이터베이스의 로우와의 데이터를 동기화시키는 sql문을 전송하고 commit 되어 저장된다.

 

그렇다면 엔티티 매니저는 무슨 일을 할까?

 

김영한님의 JPA 프로그래밍 일부

 

그전에 엔티티 매니저를 생성해주는 엔티티 매니저 팩토리를 보자.

엔티티 매니저 팩토리는 말 그대로 엔티티 매니저를 만드는 공간이다.

일반적으로 데이터베이스를 하나만 사용하는 애플리케이션은 엔티티 매니저 팩토리를 하나만 생성하는데 ,

그 비용이 크기 때문이다. 반면 엔티티 매니저를 생성하는 것은 비용이 들지 않는다.

 

엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전해 서로 다른 스레드 간 공유가 되지만,

엔티티 매니저는 동시성 문제가 발생하므로 공유해서는 안된다.

 

엔티티 매니저가 생성될 때 하나의 영속성 콘텍스트가 생성된다.  영속성 콘텍스트에 MAP형태로 각각의 엔티티가 저장되어 사용된다. 

이 영속성 콘텍스트는 유용한 역할을 한다. 1차 캐시, 동일성 보장, SQL 쓰기 지연, 변경 감지, 지연 로딩 기능들을 사용할 수 있게 해 준다.

이 영속성 콘텍스트에 저장된 엔티티는 플러시라는 시점에 데이터 베이스에 반영된다.

 

영속성 콘텍스트가 관리하는 엔티티를 영속 상태의 엔티티라 하며, 영속 상태의 엔티티가 관리 해지가 됐다면 준영속 상태로 들어가 영속성 콘텍스트가 제공하는 기능을 사용하지 못한다. 다시 영속 상태에 오기위해선 MERGE를 통해 다시 영속성 컨텍스트 관리하에 들어올 수 있다.

 

위 그림은 엔티티의 생명주기

엔티티를 Detached 하는 순간 준영속 상태가 되며 영속성 콘텍스트가 clear()되고나 close()될 시 모든 영속 상태의 엔티티가 관리를 받지 못한다. 이런 준영속 상태의 객체들은 GC가 처리하도록 사용하지 않는 것이 좋다.

반응형

'데이터 접근 기술 > JPA' 카테고리의 다른 글

[JPA] JPQL 소개  (0) 2021.01.30
[JPA] 즉시 로딩과 지연 로딩  (0) 2021.01.28
[JPA] 상속 관계 매핑  (0) 2021.01.27
Entity 매핑  (0) 2020.09.03
JPA 소개  (0) 2020.09.01

댓글