[Spring Boot] 32. 스프링부트 블로그 v2 (JPA) (2) Persistance Context (영속성 컨텍스트)

김주희's avatar
Apr 03, 2025
[Spring Boot] 32. 스프링부트 블로그 v2 (JPA) (2) Persistance Context (영속성 컨텍스트)

1. PC (Persistance Context)

1. 개념

 

2. 동작

user를 db에 저장하고자 하는 상황이다.
  1. respository에서 user는 현재 비영속 객체이다. 이때 user는 username, password, email만 가지고 있다.
  1. 이때 em.persist 메서드를 통해 user를 영속화 시키게 되면 pc에서의 user 객체는 영속 객체가 된다.
  1. PC에서 @ID(PK)를 체크하여 이 값이 null인지 확인한다. (= DB에 없음을 의미)
  1. user 객체를 DB에 저장한다.
  1. DB에 저장된 user 객체에는 id가 자동 생성된다.
  1. DB에 저장된 데이터와 user 객체가 동기화 되면서 null이던 id에 값이 들어온다.
    1. notion image
 

3. 장점

  1. insert와 동시에 id값을 알 수 있다. 따라서 insert 이후 id를 찾기 위해 다시 조회할 필요가 없다
 

4. 코드로 확인해보기

  1. UserService 클래스에서 User user = joinDTO.toEntity(); 에서의 user는 비영속 객체이다.
    1. 따라서 이때의 user 객체로 getId 메서드를 실행하면 id는 null로 값이 존재하지 않는다.
  1. UserRepository 클래스에서 em.persist(user);를 통해 DB에 저장되고 user가 영속화되어 영속 객체가 된다.
  1. 따라서 em.persist(user); 이후 user는 DB와 동기화 되어 id 값을 가지게 된다.
  1. 다시 UserService 클래스에서 userRepository.save(user); 이후의 user는 id가 있는, 동기화 된 영속 객체이므로 이때의 객체로 getId 메서드를 실행하면 id는 값이 존재한다.
  • UserService
    • notion image
  • UserRepository
    • notion image
  • 실행 결과
    • notion image
 
 

 
notion image
notion image
notion image
 
 
notion image
notion image
캐싱하면 select 없어
Share article

jay0628