Dev/Spring
JPA Auditing 사용법
마라탕천재
2024. 8. 22. 12:26
1. JPA Auditing이란?
JPA Auditing은 엔티티의 생성, 수정, 삭제 등의 이벤트를 자동으로 추적하고 기록하는 기능이다. 주로 데이터의 생성 시간, 수정 시간, 생성자, 수정자 등의 정보를 자동으로 관리하는 데 사용된다.
2. JPA Auditing의 특징
- 자동 시간 기록: 엔티티가 생성되거나 수정될 때 자동으로 시간을 기록한다.
- 사용자 정보 추적: 현재 로그인한 사용자 정보를 자동으로 엔티티에 기록할 수 있다.
- 편리한 구현: 어노테이션을 사용하여 쉽게 구현할 수 있다.
- 일관성 유지: 모든 엔티티에 대해 일관된 방식으로 감사 정보를 관리할 수 있다.
3. JPA Auditing 구현 방법
1. 구현할 칼럼 클래스 생성
@Getter
@MappedSuperclass
// JPA 어노테이션으로, 이 클래스를 상속받는 엔티티 클래스들에게 이 클래스의 필드를 칼럼으로 추가함.
// 이 클래스 자체는 테이블로 매핑되지 않는다.
@EntityListeners(AuditingEntityListener.class)
// JPA 엔티티에 이벤트 리스너를 추가 AuditingEntityListener는 생성일, 수정일 등을 자동으로 관리함.
public abstract class Timestamped {
@CreatedDate
// 엔티티가 생성되어 저장될 때 시간이 자동으로 저장됨.
@Column(updatable = false)
// 이 필드는 데이터베이스 칼럼으로 매핑되며, 한 번 저장된 후에는 갱신되지 않음.
@Temporal(TemporalType.TIMESTAMP)
// 날짜 타입을 매핑할 때 사용함. TIMESTAMP는 날짜와 시간을 모두 포함함.
private LocalDateTime createdAt;
@LastModifiedDate
// 엔티티가 수정될 때 시간이 자동으로 저장됨.
@Column
// 이 필드를 데이터베이스 칼럼으로 매핑함.
@Temporal(TemporalType.TIMESTAMP)
// 날짜 타입을 매핑할 때 사용함. TIMESTAMP는 날짜와 시간을 모두 포함함.
private LocalDateTime modifiedAt;
}
2. 엔터티(테이블)에 상속
@Entity
@Getter
@Setter
@Table(name = "memo")
@NoArgsConstructor
public class Memo extends Timestamped{ // 상속
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "username", nullable = false)
private String username;
@Column(name = "contents", nullable = false, length = 500)
private String contents;
public Memo(MemoRequestDto requestDto) {
this.username = requestDto.getUsername();
this.contents = requestDto.getContents();
}
public void update(MemoRequestDto requestDto) {
this.username = requestDto.getUsername();
this.contents = requestDto.getContents();
}
}
3. 메인 애플리케이션 클래스에 @EnableJpaAuditing 추가
@EnableJpaAuditing // 추가
@SpringBootApplication
public class MemoApplication {
public static void main(String[] args) {
SpringApplication.run(MemoApplication.class, args);
}
}