[인프런] Spring Boot를 이용한 RESTful Web Services 개발 - Spring Boot로 개발하는 RESTful Service

June·2021년 5월 11일
0

Spring boot 개요

Step 0 - Spring Boot

스프링부트를 이용하면 최소한의 설정만으로 가능하다. 단독 실행 가능한 어플리케이션을 만들 수 있는데, 어플리케이션 서버가 내장되어 있기 때문이다. 스프링 프레임워크에 필요한 설정도 auto configuration을 이용할 수 있고, 개발자는 비즈니스 로직을 처리하는데 더 집중할 수 있다.

https://start.spring.io/

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를 사용한다.

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을 반환해보자.

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를 설치하면 더 깔끔하게 보인다.

0개의 댓글