본문 바로가기
컴공/스프링 부트 (Spring boot)

스프링부트(Spring Boot) 에서 JPA의 Auditing 기능을 이용한 투표 작성 시간, 작성자 자동 기입하기

by 만슨 2023. 12. 5.

안녕하세요, 스프링부트에서 투표 작성 시간을 자동으로 기입하는 방법에 대해서 알아보겠습니다.

 

 

1. 생성 시간과 수정 시간을 기록하는 기본 클래스 작성하기

 

JPA의 Auditing 기능

 

Auditing이란?

데이터의 생성, 수정 시간 등을 자동으로 관리해주는 기능이다. 이를 통해 데이터의 변경 이력을 손쉽게 관리할 수 있게 도와준다. 

 

 

JPA Audit 기능을 사용하려면, 스프링 부트 애플리케이션에서

@EnableJpaAuditing 어노테이션을 추가하여 JPA Auditing을 활성화해주어야 한다

 

 

JPA의 Auditing 기능을 사용하여 생성 시간과 수정 시간을 자동으로 기록하기 위해

먼저 아래와 같이 'DateAudit'라는 이름의 추상 클래스를 만들어 주었다

 

이 클래스는 'createdAt'와 'updatedAt' 필드를 가지며, 각각 생성 시간과 수정 시간을 나타낸다.

 

위 코드에 어노테이션들을 한 번 알아보자

@MappedSuperclass
JPA Entity 클래스들이 DateAudit를 상속할 경우 DateAudit의 필드들도 컬럼으로 인식하게 해준다. 따라서 Poll엔티티에서 DateAudit 클래스를 상속받아 두 필드들을 가지게 된다

 

@EntityListeners(AuditingEntityListener.class)
JPA에게 해당 Entity는 Auditing 기능을 포함시킨다

 

@CreatedDate
Entity가 처음 저장될 때의 시간을 자동으로 넣어줌
@LastModifiedDate
Entity가 수정될 때의 시간을 자동으로 넣어줌

 

@JsonIgnoreProperties
JSON 형태로 데이터를 주고 받을 때 createdAt, updatedAt 필드를 무시.

-> 위 어노테이션으로 인해 프론트에서 데이터를 post 할 때 기입하지 않아도 된다

 

 

위와같은 형태로 UserDateAudit 클래스도 만들어 주자 

 

 

 

 

Poll 엔티티에 UserDateAudit 추상 클래스를 상속 받게 해주자.

 

Poll 엔티티 객체를 데이터베이스에 저장하거나 수정할 때마다 createdAt, updatedAt ,createdBy, updateBy 필드가 자동으로 갱신된다!

이를 통해 각 투표가 언제 생성되었고, 마지막으로 언제 수정되었는지를 손쉽게 관리할 수 있다

 

2. 투표 작성 시간을 클라이언트에게 전달

 

엔티티 객체를 직접 클라이언트에게 반환하지 않고 DTO(Data Transfer Object)를 사용하여 투표 작성 시간을 전달 해주자

 

 

 

위와 같이 필요한 정보를 Dto에 담아 전달 해주면 된다.