Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 개발자 취업
- Java
- 자료구조
- aop
- 회고
- 코딩공부
- 코딩테스트 준비
- 99클럽
- HTML
- Spring
- 면접(java
- Til
- ArrayList
- 배열
- CS
- Grafana
- 항해99
- 메서드
- 이진 탐색(binary search)
- github
- css
- 프로그래머스
- wil
- cs 공부)준비
- 코딩
- Entity
- GIT
- 정렬 알고리즘(sort algorithm)
- 자바
- 코딩문제
Archives
- Today
- Total
hayu's 개발 일지
[TIL]240418 영속성 컨텍스트 본문
영속성 컨텍스트란?
- 엔티티를 영구 저장하는 환경
- 애플리케이션과 DB 사이에서 객체를 보관하는 가상의 저장소같은 역할이다.
- 엔티티 메니저(EntityManager)를 통해 영속성 컨텍스트에 접근한다.
→ 엔티티 메니저를 통해 엔티티를 저장, 조회하면 엔티티 매니저는 영속성 컨텍스트에 해당 엔티티를 보관하고 관리한다.
- 영속성 컨텍스트는 JPA에서 사용되는 개념 중 하나이며, 엔티티(Entity) 객체를 영구 저장하고 데이터 베이스와 상호작용한다.
엔티티의 생명주기
- 비영속(new/transient): 영속성 컨텍스트와 관계가 없는 새로운 상태이다.(무관한 상태)
- 영속(managed): 영속성 컨텍스트에 관리되는 상태이다.(저장된 상태)
- 준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된 상태이다.
- 삭제(remove): 삭제된 상태이다.
비영속(new)
- 엔티티 객체를 생성했지만, 아직 영속성 컨텍스트에는 저장되지 않은 상태(순수 객체)
Member member = new Member();
영속(Managed)
- 엔티티 매니저를 통해서 엔티티를 영속성 컨텍스트에 저장한 상태이다.
- 객체는 영속성 컨텍스트에 의해 관리된다는 의미이다.
// 순수 객체
Member member = new Member();
// 영속성 컨텍스트에 저장 -> 영속성 컨텍스트가 관리
EntityManager em;
em.persist(member);
준영속(detached)
- 영속성 컨텍스트가 관리하던 상태에서 엔티티를 더이상 관리하지 않는 상태이다.
준영속 상태의 특징
- 1차 캐시, 쓰기 지연, 변경 감지, 지연 로딩을 포함한 영속성 컨텍스트가 제공하는 어떠한 기능도동작하지 않는다.
- 식별자 값을 가지고 있다.
// 엔티티를 영속성 컨텍스트에서 분리.
em.detach(member);
// 영속성 콘텍스트를 비움(초기화).
em.claer();
// 영속성 콘텍스트를 종료.
em.close();
엔티티를 준영속 상태로 전환하는 방법
detach(entity)
- 특정 엔티티만 준영속 상태로 전환(영속성 컨텍스트로부터 분리)
- 1차 캐시, 쓰기 지연, SQL 저장소 정보 제거
- 영속성 컨텍스트 안에서의 Insert, Update 쿼리도 제거되어 DB에 저장되지 않음
clear()
- 영속성 컨텍스트를 완전히 초기화
- 영속성 컨텍스트의 모든 엔티티를 준영속 상태로 만듦
- 영속성 컨텍스트 틀은 유지하지만 내용은 비워 새로 만든 것과 같은 상태
close()
- 영속성 컨텍스트를 종료
- 해당 영속성 컨텍스트가 관리하던 영속성 상태의 엔티티들은 모두 준영속 상태로 변경
엔티티를 영속 상태로 전환하는 방법
merge(entity)
- 준영속 상태의 엔티티를 다시 영속 상태로 변경(병합)
- 파라미터로 전달된 엔티티의 식별자 값으로 영속성 컨텍스트를 조회하고 엔티티가 없다면, DB에서 조회
- 만약 DB에서도 없다면 새로운 엔티티를 생성하여 병합
- 병합은 save(저장) 또는 update(수정) 기능 수행
삭제(remove)
- 엔티티를 영속성 컨텍스트와 데이터 베이스에서 삭제
em.remove(member);
영속성 컨텍스트의 특징
- 엔티티 매니저를 생성할 때 영속성 컨텍스트도 생성된다.(1:1)
- 엔티티 메니저를 통해 해당 영속성 컨텍스트에 접근, 관리할 수 있다.
- 영속성 컨텍스트는 엔티티를 식별자 값으로 구분한다.
- 영속 상태는 식별자 값이 있어야 한다.
- JPA 는 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터 베이스에 반영한다.
- 트랜잭션: 데이터 베이스의 상태를 변화시키는 작업이다. 여러 개의 데이터 베이스 조작 명령문(쿼리)이 모여서 한번에 실행되는 것을 말한다.
- 영속성 상태의 엔티티는 모두 영속성 컨텍스트에서 관리한다.
- 내부 캐시(1차 캐시)에 저장
- 동일성 보장
- 트랜잭션을 지원하는 쓰기 지연
- 변경 감지
- 지연 로딩
참고 자료
'프레임워크 > spring' 카테고리의 다른 글
[TIL]240422 Grafana 그라파나 설치 (0) | 2024.04.22 |
---|---|
[TIL]240420 프로메테우스와 스프링 연결하기 (0) | 2024.04.20 |
[TIL]240415 테스트란 (0) | 2024.04.15 |
[TIL]240413 Scheduler, Batch, Quartz / 프로젝트 Spring Scheduler 선택 이유 (0) | 2024.04.13 |
[TIL]240412 Spring Scheduler (0) | 2024.04.12 |