본격적으로 API를 만들기 전에 PostsRepository에 id를 기준으로 정렬하는 쿼리 함수 하나를 작성하도록 하겠습니다.
JPA에서는 함수명을 지을 때 키워드가 있으면 그 키워드에 맞게 자동으로 SQL을 짜줍니다. 예를 들면 함수명이 findByIdOrderByDateAsc(Long id)면 JPA에서 다음과 같은 쿼리를 만들어줍니다. JPA 키워드하지만 이런 키워드를 사용해서 함수명을 짓다보면 가독성이 떨어집니다. 그래서 저는 @Query라는 어노테이션을 사용해서 직접 쿼리문을 작성해서 사용합니다. @Query실행할 메소드 위에 정적 쿼리를 작성함. (JPQL 쿼리가 들어감) JPQL은 SQL과 다릅니다.
이제 API를 작성하도록 하겠습니다. 총 코드는 다음과 같습니다.
@Transaction
이제는 컨트롤러와 서비스에서 사용할 DTO 클래스를 생성하겠습니다.
코드를 보면 엔티티 클래스와 유사한 형태임을 알 수 있는데 이렇게 따로 DTO 클래스를 만드는 이유는 엔티티 클래스를 Request/Response 클래스로 사용해서는 안되기 때문입니다. 엔티티 클래스는 데이터베이스와 맞닿아 있는 핵심적인 클래스입니다. 엔티티 클래스를 기준으로 테이블이 생성되고, 스키마가 변경됩니다. 테이블과 연결된 엔티티 클래스를 변경하게 되면 여러 클래스에 영향을 끼치게 됩니다. 이제 이 API 서비스를 가져오는 컨트롤러 클래스를 생성하겠습니다.
한 번 테스트해보기 위해 insert 쿼리 하나를 작성하겠습니다.
이제 애플리케이션을 실행해보도록 하겠습니다. 그리고 브라우저에 http://localhost:8080/api/v1/posts/1을 입력해 API 조회 기능을 테스트해보도록 하겠습니다. 위와 같이 뜨면 성공 다음에는 화면을 구성해보도록 하겠습니다. 메인 화면, 게시물 등록 화면, 수정 화면을 만들 예정입니다. |