JpaRespository 인터페이스에서 save와 saveAndFlush 라는 메서드가 존재한다.
두 메서드 모두 인자 내의 데이터를 데이터베이스에 저장하는 메서드이다.
두 메서드가 어떤 차이가 있는지 알아보자.
Docs 살펴보기
위 사이트로 접속하게 되면 JpaRepository 인터페이스에 대해 알 수 있다.
자세히 볼 것은 save, flush, saveAndFlush
메서드이다.
save
메서드는 CrudRepository에서 상속받아 사용하는 것을 알 수 있다.
플러시(flush)란??
영속성 컨텍스트의 변경 사항을 DB에 반영하는 것
flush 메서드
flush 메서드는 보류 중인 모든 변경 사항을 데이터베이스에 반영하는 역할을 한다.
save 메서드
주어진 Entity를 저장하는 역할을 한다.
saveAndFlush 메서드
주어진 Entity를 저장하고 변경 사항을 즉시 데이터베이스에 반영하는 역할을 한다.
그래서 무슨 차이가 있는데?
save 와 saveAndFlush의 차이를 살펴보면 메서드 명에서 알 수 있듯이 flush처리의 유무
이다.
save
메서드는 flush되기 전 까지 해당 변경 사항을 영속성 컨텍스트에 저장해놓는다.
반면에, saveAndFlush
는 해당 Entity을 영속성 컨텍스트에 저장한 뒤, 바로 데이터베이스에 반영하는 역할을 한다.
그럼 save를 쓰면 안되는건가? 언제 saveAndFlush를 사용하는가?
결론만 말하면 상황에 따라서 선택하면 된다.
saveAndFlush
는 영속성 컨텍스트를 강제로 flush하므로 애플리케이션의 속도를 저하시킬 우려가 있다.
saveAndFlush
를 사용해야 하는 최적의 상황은 다음과 같다.
저장 작업이 잘 이루어 졌는지 확인하는 저장 프로시저를 실행해야 하는 작업이 존재한다고 해보자
위 경우는 변경 사항이 DB에 동기화 되지 않고 저장 프로시저가 변경 사항을 모르기 때문에 위 경우에는 saveAndFlush
가 적절하게 쓰일 수 있다.
Uploaded by N2T
'Programming > [Spring Boot]' 카테고리의 다른 글
서비스 테스트 코드 작성 (0) | 2023.03.16 |
---|---|
리포지토리 테스트 코드 작성 (0) | 2023.03.16 |
Entity 관련 Annotation (0) | 2023.03.12 |
Lombok (0) | 2023.03.12 |
JpaRepository getById, findById (0) | 2023.03.12 |