본문 바로가기
JPA

JPA - 영속성 컨텍스트

by 근즈리얼 2021. 10. 15.
728x90

JPA - 자바 ORM기술입니다.

ORM : 객체와 관계형 데이터베이스를 매핑해주는 기술입니다.

 

객체 프로그래밍과 데이터베이스는 같게 설계될 수 없는 구조입니다.

 

현재 데이터베이스의 핵심 기술은 관계형 데이터베이스입니다. 마찬가지로 프로그래밍의 핵심은 객체입니다.

 

이런 두 관계 사이에서 패러다입의 불일치가 발생했습니다.

 

이런 불일치를 해소하기 위해 ORM기술이 사용되었고 자바에서 사용할 수 있는 JPA가 만들어졌습니다.

 

JPA에서 가장 중요한 2가지가 있습니다.

 

1. 객체와 관계형 데이터베이스 매핑

2. 영속성 컨텍스트

 

JPA에서 영속성 컨텍스트가 베이스가 되기 때문에 영속성 컨텍스트에 대해서 우선 정리를 해보겠습니다.

 

영속성 컨텍스트
  • JPA를 이해하는데 가장 중요한 용어
  • "엔티티를 영구 저장하는 환경"이라는 뜻
  • EntityManager.persist(entity);

 

엔티티 메니저, 영속성 컨텍스트

- 영속성 컨텍스트는 논리적인 개념입니다.

- 엔티티 매니저를 통해서 영속성 컨텍스트에 접근할 수 있습니다.

 

J2SE환경

EntityManager    ->    PersistenceContext

      1                :                1

 

엔티티의 생명주기

- 비영속 : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태

- 영속 : 영속성 컨텍스트에 관리되는 상태

- 준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태

- 삭제 : 삭제된 상태

 

// 비영속
Member member = new Member();
member.setId(100L);
member.setName("hello");

// 영속
em.persist(member);

- 만들어진 Member객체가 persist의 여부에 따라 비영속과 영속의 관계로 나뉩니다.

- 영속성 상태가 된다고 하더라도 데이터베이스에는 저장되지 않습니다.

Member member = new Member();
member.setId(100L);
member.setName("hello");

// 영속
System.out.println("=========");
em.persist(member);
System.out.println("=========");

- 만약 데이터베이스에 저장이 된다면 persist를 했을 때 쿼리문이 만들어져야 합니다.

- 결과는 persist를 실행했을 때는 쿼리문이 발생하지 않았습니다.

- 그렇다면 언제 쿼리문이 발생하고 데이터베이스에 저장되는 것일까요?

 

// 비영속
              Member member = new Member();
              member.setId(100L);
              member.setName("hello");

              // 영속
              System.out.println("=========");
              em.persist(member);
              System.out.println("=========");

              tx.commit();

- tx.commit()이 실행될 때 데이터베이스로 저장됩니다.

- 이밖에도

em.detach(member) -> 회원엔티티를 영속성 컨텍스트에서 분리 : 준영속 상태로 만들어 줍니다.

em.remove(member) -> 회원엔티티 객체를 데이터베이스에서 삭제시킵니다.

 

이제 바로 데이터베이스에 바로 저장하고 지우면 되는데 영속성 컨텍스트라는 것을 사용하는지에 대해서 생각해보겠습니다.

- 1차 캐시

- 동일성 보장

- 트랜잭션을 지원하는 쓰기 지연

- 변경 감지

- 지연 감지

 

위에 적은 기능들을 영속성 컨텍스트를 이용하여 사용할 수 있습니다.

다음 포스팅에서도 천천히 알아가 보도록 하겠습니다.

 

출처

https://www.inflearn.com/course/ORM-JPA-Basic

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔

www.inflearn.com

 

728x90

댓글