Develop/Spring

[Spring/JPA] 영속성(persistence)

순무엄마동생 2020. 12. 15. 21:59

*인프런 김영한 강사님JPA 로드맵 강좌를 기반으로 정리한 내용입니다!

 

영속성

persistence의 사전적 의미는 '지속됨'입니다.

컴퓨터 공학에서 영속성이란 데이터를 생성한 프로그램이 종료되더라도 데이터가 유지되는 것을 의미합니다.

 

 

영속성 컨텍스트

영속성 컨텍스트를 '엔티티를 저장하는 환경'이라고 이해할 수 있습니다.

 

  • 동작원리

EntityManagerFactory는 Entity Manager을 관리합니다. (하나의 Java Application에 하나의 EMF 존재)

Entity Manager를 통해 Persistence Context에 접근합니다.

엔티티 매니저와 영속성 컨텍스트는 N:1이거나 1:1 관계이지만 저는 스프링 프레임워크를 사용하므로 N:1 관계입니다!

 

 

  • 사용법
@PersistenceUnit
private EntityManagerFactory emf;
EntityManager em = emf.createEntityManager();

@PersistenceUnit으로 EntityManagerFactory를 받아와 EntityManager을 생성합니다.

또는 xml파일에 빈으로 EntityManagerFactory을 등록하여 사용할 수 있습니다.

 

@PersistenceContext
EntityManager em;

@PersistenceContext로 한번에 EntityManager을 생성할 수 있습니다.

 

 

  • 엔티티 생명주기

 

준영속상태는 영속성 컨텍스트에서 엔티티가 빠져나온 상태로 영속성 컨텍스트가 제공하는 기능을 사용하지 못합니다.

 

여기서 제공하는 가장 혁신적인(?) 기능은 dirty checking(변경 감지)입니다.

영속성 컨텍스트 안의 변경된 내용을 인지하여 자동으로 DB에 반영해줍니다.

 

그 외에도 지연로딩/동일성 보장 등 다양한 기능을 제공해줍니다.