[Spring Boot] JPA Auditing 으로 생성/변경일시 관리하기

안녕하세요. 남산돈가스입니다.

오늘은 Spring Boot + JPA 환경에서 Auditing을 이용하여 생성/변경일시를 관리하는 법에 대해 포스팅하겠습니다.

일반적으로 테이블을 설계할 때, 거의 필수적으로 관리되는 컬럼들이 있습니다. 대표적인 예로 생성일시, 변경일시 등이 있을 것이고, 또 최종 변경자, 최초 생성자도 있을 수 있겠네요.

JPA환경에서 Entity들을 관리할 때, 이 모든 Entity에서 위에서 언급한 컬럼들을 일일이 관리하기엔 번거로움이 있을 것 같습니다. 또한, 코드 레벨에서 이 데이터들의 값을 관리하기는 더 어려운 일이 아닐 수 없겠죠.

이런 불편함들을 해소하고자(?) 혹은 Spring Data JPA가 아닌 다른 프레임워크 환경에서의 ORM에서 기본적으로 제공되던 것(ex. Sequelize 등) 들을 대체해 줄 수 있는 것이 바로 Spring Data JPA의 Auditing 입니다.

Auditing을 사용하기 위해서는 간단한 설정이 필요합니다.

Auditing을 활성화하기 위한 적당한 이름의 Config 파일을 생성한 뒤,
@EnableJpaAuditing 어노테이션을 추가합니다.
@EnableJpaAuditing
@Configuration
public class JpaAuditingConfig {
}

Config를 생성한 뒤, 이제 Audity로 제공할 데이터들을 정의하는 클래스를 생성합니다.
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class Audity {

    @CreatedDate
    @Column(name = "created_date", updatable = false)
    private LocalDateTime createdDate;

    @LastModifiedDate
    @Column(name = "updated_date", updatable = true)
    private LocalDateTime updatedDate;
}
Audity라는 추상클래스를 생성하였고, @MappedSuperclass 어노테이션, @EntityListeners(AuditingEntityListener.class) 를 추가하였습니다.

  • @MappedSuperclass : JPA Entity 클래스들이 해당 추상 클래스를 상속할 경우 createDate, modifiedDate를 컬럼으로 인식
  • @EntityListeners(AuditingEntityListener.class) : 해당 클래스에 Auditing 기능을 포함
  • @CreatedDate : Entity가 생성되어 저장될 때 시간이 자동 저장
  • @LastModifiedDate : 조회한 Entity의 값을 변경할 때 시간이 자동 저장

이제 위에서 생성한 Audity 추상클래스를 Entity에서 상속받아 사용하기만 하면 됩니다.

@Entity
@Table(name="post")
@Getter
public class Post extends Audity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private Long id;

    @Column(name="title")
    private String title;

    @Column(length = 2000, name="content")
    private String content;

    @Column(length = 50, name="writer")
    private String writer;
}

예제로 사용할 Post Entity이며, Audity를 상속받았습니다. 그러므로, 위에서 정의한 id, title 등 4개의 컬럼 이외에 우리가 Audity에서 정의한 createdDate / updatedDate가 미리 정의되어 있다고 생각하시면 됩니다.

이제 미리 테스트를 위해 만들어 놓은 Post 등록 API를 사용해보면,


위와 같이 createdDate, updatedDate가 내부적으로 생성되어 저장 된 것을 확인하실 수 있습니다.

본 예제에서는 다루지 않았지만, 이외에도 Spring Security를 이용하고 계신다면, 처음에 언급한 최초생성자 / 최종수정자 또한 Auditing을 이용하여 관리할 수 있습니다.

감사합니다.

댓글

주간 인기글

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

[Angular] 모델, 값이 바뀌었는데 화면 template 이 업데이트 되지 않을 때 조치 팁

[AWS] Lambda + API GateWay를 이용해 간단한 RESTful API 만들기 #1

[AWS] Lambda + API GateWay를 이용해 간단한 RESTful API 만들기 #2

안드로이드에서 당겨서 새로고침(SwipeRefreshLayout) 쉽게 구현하기