[spring.io]RESTful 웹 서비스 만들기(코틀린 ver.)

참고 사이트 : Getting Started | Building a RESTful Web Service

RESTful 웹 서비스 만들기

이번 가이드에서는 스프링과 코틀린 언어로 “Hello, World”를 출력하는 RESTful 웹 서비스를 만들어볼 예정입니다.

http://localhost:8080/greeting GET 요청에 위와 같은 JSON 인사를 응답하는 웹 서비스를 만듭니다.

{"id":1,"content":"Hello, World!”}

추가로, http://localhost:8080/greeting?name=User 와 같이 문자열 쿼리에 name 파라미터를 전달 받으면 전달 받은 이름을 응답합니다.
(name 파라미터 값이 없을 경우 기본 값은 World입니다.)

{"id":1,"content":"Hello, User!”}

Spring Initializr 로 시작하기

메이븐 기준으로 다음 의존성을 추가한 프로젝트를 생성합니다.

  • Spring Web
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-kotlin</artifactId>
    </dependency>
    <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-reflect</artifactId>
    </dependency>
    <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-stdlib-jdk8</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

리소스 클래스 생성

서비스는 /greeting 에 대한 GET 요청과 문자열 쿼리의 name 파라미터를 처리합니다. 서비스는 200 OK 코드와 함께 다음과 같은 JSON 을 본문에 넣어 응답합니다.

{
    "id": 1,
    "content": "Hello, World!"
}
  • Greeting 클래스 생성
    class Greeting(
          val id : String,
          val content : String`
    ) 

리소스 컨트롤러 생성

HTTP 요청 처리를 위해 @RestController 어노테이션을 추가합니다.

@RestController
class GreetingController {
    val counter = AtomicLong()

    @GetMapping(“/greeting”)
    fun greeting(@RequestParam(value=“name”, defaultValue = “World”)  name :String ) =
            Greeting(counter.incrementAndGet(), “Hello, $name”)
}

@GetMapping 어노테이션은 /greeting의 HTTP GET 요청을 greeting() 메소드에 매핑합니다.

@RequestParam 어노테이션은 문자열 쿼리 name 의 값을 greeting() 메소드의 name 파라미터에 주입합니다. 문자열 쿼리에 name 값이 없을 경우에는 defaultValue를 주입합니다.

테스트 결과

 curl localhost:8080/greeting                               
{"id":4,"content":"Hello, World"}                                               
curl localhost:8080/greeting?name=User                      
{"id":5,"content":"Hello, User”}

다른 카테고리의 글 목록

Spring 카테고리의 포스트를 톺아봅니다