[spring] jpa auditing기능
스프링 ORM인 JPA가 가진 기능이다.
어떤 데이터를 갱신할 때 항상 같이 바꿔줘야하는 게 있다.
데이터 갱신할 때 언제 최초로 저장했는지, 최근 수정일자와 누가 변경했는지가 그것!
전에는 보통 로직쪽에서 서버시간을 String으로변환하거나
바티스의 경우 sql에서 sysdate를 활용하거나 함수를 이용해 현시간을 저장하도록
항상 적용해줘야했다.
한데, 이 audit기능을 이용하면 jpa가 변동을 이용해 변동내역을 자동으로 반영해서 갱신해준다
엄청 편리해보인다.
Auditing 사용
1. Application클래스에 @EnableJpaAuditing달기
2. Entity클래스에 @EntityListeners(AuditingEntityListener.class) 및 auditing할 속성에 각 어노테이션 달기
클래스 위쪽에 @EntityListeners(AuditingEntityListener.class)을 달았고
createdAt에 @CreatedDate를
updatedAt에 @LastModifedDate를 달아주었다
JPA를 활용해 save를 해주면 Entity의 createAt과 updatedAt을 별도로 입력하지 않아도
현재 시간이 적용되어 들어간다.
더 알아보기
https://docs.spring.io/spring-data/jpa/docs/1.7.0.DATAJPA-580-SNAPSHOT/reference/html/auditing.html
3. Auditing
Spring Data provides sophisticated support to transparently keep track of who created or changed an entity and the point in time this happened. To benefit from that functionality you have to equip your entity classes with auditing metadata that can be defi
docs.spring.io
스프링 문서의 Auditing을 참고하였다
Auditing의 사용목적
엔티디의 생성 혹은 변경시 그 시점과 변경자를 보다 더 투명하게 추적할 수 있다.
엔티티의 생성이나 변경할 때 개발자가 입력한 코드가 아니라 JPA에 의해 갱신되므로 데이터 변경에 대한 메타데이터를 투명하게 유지할 수 있다
사용방법
어노테이션의 사용 혹은 인터페이스를 구현
1. 어노테이션 사용
@CreatedBy최초등록자
@LastModifiedBy 최종갱신자
@CreatedDate 최초생성시간
@LastModifiedDate 최종갱신시간
시점에 대한 어노테이션은 java.util.Date, long/Long, org.joda.time.DateTime,java.time.LocalDateTime 에 대해 적용가능
2.인터페이스기반
어노테이션을 사용하지 않는 경우 Auditable인터페이스를 구현받아서 정의할 수 있는데,
Auditing을 위한 속성들의 setter를 노출한다.
또는 AbstractedAuditable클래스를 상속받아 사용할 수 있지만, 이 경우 결합도가 증가한다.