[내배캠 Spring TIL] 영속성 컨텍스트 썸네일

[내배캠 Spring TIL] 영속성 컨텍스트

Spring
2024년 8월 20일

영속성 컨텍스트 (Persistence Context) #

영속성 컨텍스트(Persistence Context)는 엔티티(Entity) 객체들이 영속 상태로 관리되는 환경을 말한다. 쉽게 말해, 영속성 컨텍스트는 엔티티 객체들이 살아있는 동안 데이터베이스와의 연결을 관리하는 일종의 1차 캐시이다. 이 컨텍스트 내에 있는 엔티티들은 데이터베이스의 레코드와 동기화된다.

엔티티 상태 #

JPA에서 관리되는 객체인 엔티티는 다음과 같은 상태를 가진다.

엔티티의 생명주기엔티티의 생명주기

  • 비영속 상태 (Transient): 엔티티가 아직 영속성 컨텍스트에 저장되지 않은 상태. 새로 생성된 엔티티 객체는 비영속 상태이다.
  • 영속 상태 (Persistent): 엔티티가 영속성 컨텍스트에 저장되어 관리되는 상태. 이 상태에서는 데이터베이스와 동기화되어 변경사항이 반영될 수 있다.
  • 준영속 상태 (Detached): 영속성 컨텍스트에서 분리된 상태로, 더 이상 관리되지 않으며, 데이터베이스와 동기화되지 않는다.
  • 삭제(remove) : 삭제된 상태.

영속성 컨텍스트의 특징 #

  • 엔티티 동일성 보장: 같은 트랜잭션 내에서는 동일한 엔티티를 조회할 때 항상 동일한 객체를 반환한다. 즉, == 비교 연산으로도 동일성을 보장한다.
  • 변경 감지 (Dirty Checking): 영속성 컨텍스트는 엔티티의 변경 사항을 감지하여 트랜잭션이 커밋될 때 자동으로 데이터베이스에 반영한다.
  • 지연 로딩 (Lazy Loading): 필요할 때까지 연관된 엔티티의 로딩을 지연시켜 성능을 최적화할 수 있다.
  • 쓰기 지연 (Write-behind): 트랜잭션이 종료되기 전까지 SQL 쿼리를 모아서 실행함으로써 데이터베이스에 대한 접근을 최소화한다.

생명 주기 #

영속성 컨텍스트는 일반적으로 트랜잭션 범위 내에서 유지된다. 트랜잭션이 시작되면 영속성 컨텍스트가 생성되고, 트랜잭션이 종료되면 영속성 컨텍스트가 종료된다. 이때, 영속성 컨텍스트가 종료되면 관리되던 엔티티들은 준영속 상태로 전환된다.


최근 게시물

김진근 • © 2025