[스프링부트]3.3 조회 기능 사용해보기 & JPA Auditing

Bummy·2022년 8월 17일
0

springboot

목록 보기
6/15

지난번 시간까지 만들었던 API 중 조회 기능을 실제로 사용해볼 것이다.
책을 통해 h2-console을 이용해서 확인하는 방법을 배웠다.

h2는 메모리에서 실행하기 때문에 직접 접근하려면 웹 콘솔을 사용해야한다.웹 콘솔을 사용하기 위해 다음 코드를 추가해준다.

application.properties

spring.h2.console.enabled = true

그리고 Application.java의 main 메소드를 실행시켜준다.
http://localhost:8080/h2-console 로 접속하면 되는데
책과 달리 나는 404 Not Found 오류가 계속 나왔다.

이유는 application.properties가 test/resource 디렉토리에 위치해 있어서 제대로 작동하지 않은 것이다. 파일 디렉토리 관리에도 많은 신경을 써야할 것 같다.

파일을 옮겨주고 url로 접속해보니 이렇게 잘 나오는 것을 확인할 수 있었다.

JDBC URL쪽에 jdbc:h2:mem:testdb를 적어주고 Connect을 눌러준다.
그러면 이렇게 Posts 테이블이 나오는 것을 확인할 수 있다.

간단한 쿼리를 작성해주면서 정상적으로 작동하는지 확인해준다.

INSERT INTO Posts (author, content, title) VALUES ('author', 'content', 'title'); 

테스트를 위한 데이터를 삽입해주고
http://localhost:8080/api/v1/posts/1 로 확인해주면

이렇게 JSON 형태로 나오는 것을 확인할 수 있었다.


JPA Auditing

데이터를 삽입하거나 변경될 때마다 삽입/변경 시간을 넣어주는 게 유지보수에 있어 유리하지만 개발자가 매번 직접 넣기에는 어렵다.
날짜 데이터를 등록/수정하는 기능을 자동화 해볼 것이다.

domain 패키지에 BaseTimeEntity 클래스를 만들어주고 코드는 다음과 같이 작성해준다.


BaseTimeEntity

@Getter
@MappedSuperclass //JPA 클래스들이 BaseTimeEntity을 상속할 경우 필드들도 컬럼으로 인식하도록 한다.
@EntityListeners(AuditingEntityListener.class) //BaseTimeEntity 클래스에 Auditing 기능을 포함시킨다.
public class BaseTimeEntity {

    @CreatedDate
    private LocalDateTime createDate; //Entity가 생성되어 저장될 때 시간이 자동 저장된다.

    @LastModifiedDate
    private LocalDateTime modifiedDate; //조회한 Entity의 값을 변경할 때 시간이 자동 저장된다.
}
  • @MappedSuperclass : JPA 클래스들이 BaseTimeEntity를 상속할 경우 필드들도 컬럼으로 인식하도록 한다.
  • @EntityListeners(AuditingEntityListener.class) : BaseTimeEntity 클래스에 Auditing 기능을 포함시킨다.
  • createDate : Entity가 생성될 때 시간이 자동으로 저장된다.
  • modifiedDate : Entity가 수정될 때 시간이 자동을 저장된다.

그리고 posts 클래스가 BaseTimeEntity를 상속받도록 해준다.
Posts


JPA Auditing 기능을 사용하기 위해 Application 클래스에 활성화 어노테이션을 추가해준다.

Application

@EnableJpaAuditing //JPA Auditing 활성화
@SpringBootApplication
public class Application { //앞으로 만들 클래스의 메인 클래스
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  • @EnableJpaAuditing : JPA Auditing 활성화 어노테이션

마지막으로 테스트를 위해 PostsRepositoryTest 클래스에 테스트 메소드를 추가해준다.

PostsRepositoryTest

 @Test
    public void BaseTimeEntity_등록(){
        //given
        LocalDateTime now = LocalDateTime.of(2019, 6, 4, 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.getCreateDate() + ", modifiedDate=" + posts.getModifiedDate());

        assertThat(posts.getCreateDate()).isAfter(now);
        assertThat(posts.getModifiedDate()).isAfter(now);
    }

테스트를 실행시키면

이렇게 실제 시간이 저장되는 것을 확인할 수 있다.

0개의 댓글