Spring

Spring Boot - Spring Data REST

728x90

참조한 강의 : www.udemy.com/course/spring-hibernate-tutorial/

 

 

앞선 포스팅인 Spring Boot - DAO (sdy-study.tistory.com/255) 에서 

JpaRepository 라는 것을 알아봤고, 이를 통해서 기존에 DAO 구현을 위해서 작성하던 boilerplate code 를 어떻게 간소화했는지 알아봤다

 

이번에는, REST API 의 코드를 간소화 하는 방법에 대해 알아본다

 

 

- Spring Data REST

: 여기서도 취지는 전에 다뤘던 포스팅(sdy-study.tistory.com/255) 내용과 같다 

프로젝트 내에 엔티티 클래스가 갯수가 많아지면, 각 엔티티 클래스에 대해서 각각 REST API 를 써줘야했다

Student Entity 가 있으면 Student Entity 를 위한 REST API 코드 쓰고

Professor Entity 가 있으면 Professor Entity 를 위한 REST API 코드 쓰고 ... 

이것처럼,

계속 비슷한 작업을 반복해야 했다

 

그래서 REST API 의 코드를 간소화 하려고 나온게 Spring Data REST 이며,

 

사용법은 매우 간단하다

 

첫번째로 pom.xml 에 다음의 의존성 모듈이 있어야한다

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
cs

 

두번째로 다루려는 엔티티 클래스에 대해서 JpaRepository 가 있어야한다

public interface EmployeeRepository extends JpaRepository<Employee, Integer> {
}
cs

 

세번째로, 엔티티 클래스가 있어야한다

@Entity
@Table(name = "employee")
public class Employee {
 
}
cs

 

이게 끝이다

 

다른 코드를 전혀 작성할 필요가 없고 이 세가지 조건만 만족하면

Spring Data REST 가 알아서 해당 엔티티 클래스에 관한 REST API 를 만든다

 

 

 

- URL 설정

: 그렇다면 위와 같이 설정했을때, 각 엔티티 클래스에 대해서 endpoint 가 어떻게 될까

정답은 엔티티 클래스 이름에 s 를 붙인 형태로 들어간다

위에선 엔티티 클래스 이름이 Employee 이므로 endpoint 값은 /employees 가 된다

 

그러나 영어에서 복수형 명사를 표현할때, 단순히 s 만 붙여서는 모든 명사를 복수형 명사로 바꿀 수는 없다

예를들어 fairy 는 복수형이 fairies 이고, goose 는 geese 가 복수형이다

 

또한 기본 값이 그냥 마음에 들지 않아서 다른 거로 바꾸고 싶을 수도 있다 

그럴때는 JpaRepository 에 

@RepositoryRestResource(path = "바꿀 이름") 으로 넣으면 된다

 

@RepositoryRestResource(path = "members")
public interface EmployeeRepository extends JpaRepository<Employee, Integer> {
}
cs

(employees 대신 members 로 바꿈)

 

그리고 이거 말고 base-url 을 설정하고 싶을 수도 있다

지금 위의 주소는 localhost:8080/members 이다 

그러나 이런게 아니라 다른 REST API 들도 어떤 url 의 하위소속으로 두고 싶다면

base-url 이 필요하다 

 

예를들면, localhost:8080/api/members 이런식으로..

 

이렇게 base-url 을 넣으려면 application.properties 에 다음의 값을 넣으면 된다

# spring data rest
spring.data.rest.base-path=/api
cs

 

 

 

- Pagination 관리

: Pagination 이란 화면상에 보여줄 데이터들에 대한 페이지를 지정하는 작업이다

예를들면 한 페이지에 나올 최대 컨텐츠 수를 N 개로 지정하고 싶을때 같은 경우에 사용된다

 

이것도 역시나 마찬가지로 application.properties 파일에 작성하면 되고 

아래의 예제는 한 페이지 상에 보여줄 수 있는 최대 컨텐츠 갯수를 10개로 지정해놓은 값이다

# spring data rest
spring.data.rest.default-page-size=10
cs

 

* 참고로 properties 파일에 들어갈 자세한 설정 값은 아래 링크 참조

docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#common-application-properties

 

Common Application properties

Various properties can be specified inside your application.properties file, inside your application.yml file, or as command line switches. This appendix provides a list of common Spring Boot properties and references to the underlying classes that consume

docs.spring.io

 

 

- Sorting

: Spring Data REST 를 통해서 결과값을 받아올때, 어떤 정렬 기준을 넣은 상태에서 결과값을 받아오고 싶으면

url 에 옵션 값으로 sort=~ 를 넣으면 된다

 

http://localhost:8080/api/employees?sort=firstName

 

http://localhost:8080/api/employees?sort=lastName, desc

 

등..

 

 

- HATEOAS

: HATEOAS 는 Hypermedia as the engine of application state 의 약자로, 

그냥 아주 단순하게 말하면, REST API 를 통해서 어떤 결과를 얻어올때 이에 대한 메타데이터를 의미한다고 보면된다

Spring Data REST 는 이 HATEOAS 란 것을 사용하는데

postman 과 같은 HTTP Client 앱을 통해서 서버에게 GET 메소드를 보내서 데이터를 얻어와 보면 

이전 포스팅에서 작성했었던, REST 의 결과 값과는 약간 다른 결과 값을 보여줌을 알 수 있다

 

Spring Data REST 를 통해 GET 메소드를 요청하여 얻은 결과물

원래는 그냥 DB 에 있는 내용만 보여줬었는데, 다른 것들이 많이 추가가 되었다.

각 row 가 연결된 link 정보, page 수 등 여러 메타데이터가 추가된것을 볼 수 있다.

 

이에 대한 더 자세한 설명은 아래 링크들 참조

1.  spring.io/understanding/HATEOAS

2.  wallees.wordpress.com/2018/04/19/rest-api-hateoas/

 

 

 

728x90

'Spring' 카테고리의 다른 글

MapStruct 란?  (0) 2021.04.15
Lombok 이란?  (0) 2021.03.29
Spring Boot - DAO  (0) 2021.03.24
Spring Boot - Overview  (0) 2021.03.22
Intellij 에 Spring Framework 설정하기  (0) 2021.03.14