[springboot-webserivce] JPA Auditing을 통한 생성/수정 시간 자동화
Updated:
[2020.12.28] 부터 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 책을 통해 스프링 공부를 시작했다.
공부한 내용을 글로 정리하려고 한다.
그래야 나중에 다시 찾아보며 공부 할 수 있을테니까 !!
⏰ JPA Auditing
보통의 Entity 는 언제 생성됐는지, 언제 수정됐는지 시간을 저장한다.
추후에 유지 보수에 있어 아주 중요한 정보이기 때문이다.
그렇다보니 데이터베이스에 저장을 하거나 갱신을 할 때 마다 시간을 저장하는 코드가 필요하다.
만약 데이터베이스에 테이블이 엄청 많다면 중복 코드가 많아질 것이다.
이때 JPA Auditing 을 사용하면 자동으로 시간을 관리해 준다.
💡 BaseTimeEntity
java/com/boks/springboot/domain/BaseTimeEntity 를 만들어주자.
이 클래스는 앞으로 모든 Entity 의 상위 클래스가 되어 시간을 자동으로 관리해 줄 것이다.
package com.boks.springboot.domain;
...
@Getter
@MappedSuperclass // JPA Entity들이 이 클래스를 상속받는 경우 필드값도 칼럼으로 인식
@EntityListeners(AuditingEntityListener.class) // 시간에 대한 값을 자동으로 넣어주는 Auditing 기능 추가
public class BaseTimeEntity {
@CreatedDate // Entity가 생성되어 저장될 때 시간이 자동 저장 됨
private LocalDateTime createdDate;
@LastModifiedDate // Entity가 조회되어 수정될 때 시간이 자동 저장 됨
private LocalDateTime modifiedDate;
}
@MappedSuperclass
Entity 들이 BaseTimeEntity 클래스를 상속받는 경우 이 클래스의 칼럼들도 본인의 칼럼으로 인식한다.
전부 공통으로 가져야 할 칼럼이 있는 경우 사용하면 좋을 것 같다.
@CreatedDate, @LastModifiedDate
@EntityListener 를 통해 JPA Auditing 기능을 활성화 시킨 뒤 두 가지 어노테이션을 넣어주면 된다.
첫 번째는 생성 시간, 두 번째는 수정 시간이 저장된다.
🔧 JPA Auditing 테스트
기능을 추가했으니 테스트를 해 볼 시간이다.
우선 Posts Entity 에 BaseTimeEntity 를 상속하자.
그렇게 되면 Posts Entity 도 createdDate, modifiedDate 칼럼을 가지게 된다.
그리고 테스트를 위해 java/com/boks/springboot/domain/posts/PostsRepositoryTest 에 코드를 추가 한다.
package com.boks.springboot.domain.posts;
...
@RunWith(SpringRunner.class)
@SpringBootTest
public class PostsRepositoryTest {
...
@Test
public void BaseTimeEntityTest() {
// given
LocalDateTime now = LocalDateTime.now();
postsRepository.save(Posts.builder()
.title("title")
.content("content")
.author("author")
.build());
// when
List<Posts> postsList = postsRepository.findAll();
// then
Posts posts = postsList.get(0);
System.out.println(">>>>>>>>>> CreateDate = " + posts.getCreatedDate()
+ " ModifiedDate = " + posts.getModifiedDate());
assertThat(posts.getCreatedDate()).isAfter(now);
assertThat(posts.getModifiedDate()).isAfter(now);
}
}
로그를 보면 생성 시간과 수정 시간이 잘 저장되어 있는 것을 알 수있다.
테스트 통과 !
📕 정리
처음 스프링을 가지고 코딩을 할 때는 예제 코드를 전부 이해하고 넘어가야 한다고 생각했다.
하지만 일단 무작정 따라 하며 진도를 나가다 보니 이전에 이해가 가지 않았던 코드도 이해가 가는 경우가 있었다.
그렇다고 그냥 따라 쓰기만 하는 손 운동은 하면 안 되니 어느 정도 이해를 하면서 쭉쭉 진도를 나가봐야겠다.
Leave a comment