개발중/Java Persistence API (JPA)
Spring Boot JPA에서 엔티티를 읽기 전용으로 설정하는 방법 ( @Immutable과 readOnly 트랜잭션 활용하기 )
Binsoo
2025. 2. 24. 09:11
728x90
반응형
Hibernate의 @Immutable 사용
Hibernate를 사용한다면, 엔티티 클래스에 @Immutable 어노테이션을 추가할 수 있습니다.
@Immutable 어노테이션은 해당 엔티티가 수정되지 않는다는 것을 Hibernate에게 알려주며, 업데이트나 삭제 작업을 무시하거나 예외를 발생시킵니다.
import javax.persistence.Entity;
import org.hibernate.annotations.Immutable;
@Entity
@Immutable
public class MyEntity {
// 필드, getter 등
}
읽기 전용 트랜잭션 사용
서비스 계층에서 @Transactional(readOnly = true)를 사용하면, 해당 트랜잭션 내에서는 엔티티 변경 사항이 flush되지 않으므로 읽기 전용으로 동작하게 됩니다. 하지만 이 방식은 엔티티 객체 자체를 수정하는 것을 막지는 않으므로, 실수로 수정된 상태가 감지되더라도 flush되지 않게 할 뿐입니다.
@Service
public class MyService {
@Transactional(readOnly = true)
public List<MyEntity> getMyEntities() {
return myEntityRepository.findAll();
}
}
가장 확실한 방법은 Hibernate를 사용하는 경우 엔티티에 @Immutable 어노테이션을 추가하는 것입니다. 추가로 서비스 계층에서 @Transactional(readOnly = true)를 활용하면, 전체 애플리케이션에서 읽기 전용 환경을 유지하는 데 도움이 됩니다. 이를 통해 도메인 엔티티의 변경을 방지하고, 읽기 전용으로 사용할 수 있습니다.
728x90
반응형