https://spring.io/guides/gs/accessing-data-rest/
Spring Data Rest가 Spring HATEOAS와 Spring Data JPA의 기능을 수행하고 결합한다.
코드가 적어 다 적어둔다.
## Person.kt
@Entity
data class Person(
val firstName: String,
val lastName: String,
@Id @GeneratedValue
val id: Long? = null
)
## PersonRepository.kt
@RepositoryRestResource(collectionResourceRel = "people", path = "people")
interface PersonRepository: PagingAndSortingRepository<Person, Long> {
fun findByLastName(@Param("name") name: String): List<Person>
}
얼핏 보더라도 새로워보이는 코드는 @RepositoryRestResource과 PagingAndSortingRepository이다.
결국 여기까지만 작성하고 서버를 켜도, localhost:8080/~에 이어지는 여러 endpoint들이 만들어진다는 것이다. 실제로 돌려서 알아보자.
실제로 서버를 켜고 가이드에서 알려주는 여러 curl들을 쏴보며 테스트 해보자. 실제적으로 REST API method들이 잘 동작하는 것을 볼 수 있다.
사실 이번 가이드는 나에게 좀 혼란을 주었다. 진행해보면서 알게된 사실은 나는 아직 REST는 물론 Spring MVC에 대한 개념들이 확실히 잡혀있지 않기에 현재 내가 진행한 것이 어떤 의미를 갖는지 "정확히"는 알지 못하겠다는 것이다.(이해가 안된다는 소리는 아니다. 느낌은 있는데 확신을 못하겠는 느낌이다.) 내 생각에는 이런 느낌 자체는 이 가이드를 따라가며 생긴 의문점을 해결하는 과정에서 생길 수 있을 것 같다.
과연 Spring으로 서버를 구현했을 때, REST API를 Controller를 통해 제공하는게 맞을까, 아니면 이번 가이드 처럼 Spring Data REST를 이용해 Repository로 구현하는게 맞을까. 혹은 더 궁극적인 방식이 있을까? 하는 의문이다.
즉 무엇이 옳은 방식인지가 헷갈리며, 가이드를 보았을 때는 후자의 방식이 결국 MVC에게 endpoint를 만들라고 지시하는 것이 결국은 1번 처럼 동작하지만 작성의 편의성을 올려주는 수준인건지가 매우 궁금하다.
따라서 남은 중요해 보이는 가이드들을 다 해결하고 프로젝트를 진행해볼 시점이 되면 아래 순서대로 의문들을 풀어볼 예정이다.
결국 이번 가이드는 쉬워보이는 내용이 혼란을 주어 당황했지만, 내가 모르는 부분을 특정할 수 있게 해줘 매우 유용했다. 백엔드를 막 시작한 사람이라면 누구나 언젠가 한번은 마주해야 했던 의문들인거 같아 기분은 좋다.
코드는 여기를 확인하면 된다.(다만 이번 경우에는 추가적으로 적힌 코드가 없어 굳이 의미는 없다.)