[Spring boot] 다양한 어노테이션을 활용한 HTTP API 구현

지난 포스트에서 IntelliJ IDEA를 이용하여 Spring boot 프로젝트를 만드는 시간에 대해 알아봤습니다. 확실히 기존의 Spring에 비하여 프로젝트 생성 절차가 간단하고, 개발 환경 설정도 까다롭지 않은 모습이었습니다.

이번 포스트에서는 그에 이어서 간단한 HTTP API를 구현하는 시간을 가져보도록 하겠습니다.

 

Hello World

가장 먼저 애플리케이션이 제대로 실행되는지 테스트하는 방법은 어떤 문구를 출력해보는 방법이 가장 좋겠죠? REST API에서 파라미터도 받지 않고, 가장 간단한 메소드로 사용할 수 있는 GET 메소드를 이용해 Hello World를 출력해보도록 하겠습니다.

package xyz.neonkid.blogexample

import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController

/**
 * Created by Neon K.I.D on 4/21/20
 * Blog : https://blog.neonkid.xyz
 * Github : https://github.com/NEONKID
 */
@RestController
class MainController {
    @GetMapping
    fun HelloWorld() = "Hello World"
}

MainController라는 이름의 클래스를 생성합니다. 그리고,  위와 같이 코드를 작성한 뒤, Shift + F10 단축키를 눌러, 애플리케이션을 실행해보도록 하겠습니다.

애플리케이션을 실행하게 되면, 아래와 같이 실행 중인 화면이 나타납니다. 로그를 조금 살펴보면, Tomcat이 초기화 되어, 8080 포트 주소로 Tomcat 서비스가 실행되었음을 알 수 있습니다.

여기서 사용하는 Tomcat이 바로 Embedded Tomcat인데, 비록 프로덕션 환경에서 WAS용으로 사용하기에는 한계점이 있지만 개발할 때, 간단한 테스트용으로는 적합하다고 할 수 있죠.

 

Test

REST API를 구현한 뒤, 테스트를 하기 위해서는 다양한 테스트 도구들이 있습니다. 나중에는 테스트 프레임워크라는 것을 다루게 되겠지만, 지금은 간단하게 콘솔 환경에서 개발자들이 직접 눈으로 보고 하는 테스트에 대해 알아보고자 합니다.

저는 대표적으로 두 가지 도구를 사용합니다.

  • Curl
  • Postman

curl은 간단하게는 테스트, 심도있게는 CLI 환경에서 내 웹 애플리케이션이 테스트하고자 하기 위해 적절히 사용되는 명령어 입니다. 실제로 리눅스 서버 환경은 GUI가 제공되지 않고, CLI로 되어 있는 경우가 잦기 떄문에 오히려 이 도구에 익숙해져 있습니다.

반대로 Postman은 GUI 애플리케이션입니다. 명령어 구조를 잘 몰라도 사용할 수 있고, 계정이랑 동기화를 제공하여, 간단한 가입을 통해서 여러분들이 테스트한 API를 그룹 형태로 저장할 수 있고, 나중에 그 API의 주소를 입력하지 않아도 클릭 한 번으로 쉽게 테스트할 수 있습니다.

이 포스트에서는 Postman을 이용하여 테스트를 진행해보도록 하겠습니다.

Postman을 실행하면, 제목 없는 새로운 테스트 환경이 만들어집니다. 여기에서 URL과 파라미터 값 등을 입력하고 Send 버튼을 클릭하면 해당 URL로 Postman이 접속을 시도하게 됩니다.

그러면 우리가 만든 Hello World를 한 번 테스트해보도록 하겠습니다. 우리는 GetMapping으로 메인 엔드 포인트에 Hello World를 찍었기 때문에 http://localhost:8080 주소만 바로 입력해주면 됩니다.

그럼 이렇게 정상적으로 Hello World 문구가 출력되는 것을 알 수 있습니다.

 

Code Analysis

package xyz.neonkid.blogexample

import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController

/**
 * Created by Neon K.I.D on 4/21/20
 * Blog : https://blog.neonkid.xyz
 * Github : https://github.com/NEONKID
 */
@RestController
class MainController {
    @GetMapping
    fun HelloWorld() = "Hello World"
}

잠깐 여기서 코드를 살펴보는 시간을 가져보도록 하겠습니다. 

  • RestController: 기존의 @Controller, @ResponseBody를 합쳐놓은 역할을 수행하는 어노테이션입니다. 
  • GetMapping: GET 방식으로 경로를 받는 매핑 어노테이션으로, value 값을 별도로 지정하지 않으면 빈 값을 반환합니다.

특히 여기서 RestController는 아마 자주 사용하게 될 어노테이션이 될 것입니다. ResponseBody를 합쳐놓은 역할을 수행하기 때문에 기존의 Controller를 사용했을 때처럼 수동으로 ResponseBody를 정하지 않고, 반환 값이 자동으로 바인딩되기 때문에 훨씬 편합니다.

이 외에도 자주 사용되는 다양한 어노테이션들이 존재합니다.

  • PostMapping: POST 방식으로 경로를 받는 매핑 어노테이션으로, param, produce, consume 다양한 옵션을 제공합니다
  • PutMapping: PUT 방식으로 경로를 받는 매핑 어노테이션입니다.
  • RequestMapping: 위의 Mapping 방식을 다양하게 이용할 수 있는 어노테이션의 오리지날 형태입니다.
  • PathVariable: URI에 있는 파라미터를 명시할 때 사용하는 어노테이션입니다.
  • RequestBody: 파라미터를 Body 형태로 명시할 때 사용하는 어노테이션입니다.

 

comments powered by Disqus

Tistory Comments 0