(13) Spring Official Guide - Accessing JPA Data with REST

HEYDAY7·2022년 10월 31일
0

Learn Kotlin + Spring

목록 보기
14/25

Accessing JPA Data with REST

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이다.

  • @RepositoryRestResource : 가이드를 보면 runtime에 Spring Data REST가 해당 interface의 구현부를 알아서 연결해줄 것이고, 그 이후에 이 annotation이 Spring MVC에게 "/people" path에 RESTful endpoints들을 만들라고 지시한다고 한다.
  • PagingAndSortingRepository : 페이징 처리를 도와주는 repository로 보인다.

결국 여기까지만 작성하고 서버를 켜도, localhost:8080/~에 이어지는 여러 endpoint들이 만들어진다는 것이다. 실제로 돌려서 알아보자.

Run and Test

실제로 서버를 켜고 가이드에서 알려주는 여러 curl들을 쏴보며 테스트 해보자. 실제적으로 REST API method들이 잘 동작하는 것을 볼 수 있다.

마무리

사실 이번 가이드는 나에게 좀 혼란을 주었다. 진행해보면서 알게된 사실은 나는 아직 REST는 물론 Spring MVC에 대한 개념들이 확실히 잡혀있지 않기에 현재 내가 진행한 것이 어떤 의미를 갖는지 "정확히"는 알지 못하겠다는 것이다.(이해가 안된다는 소리는 아니다. 느낌은 있는데 확신을 못하겠는 느낌이다.) 내 생각에는 이런 느낌 자체는 이 가이드를 따라가며 생긴 의문점을 해결하는 과정에서 생길 수 있을 것 같다.

과연 Spring으로 서버를 구현했을 때, REST API를 Controller를 통해 제공하는게 맞을까, 아니면 이번 가이드 처럼 Spring Data REST를 이용해 Repository로 구현하는게 맞을까. 혹은 더 궁극적인 방식이 있을까? 하는 의문이다.

즉 무엇이 옳은 방식인지가 헷갈리며, 가이드를 보았을 때는 후자의 방식이 결국 MVC에게 endpoint를 만들라고 지시하는 것이 결국은 1번 처럼 동작하지만 작성의 편의성을 올려주는 수준인건지가 매우 궁금하다.
따라서 남은 중요해 보이는 가이드들을 다 해결하고 프로젝트를 진행해볼 시점이 되면 아래 순서대로 의문들을 풀어볼 예정이다.

  1. 말로만 REST, REST 하지말고 완벽하게 REST와 RESTful을 이해해보기
  2. MVC pattern에 대한 이해와 Spring MVC, SSR과 같이 묶어서 공부해보기
  3. 궁극적으로 Spring Framework에서 RESTFul 한 API를 구현하는 올바른 방식 알아보기

결국 이번 가이드는 쉬워보이는 내용이 혼란을 주어 당황했지만, 내가 모르는 부분을 특정할 수 있게 해줘 매우 유용했다. 백엔드를 막 시작한 사람이라면 누구나 언젠가 한번은 마주해야 했던 의문들인거 같아 기분은 좋다.

코드는 여기를 확인하면 된다.(다만 이번 경우에는 추가적으로 적힌 코드가 없어 굳이 의미는 없다.)

profile
(전) Junior Android Developer (현) Backend 이직 준비생

0개의 댓글