베오
DCode
베오
전체 방문자
오늘
어제
  • 분류 전체보기 (218)
    • 공지사항 (1)
    • 잡설 (1)
    • Programming (33)
      • [C] (1)
      • [Java] (4)
      • [Python] (2)
      • [Android] (2)
      • [Network] (0)
      • [Operation System] (2)
      • [Spring Boot] (22)
      • [Docker] (0)
    • Algorithm (31)
      • 자료구조 (2)
      • 알고리즘 (Java) (14)
      • 알고리즘 (기초) (15)
    • Coding Test (131)
      • BOJ (131)
      • Algospat (0)
    • 이론적인거 (14)
      • 보안 (5)
      • 오류 해결 (2)
      • 디자인 패턴 (5)
      • 네트워크 (1)
      • 기타 (1)
    • 최신기술 (4)
      • 블록체인 (1)
    • [Project] (1)

블로그 메뉴

  • 🐈‍⬛ GitHub
  • 📫 방명록
  • 🔖 태그

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
베오

DCode

Programming/[Spring Boot]

JPA save vs saveAndFlush

2023. 3. 16. 10:24

JpaRespository 인터페이스에서 save와 saveAndFlush 라는 메서드가 존재한다.

두 메서드 모두 인자 내의 데이터를 데이터베이스에 저장하는 메서드이다.

두 메서드가 어떤 차이가 있는지 알아보자.


Docs 살펴보기

JpaRepository (Spring Data JPA Parent 3.0.3 API)
declaration: package: org.springframework.data.jpa.repository, interface: JpaRepository
https://docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/JpaRepository.html

위 사이트로 접속하게 되면 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
    'Programming/[Spring Boot]' 카테고리의 다른 글
    • 서비스 테스트 코드 작성
    • 리포지토리 테스트 코드 작성
    • Entity 관련 Annotation
    • Lombok
    베오
    베오

    티스토리툴바