더보기
<스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 이동욱> 책을 활용해
공부한 내용을 정리할 예정입니다.
1. JPA Auditing이란?
보통 엔티티에는 데이터의 생성, 수정 시간을 포함하게 되는데
매번 DB에 삽입하기 전, 갱신하기 전에 날짜 데이터를 등록, 수정하는 코드가 여러번 들어가게 됩니다.
반복적인 코드를 줄이기 위해 JPA Auditing을 활용한다.
spring-data-jpa에서 제공하는 기능으로 생성시간, 수정시간을 자동으로 넣어주는 기능을 제공합니다.
2. 적용
1) BaseTimeEntity 생성
domain 패키지에 BaseTimeEntity 클래스를 생성합니다.
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime modifiedDate;
}
모든 엔티티의 상위 클래스가 되어 엔티티들의 createdDate, modifiedDate를 자동으로 관리하는 역할을 합니다.
- @MappedSuperclass : JPA Entity클래스들이 BaseTimeEntity을 상속할 경우 필드들도 칼럼으로 인식하도록 합니다.
- @EntityListteners(AuditingEntityListener.class) : BaseTimeEntity 클래스에 Auditing 기능을 포함시킵니다.
- @CreatedDate : Entity가 생성되어 저장될 때 시간이 자동 저장됩니다.
- @LastModifiedDate : 조회한 Entity의 값을 변경할 때 시간이 자동 저장됩니다.
생성한 BaseTimeEntity를 상속받도록 Posts클래스를 변경합니다.
public class Posts extends BaseTimeEntity {
...
}
Application클래스에 활성화 어노테이션을 추가합니다.
@EnableJpaAuditing // JPA Auditing 활성화
@SpringBootApplication
public class Application {
public static void main(String args[]){
SpringApplication.run(Application.class, args);
}
}
3. 테스트 코드 작성
PostsRepositoryTest 클래스에 테스트 메소드를 추가합니다.
@Test
public void BaseTimeEntity_등록(){
//given
LocalDateTime now = LocalDateTime.of(2020,2,5,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));
}
테스트 코드를 수행해보면 잘 수행되는 것을 확인할 수 있습니다.
이렇게 jpa를 적용하고 api까지 구현하는 과정을 책을 따라 해보았는데
화면을 구성하는 부분에 대해서는 따로 복습하고 정리할 필요가 없을거 같아 넘어가려 합니다ㅇㅅㅇ
다음 포스팅부터
스프링 시큐리티와 OAuth2.0으로 로그인기능을 만들고 배포, CI, CD를 적용하는 것 까지 복습해보면
책을 두번 완독하는게 되네욤
'Web > SpringBoot' 카테고리의 다른 글
[SpringBoot] 스프링 웹 계층 (0) | 2020.03.09 |
---|---|
[SpringBoot] 4. 프로젝트에 Spring Data Jpa 적용시키기 (0) | 2020.02.14 |
[SpringBoot] JPA와 Spring Data JPA (0) | 2020.02.14 |
[SpringBoot] 3. 기존 코드에 롬복 적용시키기 (0) | 2020.02.12 |
[SpringBoot] 인텔리제이에 롬복 설치하기 (0) | 2020.02.12 |