[java] Hibernate Envers를 사용하여 데이터 변경 이력을 어떻게 관리할 수 있나요?

변경 이력을 관리하기 위해 Hibernate Envers를 사용할 수 있습니다. Hibernate Envers는 Hibernate를 기반으로하여 데이터베이스에 대한 변경 이력을 추적하고 버전 관리를 제공하는 라이브러리입니다. 이를 통해 데이터의 변경 이력을 쉽게 확인하고 복구할 수 있습니다.

먼저, Hibernate Envers를 프로젝트에 추가해야 합니다. Maven을 사용하고 있다면 pom.xml 파일에 다음 종속성을 추가하세요.

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-envers</artifactId>
    <version>{Hibernate 버전}</version>
</dependency>

Hibernate Envers를 추가한 후에는 엔티티 클래스에 변경 이력을 추적하고자 하는 필드에 @Audited 어노테이션을 추가하세요. 이렇게 하면 해당 필드의 변경 이력이 추적됩니다.

@Entity
@Audited
public class Employee {
    @Id
    private Long id;

    @Audited
    private String name;

    // ... 생략 ...
}

이제 데이터베이스에 변경 이력을 저장할 준비가 되었습니다. Hibernate Envers는 자동으로 생성된 하위 테이블에 변경 이력을 저장합니다. 이 하위 테이블에는 REVINFO, employee_AUD 등의 접두사가 붙은 테이블이 생성됩니다.

변경 이력을 조회하려면 AuditReader 인터페이스를 사용합니다. AuditReader를 사용하여 특정 엔티티의 이전 버전을 조회하거나 특정 시점의 변경 이력을 확인할 수 있습니다.

AuditReader reader = AuditReaderFactory.get(entityManager);
Employee employee = reader.find(Employee.class, id, revisionNumber);

위의 코드에서 entityManager은 엔티티를 관리하는 EntityManager입니다. revisionNumber는 조회하려는 변경 이력의 버전 번호입니다.

이 외에도 Hibernate Envers는 변경 이력을 원하는 방식으로 커스텀하는 기능을 제공합니다. 자세한 내용은 Hibernate Envers 공식 문서를 참조하시기 바랍니다.

참고 링크: