(2) Spring Official Guide - Building a RESTful Web Service

HEYDAY7·2022년 10월 26일
0

Learn Kotlin + Spring

목록 보기
3/25

시작하며

Spring 공식 문서에서 제공하는 guide 들이 굉장히 쓸모있고 유용하고나, 쉽더라도 매우 중요한 내용을 간단하게 알려주고 있어 이 guide들을 하나씩 빠르게 훑어보려 한다. 다만 이 guide들은 대부분 java를 기반으로 하고 있기 때문에 직접 kotlin으로 바꿔서 적어보는 과정이 필요할 것 같고, 그 과정에서도 당연히 공부가 될 거라 생각한다.

Building a RESTful Web Service

Guide 주소

간단한 한줄 요약

간단한 HTTP GET request를 처리할 수 있는 서비스를 만들고, json 형태로 값을 return 해주며 parameter를 받을 수 있게 만들어본다.

프로젝트 시작

Spring Initializer로 간단하게 시작한다. 다만 kotlin으로 바꿔서 할 것이기에 차이는 살짝 있다. 이 과정에서 약간 시행착오를 겪었기에 JPA 관련 Dependency를 추가하는 것은 추천한다. 그렇지 않으면 나처럼 후에 gradle 파일에 하나하나 찾아가며 넣는 불상사가 일어나게 된다.. ㅎ

Dependecies

  • Spring Web
  • Spring Data JPA
  • H2 Database
    가이드에 나와있는 Spring Web에 더해 Entity annotation과 DB 활용을 위해 JPA와 H2를 추가한다.(사실 H2의 필요성을 아직 확실히는 모르겠다... 알게되면 내용을 추가하겠다.)

Entity

@Entity
class Greeting(
    val content: String,
    @Id @GeneratedValue
    val id: Long
)

Create a Resource Controller

## HttpControllers.kt
@RestController
@RequestMapping("/api")
class GreetingController {

    @GetMapping("/greeting")
    fun greeting(@RequestParam(value = "name", defaultValue = "World") name: String) =
        Greeting(String.format("Hello, %s!", name), 1)
}
  1. RestController annotation(@Controller + @ResponseBody)을 통해서 Controller임을 명시한다.
  2. RequestMapping을 통해 기본 url을 설정한다.
  3. greeting 함수를 만들며 GetMapping annotation을 통해서 "/api/greeting" HTTP Get request가 해당 함수와 mapping 되게 한다.
  4. RequestParam annotation을 통해 "name"이라는 parameter를 받을 수 있게 한다.(default 값도 설정한다.)
  5. parameter로 받은 name을 이용해 Greeting object를 만들어 return 한다.

여기서 기존 MVC controller와 RESTful web service controller의 차이가 return 해주는 데이터 object에 있다고 한다. 기존의 경우와 달리 RESTful web의 경우 Greeting Entity object 자체를 json 형태로 돌려주기 때문이라고 한다.
또 (5)에서 object를 자체로 return 시켜도 Jackson이라는 라이브러리가 spring의 구조에 들어있어 "MappingJackson2HttpMessageConverter" 이라는 class 가 이를 알아서 변환시켜 준다.

Run and Test

main() 함수를 실행시키고 "http://localhost:8080/greeting"를 방문해보면 아래와 같이 원하는 데로 결과가 나오는 것을 확인해 볼 수 있다.

마무리

간단한 내용이기도 했고, 이전 tutorial에서 한번은 해봤던 것이라 복습의 의미로 진행해보았다. 오히려 앞으로 java로 된 guide 코드를 kotlin으로 작성하는데 노력을 좀 더 쓰지 않을까 하는 생각이 들었다.
작성한 코드는 다음과 같다.

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

0개의 댓글