[인프런] Spring Boot를 이용한 RESTful Web Services 개발 - Spring Boot로 개발하는 RESTful Service
Spring boot 개요
Step 0 - Spring Boot
스프링부트를 이용하면 최소한의 설정만으로 가능하다. 단독 실행 가능한 어플리케이션을 만들 수 있는데, 어플리케이션 서버가 내장되어 있기 때문이다. 스프링 프레임워크에 필요한 설정도 auto configuration을 이용할 수 있고, 개발자는 비즈니스 로직을 처리하는데 더 집중할 수 있다.
SpringBootApplication이라는 어노테이션이 붙은 함수를 실행하면 어플리케이션을 실행할 수 있다.
auto configuration이라는 기능을 통해서 필요한 설정작업을 자동화 할 수 있다.
component scan이라는 작업을 통해, 프로젝트에 선언된 컴포넌트들을 읽어오게 된다. 스프링 컨테이너에 의해 인스턴스가 생성되고 관리되는 것을 IOC라고 한다.
Step 1 - Understanding the RESTful Services we would create in the course
/users/{id}에서 {}안의 값은 가변 데이터이다. 이러한 방법을 path variable이라 한다.
Spring Boot Project 생성
Step 2 - Initializing a RESTful Services Project with Spring
Application.properties를 application.yml로 바꿔준다. properties나 yml모두 스프링부트의 설정에 관한 파일이다.
server:
port: 8088
들여쓰기 중요하다.
포트번호가 바뀐 것을 알 수 있다.
HelloWorld Controller 추가
REST API에서는 일반 Controller가 아닌 REST Controller를 사용한다.
REST API에서는 일반 Controller가 아닌 REST Controller를 사용한다.
HelloWorldController
package com.example.restfulwebservice;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloWorldController {
// GET
// /hello-world (end-point)
// @RequestMapping(method = RequestMethod.GET, path = "/hello-world")은 예전에 사용하던 방식
@GetMapping(path = "/hello-world")
public String helloWorld() {
return "Hello World";
}
}
REST API에서는 RestController라는 것을 이용한다.
최종 end-point는 "/hello-world"이다.
@RequestMapping은 예전 방식이다.
HelloWorld Bean 추가
이번에는 단순 String 반환이 아닌 Bean을 반환해보자.
이번에는 단순 String 반환이 아닌 Bean을 반환해보자.
HelloWorldController
@GetMapping(path = "/hello-world-bean")
public HelloWorldBean helloWorldBean() {
return new HelloWorldBean("Hello World");
}
HelloWorldBean
package com.example.restfulwebservice;
// lombok
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
//@NoArgsConstructor 디폴트 생성자가 추가된다
public class HelloWorldBean {
private String message;
// public HelloWorldBean(String message) {
// this.message = message;
// }
}
lombok의 Data annotation을 이용함으로서 자동으로 getter와 setter가 추가되었다. @AllArgsConstructor는 멤버 필드 값을 설정해주는 생성자 역할을 한다. (주석 처리한 생성자 역할)
lombok이 작동하게 하려면
setting -> annotation 검색 -> enable annotation processing을 체크해줘야 한다.
lombok을 plugin에서 설치해야한다.
intelliJ에서 왼쪽의 structure를 누르면
클래스가 가지고 있는 생성자와 게터, 세터, 이퀄스, toString 등등이 있는 것을 알 수 있다.
Rest Controller를 사용하면 JSON형태로 반환한다.
Step 5 - Quick Review of Auto Configuration and Dispatcher Servlet
yml파일은 모든 파일을 리스트, 해쉬 등으로 구성할 수 있으며 비교적 쉬운 문법, 가독성 때문에 환경 설정 등에서 많이 사용한다.
server:
port: 8088
logging:
level:
org.springframework: DEBUG
org.springframework를 debug레벨로 로그를 남긴다는 설정이다.
DispatcherSevletAutoConfiguration이 호출되는 것을 알 수 있는데, 비즈니스 로직을 처리하고 결과값을 API를 호출한 쪽에 다시 줘야하는데, DispatcherServlet은 사용자의 처리를 처리해주는 gateway다.
HttpMessageConverterAutoConfiguration이 JSON 형식으로 바꿔서 보내준다.
dispatcher servlet은 http 프로토콜로 들어오는 모든 요청을 처리하기 위해, presentation 계층의 맨 앞에 놓여진다. 쉽게 말해 사용자의 요청은 dispatcher servlet에 의해 시작되고, 끝난다.
클라이언트의 요청을 JSON 형태로 답하므로, 사용자에게 보여지는 페이지, 즉 view가 없다. 이러한 컨트롤러를 REST Controller라고 한다. 일반적인 controller를 사용하는 mvc에서는 response body로 변환을 해서 보냈다. REST Controller에서는 그럴 필요가 없다.
Step 6 - Enhancing the Hello World Service with a Path Variable
URI의 맨뒤에 가변 데이터가 붙어있다.
package com.example.restfulwebservice;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloWorldController {
...
@GetMapping(path = "/hello-world-bean/path-variable/{name}")
public HelloWorldBean helloWorldBean(@PathVariable String name) {
return new HelloWorldBean(String.format("Hello World, %s", name));
}
}
크롬 익스텐션에서 JSON Viewer를 설치하면 더 깔끔하게 보인다.
Author And Source
이 문제에 관하여([인프런] Spring Boot를 이용한 RESTful Web Services 개발 - Spring Boot로 개발하는 RESTful Service), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@injoon2019/인프런-Spring-Boot를-이용한-RESTful-Web-Services-개발-Spring-Boot로-개발하는-RESTful-Service저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)