우당탕탕
[Spring] JPA에서 Persistable 인터페이스로 성능 최적화하기: isNew() 메서드 활용법 본문
isNew() 메서드를 활용하여 select 쿼리를 방지하고 데이터 삽입 성능을 최적화하는 방법
1. Persistable 인터페이스란?
JPA에서는 엔티티 객체의 상태를 관리하기 위해 다양한 방법을 제공한다. 그중 하나가 Persistable 인터페이스이다.
이 인터페이스는 엔티티가 새로 생성된 상태인지, 아니면 이미 존재하는 상태인지를 판단하는 isNew() 메서드를 제공하며 오버라이드하여 사용이 가능하다.
2. isNew() 메서드의 역할
isNew() 메서드는 JPA가 엔티티의 상태를 결정하는 데 사용되며 return 값으로 true와 false 값을 반환할 수 있다. 만약 true를 반환한다면 JPA는 해당 엔티티를 새로운 것으로 인식하고 insert 쿼리를 수행하고 반대로 false를 반환하면, JPA는 해당 엔티티가 이미 존재한다고 판단하여 select 쿼리를 수행한 후 update 쿼리를 수행한다.
이 메서드를 사용하는 이유는 주로 성능 최적화와 관련이 있다. 기본적으로 JPA는. save()와 같은 저장을 시도할 때 엔티티가 새로 생성된 것인지 확인하기 위해 select 쿼리를 실행하게 된다. 하지만 isNew()를 true로 설정하면, 이 select 쿼리를 건너뛰고 직접 insert 쿼리를 수행하여 불필요한 select 시간을 단축시킬 수 있다.
기본적으로 대량 푸시메시지 발송, 이벤트 처리시에 다건의 신규 데이터를 저장시킬 경우 사용되며, 꽤 많은 시간을 단출시킬 수 있다.
아래는 예시코드이다
import org.springframework.data.domain.Persistable;
@Entity
public class MyEntity implements Persistable<Long> {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
public MyEntity(String name) {
this.name = name;
}
@Override
public boolean isNew() {
// true를 return하여 신규저장임을 알려줌
return true;
}
}
'Tech > Spring' 카테고리의 다른 글
[Spring] 스프링 @Transactional(트랜잭션)에 대해 이해하기 (0) | 2024.09.23 |
---|---|
[Spring] 초보자를 위한 Spring Security: JWT로 웹 앱 보안 강화하기 (0) | 2024.09.14 |
[Spring] ControllerAdvice와 ExceptionHandler에 대해 (1) | 2022.09.27 |
[Spring] IoC(Inversion of Control)과 DI(Dependency Injection) 이란? (0) | 2022.09.01 |
[Spring] 필터(Filter)와 인터셉터(Interceptor) 차이 (1) | 2022.08.23 |
Comments