2020/03/03 - [IT/Back-end] - RESTful Web Service 구축하기! (feat. spring)-(1) (이전)
RESTful Web Service 구축하기! (feat. spring)-(1)
이번 가이드는 Spring을 사용하여 "Hello, World"를 출력하는 RESTful 웹 서비스 구축 안내서입니다! 앞으로 구축하게 될 것들 우리는 앞으로 HTTP의 GET 메소드 요청을 수행하는 서비스를 만들 것입니다! http://..
omaeng.tistory.com
자 이제 프로젝트 및 설정을 준비완료 했습니다. 이제 웹 서비스를 구축할 준비가 되었습니다.
각 서비스가 어떻게 상호작용하는지 유념하시며 보시길 바랍니다!
Resource Representation class 만들기
서비스는 /greeting 요청으로 GET 메소드를 통해 다뤄질 예정입니다.
선택적으로 name 매개변수를 통해 쿼리문을 날릴 수 있습니다.
과정을 잘 따라오시면 아래와 같은 JSON 결과를 보실 수 있습니다!
{
"id": 1,
"content": "Hello, World!"
}
id 필드는 greeting의 고유 식별자이며 내용은 greeting의 텍스트 표현입니다.
greeting 표현을 모델링하려면 resource representation class를 만들어야 합니다.
이제 다음 목록 (src / main / java / com / example / restservice / Greeting.java)에서 볼 수 있듯이 id 및 content 데이터에 대한 필드, 생성자 및 접근자가있는 Java 오브젝트를 작성해 주세요!
package com.example.restservice;
public class Greeting {
private final long id;
private final String content;
public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
public long getId() {
return id;
}
public String getContent() {
return content;
}
}
위의 class는 Jackson JSON 라이브러리를 사용하여 Greeting 유형의 인스턴스를 JSON에 자동으로 변화합니다.
Jackson은 웹 스타터에 default로 포함되어 있습니다.
Resource Controller class 생성하기
RESTful 웹서비스 구축을 HTTP 요청 -> Controller 의 순서로 진행되게 spring에서 설계했습니다.
이러한 구성요소는 @RestController 어노테이션으로 식별됩니다.
아래에 표시된 GreetingController는 새 인스턴스를 반환하여 /greeting 의 대한 GET 요청을 처리합니다.
package com.example.restservice;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
}
이 Controller는 간결하고 간단합니다. 하지만 Controller안에서는 많은 일이 일어납니다.
@GetMapping 어노테이션은 HTTP GET 요청을 /greeting에 greeting() 메소드에 연결되게 해줍니다.
@PostMapping은 POST를, @RequestMapping(method=GET)은 정의된 메소드의 이름을 비슷한 방식으로 연결시켜 줍니다.
@RequestParam은 요청 매개변수와 메소드의 매개변수를 묶어줍니다.
만약에 name 매개변수가 요청에 포함되어 있지 않다면, default 값으로 대체됩니다.
메소드 본문의 구현은 카운터의 다음 값을 기반으로 id 및 content 속성을 가진 새 Greeting 객체를 만들고 반환하며,
Greeting 템플릿을 사용하여 지정된 이름의 형식을 지정합니다.
앞에서 설명한 기존 MVC 컨트롤러와 RESTful 웹 서비스 컨트롤러의 주요 차이점은 HTTP 응답 본문이 생성되는 방식입니다.
RESTful 웹 서비스 컨트롤러는 Greeting 기술을 HTML로 서버 측 렌더링하는 데 뷰 기술을 사용하지 않고 Greeting 오브젝트를 채우고 리턴합니다.
객체 데이터는 JSON으로 HTTP 응답에 직접 작성됩니다.
위의 코드는 @RestController 어노테이션을 이용하여 클래스가 컨트롤러로 표시되어 모든 메소드가 뷰 대신에 도메인 오브젝트를 리턴합니다.
@RestConstroller는 @Controller와 @ResponseBody를 모두 포함하는 약어입니다.
Greeting 객체는 JSON으로 변환되어야합니다.
Spring의 HTTP 메시지 변환기의 지원 덕분에 변환을 수동으로 수행 할 필요는 없습니다. Jackson 2가 클래스 경로에 있으므로 Spring의 MappingJackson2HttpMessageConverter가 자동으로 선택되어 Greeting 인스턴스를 JSON으로 변환합니다.
@SpringBootApplication 은 아래와 같은 기능을 제공합니다.
- @Configuration: 클래스를 application context의 Bean으로 정의해 준다.
- @EnableAutoConfiguration: SpringBoot에게 다양한 속성 설정을 기반으로 Bean을 추가하도록 지시.
- @ComponentScan: SpringBoot에게 서비스와 컨트롤러를 찾을수 있게 해줍니다.
서비스 테스트
자 이제 테스트를 진행해 보겠습니다!
http://localhost:8080/greeting
위의 주소로 접속을 시도하면

다음과 같이 응답을 볼 수 있다.
마치며...
spring의 구동방식과 구조에 대해서 자세한 이해를 바탕으로 시작하는 것이 좋다고 생각합니다.
글을 쓰면서 이것 저것 흔들렸던 개념을 다시 잡는데 좋은 포스팅이었습니다.
실습을 따라하시며 이해되지 않는 문장이나 표현이 있으시다면 https://spring.io/guides/gs/rest-service/ 가이드를 바탕으로 따라한 포스팅이니 원문을 참조하시면 되겠습니다.
'IT > Back-end' 카테고리의 다른 글
| 서버 기동시 port 중복 해결방법! (2) | 2020.03.18 |
|---|---|
| REST 방식으로 JPA Data에 접근하기 (0) | 2020.03.10 |
| [Spring] 데이터에 접근하기 (feat. JPA) -(1) (0) | 2020.03.10 |
| RESTful 웹 서비스 사용하기 -(2) (0) | 2020.03.04 |
| RESTful Web Service 구축하기! (feat. spring)-(1) (0) | 2020.03.03 |