본문 바로가기

개발중/Java Persistence API (JPA)

[JPA] Entity 가 Update 되는 과정에 대해서 아니

728x90
반응형

JPA 에서 UPDATE 되는 과정

 

JPA(Java Persistence API)에서 업데이트 과정은 다음과 같이 이루어집니다:


1. 엔티티 조회

 

먼저 업데이트할 엔티티를 데이터베이스에서 조회합니다. 이는 주로 `EntityManager`를 사용하여 해당 엔티티를 조회하는 쿼리를 실행하는 방식으로 이루어집니다.


2. 엔티티 수정

 

조회한 엔티티를 수정합니다. 이때 JPA는 영속성 컨텍스트(Persistence Context)에서 관리하는 엔티티를 수정합니다. 수정은 엔티티의 필드를 변경하거나 메소드를 호출하여 이루어질 수 있습니다.


3. 트랜잭션 커밋

 

업데이트된 엔티티를 데이터베이스에 반영하기 위해 트랜잭션을 커밋합니다. 이때 JPA는 변경된 엔티티를 감지하고 해당 엔티티에 대한 UPDATE SQL 문을 생성하여 데이터베이스에 전송합니다.


4. 데이터베이스 업데이트

 

JPA가 생성한 UPDATE SQL 문을 데이터베이스에서 실행하여 엔티티의 변경 내용을 데이터베이스에 반영합니다.

 

5. 영속성 컨텍스트 갱신

 

데이터베이스 업데이트 후에 JPA는 영속성 컨텍스트를 갱신하여 데이터베이스와의 일관성을 유지합니다. 이는 업데이트된 엔티티를 다시 영속성 컨텍스트에 로드하거나 캐시를 갱신하는 등의 작업을 수행합니다.


* 위와 같은 과정을 통해 JPA는 엔티티의 수정을 데이터베이스에 반영하고 일관된 상태를 유지할 수 있습니다.

 

 

JPA 의 스냅샷(Snapshot) 이란

 

JPA에서 스냅샷(Snapshot)은 영속성 컨텍스트(Persistence Context)에서 관리되는 엔티티의 원본 상태를 나타냅니다. 

스냅샷은 엔티티가 영속성 컨텍스트에 저장될 때 생성되며, 엔티티의 현재 상태를 스냅샷에 보관합니다.

스냅샷은 주로 변경 감지(Dirty Checking) 기능에서 사용됩니다. 

변경 감지란, 영속성 컨텍스트가 엔티티의 변경 사항을 감지하여 자동으로 데이터베이스에 반영하는 기능입니다. 

이때 JPA는 현재 엔티티의 상태와 스냅샷의 상태를 비교하여 변경된 필드를 감지하고 업데이트 쿼리를 생성합니다.

스냅샷은 엔티티가 영속성 컨텍스트에 저장될 때 엔티티의 필드 값들을 복사하여 생성됩니다. 

이후 엔티티의 상태가 변경되면 스냅샷과 비교하여 변경 여부를 판단합니다. 

스냅샷을 사용하면 엔티티의 변경 사항을 추적하고 변경된 필드만을 업데이트할 수 있으므로 효율적인 업데이트 작업을 수행할 수 있습니다.

스냅샷은 영속성 컨텍스트 내부에 저장되어 있으며, 엔티티의 변경이 커밋되면 스냅샷은 업데이트되어 최신 상태를 유지합니다. 

스냅샷은 엔티티의 원본 상태를 나타내므로, 변경 감지에 활용되는 중요한 개념입니다.

728x90
반응형