Spring 영속성 컨텍스트

Ada·2022년 10월 8일
0

항해TOL

목록 보기
28/63

영속성이란 데이터 또는 어떠한 값이 유실되지 않고 유지되도록 하는 성격

컨텍스트란 스프링부트 내의 임시 저장소

영속성 컨텍스트란 스프링 부트 내부에서 데이터가 유실되지 않도록 잠깐 저장하고 있는 공간

1차 캐시 : 임시 저장 과정

1차 캐시의 장점

  • 백엔드 서버에서 DB를 조회하는 횟수를 줄일 수 있음
  • DB row 1개당 객체 1개가 사용되는 것을 보장 할 수 있음
    (객체 동일성 보장)

영속화

  • 객체를 생성해서 save 한 다음 이것을 savedUser에 저장하면 영속화 되었다고 표현함.

  • savedUser.set 객체 와 Repository.findById를 통해 가져온 데이터는 일치하지 않음

  • Repository.findById 를 사용하면 DB가 아닌 1차 캐시에서 값을 가져오기 때문

Entity 업데이트 방법

  • userRepository.save() 사용
    public User updateUser1() {
        // 테스트 회원 "user1" 생성
        User user = new User("user1", "RM", "고기");
        // 회원 "user1" 객체를 영속화
        User savedUser1 = userRepository.save(user);

        // 회원의 nickname 변경
        savedUser1.setNickname("남준이");
        // 회원의 favoriteFood 변경
        savedUser1.setFavoriteFood("육회");

        // user1 을 저장
        User savedUser2 = userRepository.save(savedUser1);
        assert(savedUser1 == savedUser2);

        return savedUser2;
    }
  • @Transactional 을 추가
  • 굳이 userRepository.save() 함수를 호출하지 않아도, 함수가 끝나는 시점에 변경된 부분을 알아서 업데이트 해 줌 (이를 "Dirty check" 라고 함)
  • 간단히 함수가 종료되는 시점에 각 Entity 에 save() 가 호출된다라고 이해
profile
백엔드 프로그래머

0개의 댓글