참조한 강의 : 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 파일에 들어갈 자세한 설정 값은 아래 링크 참조
- 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 의 결과 값과는 약간 다른 결과 값을 보여줌을 알 수 있다
원래는 그냥 DB 에 있는 내용만 보여줬었는데, 다른 것들이 많이 추가가 되었다.
각 row 가 연결된 link 정보, page 수 등 여러 메타데이터가 추가된것을 볼 수 있다.
이에 대한 더 자세한 설명은 아래 링크들 참조
1. spring.io/understanding/HATEOAS
2. wallees.wordpress.com/2018/04/19/rest-api-hateoas/
'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 |