참조한 강의 : 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 파일에 들어갈 자세한 설정 값은 아래 링크 참조
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 의 결과 값과는 약간 다른 결과 값을 보여줌을 알 수 있다
원래는 그냥 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 |