⚡ 생각대로 살지 않으면 사는대로 생각한다.
⚡ 나는 어차피 잘 될 놈이다. 이미 잘 되고 있고, 계속해서 잘 되고 있다.
JPA에서 가장 중요한 2가지
- 객체와 관계형 데이터베이스 매핑(Object Relational Mapping)
- 영속성 컨텍스트
엔티티 매니저 팩토리와 엔티티 매니저
고객의 요청이 올 때마다 엔티티 매니저 팩토리
가 엔티티 매니저
를 생성하고, 엔티니 매니저
는 내부적으로 데이터베이스 커넥션을 이용해서 DB를 사용한다.
영속성 컨텍스트
- JPA를 이해하는데 가장 중요한 용어
- 엔티티를 영구 저장하는 환경
- EntityManager.persist(entity)
- entity가 DB에 저장되는 것 처럼 보였지만, 실상은 DB에 저장하는 것이 아니라, 영속성 컨텍스트를 통해서 entity를
영속화
한다는 의미다.
- 정확히는 entity를
영속성 컨텍스트
라는 곳에 저장한다는 의미다.
영속성 컨텍스트
는 논리적인 개념
- 눈에 보이지 않고,
엔티티 매니저
를 통해서 영속성 컨텍스트
에 접근한다.
✅엔티티 매니저는 사실 영속성 컨텍스트와 1:1이다.
즉 엔티티 매니저를 생성하면, 그 엔티티 매니저 내부에 영속성 컨텍스트가 생성된다.
엔티티의 생명주기
- 비영속(new/transient)
- 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
- 영속(managed)
- 준영속(detached)
- 삭제(removed)
참고

비영속
- 객체를 생성만 한 상태

영속
- 객체를 생성하고, 객체를 영속성 컨텍스트에 저장한 상태

- 영속 상태가 되었다고, DB에 쿼리가 날라가는 것이 아니다!!
- 트랜잭션을 커밋하는 시점에 쿼리가 날라간다!
준영속
삭제
- 객체를 삭제한 상태
- DB에 저장된 객체를 삭제함.
영속성 컨텍스트의 이점
- 1차 캐시
- 동일성(identity) 보장
- 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
- 변경 감지(Dirty Checking)
- 지연 로딩(Laza Loading)