hayu's 개발 일지

[TIL]240307 영속성 컨텍스트 본문

프레임워크/spring

[TIL]240307 영속성 컨텍스트

hayu00 2024. 3. 7. 21:42

영속성 컨텍스트란?

- 영속성 컨텍스트는 JPA에서 사용되는 개념 중 하나이며, 엔티티(Entity) 객체를 영구 저장하고 데이터 베이스와 상호작용한다. 

 

엔티티의 생명주기

- 비영속(new/transient): 영속성 컨텍스트와 관계가 없는 새로운 상태이다.

- 영속(managed): 영속성 컨텍스트에 관리되는 상태이다.

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

- 삭제(remove): 삭제된 상태이다.

 

영속성 컨텍스트의 특징

- 영속성 컨텍스트는 엔티티를 식별자 값으로 구분한다. 영속 상태는 식별자 값이 있어야 한다.

- JPA 는 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터 베이스에 반영한다.

+ 트랜잭션: 데이터 베이스의 상태를 변화시키는 작업이다. 여러 개의 데이터 베이스 조작 명령문(쿼리)이 모여서 한번에 실행되는 것을 말한다. 

 

영속성 컨텍스트의 장점

- 1차 캐시: 영속성 컨텍스트 내부의 캐시를 1차 캐시라 한다. 1차 캐시에 영속 상태의 엔티티를 저장한다. 1차 캐시의 키는 식별자 값이고 값은 엔티티 인스턴스이다. 

- 동일성 보장: 엔티티의 동일성을 보장한다. 

- 트랜잭션을 지원하는 쓰기 지연: 트랜잭션을 커밋하기 전까지 내부 쿼리 저장소에 모아준다. 트랜잭션을 커밋할 때 모아둔 쿼리를 DB에 보낸다.

- 변경 감지: JPA로 엔티티를 수정할 때는 엔티티를 조회해서 데이터를 변경하면 된다. 변경 감지는 영속성 컨텍스트가 관리하는 영속 상태의 엔티티만 적용된다. 

- 지연 로딩: 연관된 엔티티를 실제로 필요한 시점에 데이터베이스에서 가져온다. 즉 엔티티의 데이터를 즉시 로드하지 않고, 필요한 시점에만 데이터 베이스로부터 가져온다.

 

회고

- 영속성 컨텍스트의 개념에 대해 알아보았다. 하지만 더 이해하기 위해서는 예시 코드를 많이 봐야 할 것 같다. 추후에 예시 코드를 계속 작성해보면서 공부해봐야겠다.