스프링부트 공부기록(6) - JPA Auditing으로 생성 시간/수정시간 자동화하기
my code archive
article thumbnail
반응형

보통 웹 개발을 할 때 해당 데이터의 생성 시간, 수정 시간을 포함한다.

이번 쇼핑몰 프로젝트를 진행할 때에도 상품 등록 날짜, 수정 날짜가 포함되어 있었다.

이처럼 언제 만들어졌고 언제 수정되었는지 등은 차후 유지 보수에 있어 굉장히 중요한 정보이기 때문이고 매번 DB에 삽입하기 전, 갱신하기 전에 날짜 데이터를 등록/수정하는 코드가 여기저기 들어가게 된다.

 

Java8이 나오기 전에는 Data, Calendar 클래스를 사용했지만 몇 가지 문제점이 있었고,

이제는 Java8 이후부터 LocalDate, LocalDateTime을 사용할 수 있다.


🤍1. BaseTimeEntity 클래스 생성

 

  • 모든 Entity의 상위 클래스가 되어 Entity들의 createdDate(생성 날짜), modifiedDate(수정 날짜)를 자동 관리하는 역할.
  • @MappedSuperclass : 해당 클래스를 상속할 경우 필드들도 칼럼으로 인식하도록 함.
  • @EntityListeners(AuditingEntityListener.class) : 클래스에 Auditing 기능을 포함시킴.
  • @CreateDate : Entity가 생성되어 저장될 때 시간이 자동 저장됨. 
  • @LastModifiedDate : 조회한 Entity의 값을 변경할 때 시간이 자동 저장됨.

 

🤍2. Posts 클래스가 BaseTimeEntity 클래스 상속받도록 변경

 

🤍3. JPA Auditing 어노테이션 모두 활성화할 수 있도록 Application 클래스에 어노테이션 추가

@EnableJpaAuditing //JPA Auditing 활성화

 

🤍4. 테스트 코드 작성

   @Test
    public void BaseTimeEntity_등록(){
        //given
        LocalDateTime now = LocalDateTime.of(2022,2,27,0,0,0);
        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);
    }

 

실제 시간이 잘 저장된 것을 확인할 수 있다.

 

 

앞으로 추가될 엔티티들은 등록일/수정일을 고민할 필요없이 BaseTimeEntity만 상속받으면 자동 해결 가능하다.

반응형
profile

my code archive

@얼레벌레 개발자👩‍💻

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

반응형