먼저, 스프링 부트에 대해서 공부하면서 궁금했던 부분이 있었는데, 바로 repository.save를 할 때 어떻게 insert 인지 아니면 update인지를 구분하는가였다. 이 궁금증이 JPA 영속성 컨텍스트에 대해 공부하면서 어느정도 해결이 되었다.
엔티티를 영구 저장하는 환경으로 어플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 역할을 한다.
영속성 컨텍스트는 내부에 (id, instance) 맵 형태를 갖고 있는 캐시를 가지고 있는데 여기에 엔티티들이 저장된다.
User firstUser = new User("user1", "홍길동", "치킨"); //각 값들은 username, nickname, favoritefood를 나타낸다.
User savedFirstUser = userRepository.save(firstUser); // 이를 통해 user1 객체를 영속화 한다.
위와 같은 과정을 통해 객체가 영속성 컨텍스트에 들어가면 1차 캐시는 이를 담는다.
Entity 저장
Entity 조회
1차 캐시에 해당 id가 있을 경우
1차 캐시에 해당 id가 없을 경우