Hansel
1. JPA와 영속성 컨텍스트 본문
JPA?
Jpa란 Java Persistence API의 축약어로 자바 진영의 ORM 기술 표준을 의미한다.
ORM?
ORM은 Object-relational mapping(객체 관계 매핑)을 의미한다.
객체는 객체대로 설계하고 관계형 DB는 관계형 DB대로 설계하는데 이 둘 사이의 차이를 ORM 프레임워크가 중간에서 매핑을 도와준다!
따라서 우리가 자바를 통해 객체지향원칙을 준수하여 짠 코드를 JPA가 DB와의 불일치를 해결해주고 DB에 Insert를 도와준다.
반대의 작업도 마찬가지다!
JPA는 왜 써야할까?
앞서 말했듯이 DB와 객체지향 사이의 불일치를 해결해줌과 동시에 생산성 , 유지보수 용이, 성능 등의 이유로 필요하다.
영속성 컨텍스트
영속성 컨텍스트란 무엇일까?
영속성 컨텍스트란 "엔티티를 영구 저장하는 환경"을 의미한다.

JPA에선 엔티티 매니저 팩토리를 통해 엔티티를 관리하는데 코드에 보이는 persist는 단순히 보면 엔티티를 DB에 저장하는 코드처럼 보인다.
하지만 persist는 사실 영속성 컨텍스트에 저장하는 것을 의미한다.
엔티티의 생명주기
엔티티에는 생명주기가 다음과 같이 있다.
- 비영속 (Transient) : 최초 생성 상태를 의미한다 (new Member())
- 준영속 (Detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태.
- 영속 (Managed) : 영속성 컨텍스트에 관리되는 상태.(persist)
영속성 컨텍스트의 이점?
1. 1차 캐시
=> 영속성 컨텍스트에 관리되는 상태라면 굳이 DB에서 가져올 필요 없이 영속성 컨텍스트를 통해 가져올 수 있다.
2. 동일성 보장
=> 자바 컬렉션에서 뽑아서 비교할때와 유사하게 비교시 같은 값을 보장한다.
3. 트랜잭션을 지원하는 쓰기 지연
=> persist로 계속 보내도 insert 쿼리를 바로 보내지 않고 commit 하는 순간에 보낸다.
4. 변경 감지
=> 더티 체킹, 영속성 엔티티를 수정하면 jpa가 체크해서 반영한다.
5. 지연 로딩
=> 매우 중요한 개념으로 추후에 따로 작성
Flush란?
플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영함을 의미한다.
플러시를 하는 방법은 다음과 같은 방식이 있다.
- 엔티티매니저에서 flush 메서드 호출.
- 트랜잭션 커밋
- JPQL 쿼리 실행
'JPA' 카테고리의 다른 글
| 5. JPA와 DB의 다양한 관계 (0) | 2022.02.09 |
|---|---|
| 4. JPA와 연관 관계 매핑 1 (0) | 2022.02.05 |
| 3. JPA와 컬럼 매핑 (0) | 2022.02.05 |
| 2. JPA와 엔티티 매핑 (0) | 2022.02.05 |