


ORM(Object-Relational Mapping)이란?
관계형디비 테이블을 객체지향적으로 사용하기 위한 기술이다.
RDB는 상속, 다형성 레퍼런스, 오브젝트 등으로 접근이 쉽지가 않다.
→ ORM을 사용해 오브젝트와 RDB사이에 객체지향적으로 다루기 위한 기술이다.
JPA(Java Persistence Api)란? [자바 진영의 ORM 기술 표준]
JPA가 제공하는 API를 사용하면 객체를 DB에 저장하고 관리할 때, 개발자가 직접 SQL을 작성하지 않아도 된다.
JPA가 개발자 대신 적절한 SQL을 생성해서 DB에 전달하고, 객체를 자동으로 Mapping 해준다.
JPA의 장점
🔥 JPA의 주의할 점
Hibernate란?
dialect 프로퍼티를 수정함으로서 쉽게 처리할 수 있습니다.엔티티를 영구 저장하는 환경이라는 뜻
영속성 컨텍스트는 논리적 개념이고, 눈에 보이지 않는다.
EntityManager를 통해서 영속성 컨텍스트에 접근한다.
애플리케이션과 데이터베이스 사이의 중간 계층이다.
영속성 컨텍스트의 이점
: 1차 캐시
: 동일성 보장
: ⚡️ 트랜잭션을 지원하는 쓰기 지연 SQL 저장소
: ⚡️ 변경 감지 - Dirty Checking
: ⚡️ 지연 로딩 - Lazy Loading(지연 SQL 저장소)
지연 로딩과 관련된 Maven의 옵션
: hibernate.jdbc.batch.size_size 메이븐에서 설정하는 hibernate의 옵션인데
한 번에 DB로 보낼 수 있는 값을 설정한다.
Entity조회
1차 캐시 : DB까지 가지 않고 영속 컨텍스트에서 찾아서 사용한다.

2번째 조회부터는 1차 캐시에서 가져온다.
JPA는 Entity에서 가져오는 것을 영속성 컨텍스트에 올린다.
Entity의 생명 주기
1. 비영속
: 영속성 컨텍스트와 전혀 관계가 없는 상태
2. 영속
: 영속성 컨텍스트에 관리되는 상태
3. 준영속(detached)
: 영속성 컨텍스트에 저장되었다가 분리된 상태
4. 삭제
: 삭제된 상태

Flush : 영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 것
(영속성 컨텍스트를 비우는 것이 아니다.)
→ 영속성 컨텍스트의 변경 사항들과 DB의 상태를 맞추는 작업이다.
: Flush 사용방법
커밋을 하면 플러시가 일어난다
엔티티와 스냅샷을 비교한다.
스냅샷 : 내가 값을 읽어온 최초 시점에 값을 떠놓은 것
스냅샷과 다르다? → Dirty Checking
업데이트 쿼리를 쓰기 지연 SQL에 등록한다.
Dirty Checking
수정된 엔티티 쓰기 지연 SQL 저장소에 등록
쓰기 지연 SQL 저장소의 쿼리를 DB에 전송
⟴ 그저 CRUD를 편하게 할 수 있어서 신기했던 JPA에 대해서 원리를 공부하기 시작했다. 생각보다 단순하지 않고, 잘 모르고 사용한다면 독이 될 수도 있다는 것을 알았다. 영속성 관리 부분도 처음에는 그냥 쉽게 이해했다고 생각했는데, 역시 정리할 때 애매한 부분이 많았던 것 같다.