[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 어노테이션을 추가합니다.
Config를 생성한 뒤, 이제 Audity로 제공할 데이터들을 정의하는 클래스를 생성합니다.
이제 위에서 생성한 Audity 추상클래스를 Entity에서 상속받아 사용하기만 하면 됩니다.
예제로 사용할 Post Entity이며, Audity를 상속받았습니다. 그러므로, 위에서 정의한 id, title 등 4개의 컬럼 이외에 우리가 Audity에서 정의한 createdDate / updatedDate가 미리 정의되어 있다고 생각하시면 됩니다.
이제 미리 테스트를 위해 만들어 놓은 Post 등록 API를 사용해보면,
위와 같이 createdDate, updatedDate가 내부적으로 생성되어 저장 된 것을 확인하실 수 있습니다.
본 예제에서는 다루지 않았지만, 이외에도 Spring Security를 이용하고 계신다면, 처음에 언급한 최초생성자 / 최종수정자 또한 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을 이용하여 관리할 수 있습니다.
감사합니다.
댓글
댓글 쓰기