save와 saveAll의 차이는 무엇인가요?

  • 기본적인 차이는 save()는 엔티티 1개를, saveAll()은 N개의 엔티티를 저장하는 것인데 성능 차이가 존재한다.

  • save()saveAll() 모두 내부적으로 @Transactional이 적용되어 있다. 즉 트랜잭션 AOP가 적용돼 프록시를 통해 실행된다는 뜻이다.

  • 만약 100,000개의 엔티티를 Loop를 통해 save 메서드를 사용해 저장한다면 각각의 엔티티가 프록시를 거치는 비용이 발생한다.

  • 하지만 자료구조에 저장한 후 saveAll()로 저장한다면 같은 인스턴스 내의 함수 save()를 호출하므로, 프록시를 거치지 않는다.

  • 따라서 한 번의 많은 엔티티를 저장할 때에는 save()보다는 saveAll()이 성능상 좋다.

Last updated