내일배움캠프 Spring 57일차(금) TIL - SpringDataJPA

Skadi·2024년 3월 15일
0

@DynamicInsert와 @DynamicUpdate

  • Spring Data JPA를 사용하여 엔티티의 Insert와 Update 작업을 보다 효율적으로 처리할 수 있도록 도와주는 @DynamicInsert와 @DynamicUpdate 어노테이션에 대해 알아보겠습니다. 이 어노테이션들은 엔티티에 적용되며, null이 아닌 필드 값만을 포함하여 SQL 쿼리를 동적으로 생성합니다. 이를 통해 성능을 최적화하고 네트워크 트래픽을 줄일 수 있습니다.

@DynamicInsert

  • @DynamicInsert 어노테이션은 엔티티에 적용되며, 엔티티의 Insert 작업 시 null 값을 갖는 필드를 제외하고 쿼리를 생성합니다. 이로 인해 생성 쿼리가 더 간결해지고, 성능이 향상될 수 있습니다.
  • 적용방법
@Entity
@DynamicInsert
public class User {
    ...
}
  • 적용 전/후 비교

    • 적용 전(모든 필드를 포함한 Insert 쿼리가 생성됩니다.)
    Hibernate: 
      insert 
      into
          users
          (password, username, id) 
      values
          (?, ?, ?)  // 소요 시간: 141ms
    • 적용 후(null이 아닌 필드만 포함한 쿼리가 생성됩니다.)
    Hibernate: 
      insert 
      into
          users
          (username, id) 
      values
          (?, ?)  // 소요 시간: 133ms
    

@DynamicUpdate

  • @DynamicUpdate 어노테이션은 엔티티에 적용되며, 엔티티의 Update 작업 시 변경된 필드만을 포함하여 쿼리를 생성합니다. 이로 인해 수정 쿼리가 더 간결해지고, 데이터베이스에 대한 부하가 줄어들 수 있습니다.
  • 적용 방법 (엔티티 클래스에 @DynamicUpdate 어노테이션을 추가합니다.)
@Entity
@DynamicUpdate
public class User {
    ...
}
  • 적용 전/후 비교

    • 적용 전 (모든 필드를 포함한 Update 쿼리가 생성됩니다.)
    Hibernate: 
      update
          users 
      set
          password=?,
          username=? 
      where
          id=?  // 소요 시간: 149ms
    
    • 적용 후 (변경된 필드만 포함한 쿼리가 생성됩니다.)
    Hibernate: 
      update
          users 
      set
          password=? 
      where
          id=?  // 소요 시간: 134ms
    

결론

@DynamicInsert와 @DynamicUpdate 어노테이션을 사용하면 필드의 수가 많아질수록 쿼리의 간결성과 성능 향상 효과가 더욱 두드러집니다. 이러한 방식으로 데이터베이스 작업의 효율성을 높이고, 애플리케이션의 전반적인 성능을 개선할 수 있습니다.

0개의 댓글