[java] Hibernate Envers에서 데이터 변경 로그를 어떻게 저장하고 조회하나요?

Hibernate Envers는 Hibernate ORM과 통합되어 데이터 변경 로그를 저장하고 조회하는 기능을 제공합니다. 이를 통해 애플리케이션의 데이터 변경 이력을 추적하고, 필요한 경우 과거 데이터를 조회할 수 있습니다.

먼저, Hibernate Envers를 프로젝트에 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음 종속성을 추가합니다:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-envers</artifactId>
    <version>5.5.7.Final</version>
</dependency>

데이터 변경 로그를 저장하기 위해, 엔티티 클래스에 @Audited 어노테이션을 추가합니다. 이 어노테이션은 해당 엔티티의 변경 이력을 추적하도록 설정합니다.

@Entity
@Audited
public class Product {
    // 엔티티 필드 및 메소드 정의
}

이제 애플리케이션에서 데이터를 변경할 때마다 Hibernate Envers가 변경 로그를 자동으로 저장합니다. 변경된 데이터는 Envers 내부의 히스토리 테이블에 저장됩니다.

데이터 변경 로그를 조회하기 위해, AuditReader를 사용합니다. AuditReader는 Hibernate Envers에서 제공하는 인터페이스로, 특정 엔티티의 변경 이력 정보를 조회하는 메소드를 제공합니다.

AuditReader auditReader = AuditReaderFactory.get(entityManager);

// 특정 엔티티의 최신 버전 조회
Product product = auditReader.find(Product.class, productId, RevisionType.ADD);

// 특정 엔티티의 모든 변경 로그 조회
List<Number> revisions = auditReader.getRevisions(Product.class, productId);
for (Number revision : revisions) {
    Product previousProduct = auditReader.find(Product.class, productId, revision);
    // 이전 버전의 엔티티 정보를 사용하여 작업
}

위의 예제 코드에서 entityManger는 Hibernate의 EntityManager 객체입니다. 이를 사용하여 AuditReader 인스턴스를 생성합니다.

find 메소드를 사용하여 특정 엔티티의 최신 버전이나 특정 버전의 엔티티를 조회할 수 있습니다. getRevisions 메소드는 특정 엔티티의 모든 변경 로그 버전을 조회합니다.

이렇게 Hibernate Envers를 활용하여 데이터 변경 로그를 저장하고 조회할 수 있습니다. 추가적인 설정이나 사용 방법에 대한 자세한 내용은 Hibernate Envers 공식 문서를 참조하시기 바랍니다.

참고 문서: