IoT 빅데이터 응용 교육 과정_하계

[IoT 빅데이터 응용 교육 과정]23.07.11 14장 장바구니 만들기

연지양갱 2023. 7. 11. 20:00
728x90
반응형
SMALL

교재

스프링 코딩 공작소

https://thebook.io/080266/0509/

 

스프링 코딩 공작소: 14장 RESTful 웹 서비스: 장바구니 페이지 만들기

더북(TheBook): (주)도서출판 길벗에서 제공하는 IT 도서 열람 서비스입니다.

thebook.io

 

 

 


 

 

 

 

클라우드 

컨테이너

서버가상화

물리서버 

 

서버 구축할 때 어떤걸로 해야하는지,,?

 

 

 

 

RESTful 웹 서비스

웹의 장점을 최대한 활용할 수 있는 아키텍처인 REST원리를 사용하여 구현된 웹 서비스

 

HTTP에서 CRUD 요청을 시소스와 메소드로 표현하여 특정한 형태로 전달하는 방식

 

Request : GET, POST, PUT, DELETE등 HTTP  방식을  사용하여 요청보냄

Response : JSON, XML, TEXT, RSS 등 특정 형태로 표현됨

▼ 표 14-1 REST의 구성 요소

종류 설명
리소스 서버는 고유 아이디가 있는 리소스를 가지며, 클라이언트는 이런 리소스에 요청을 보냅니다. 리소스는 URI에 해당합니다.
메서드 서버에 요청을 보내는 방식으로 GET, POST, PUT, PATCH, DELETE가 있습니다. CRUD 연산 중에서 연산에 맞는 Method를 사용하여 서버에 요청해야 합니다.
리소스 형태 클라이언트와 서버가 데이터를 주고받는 형태로 JSON, XML, TEXT, RSS 등이 있습니다. 최근에는 키(Key), 값(Value)을 활용하는 JSON을 주로 사용합니다.

 

 

URL과 URI의 차이

URL(Uniform Resource Locator) : HTTP에서 리소스 위치를 의미

리소스 위치라는 것은 결국 어떤 파일 위치를 의미합니다. 반면

URI(Uniform Resource Identifier) : HTTP에서 리소스를 식별하는 문자열의 구성을 의미

URI는 URL을 포함하고 있음

 

 

JSON 형태로 데이터 주고 받기

pom.xml 파일에 의존 라이브러리 등록하기

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.10</version>
</dependency>

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.11</version>
</dependency>

 

 

▼ 표 14-2 RESTful 방식의 애너테이션

유형 설명
@RestController @Controller @ResponseBody를 결합한 REST API를 제공하는 컨트롤러를 의미합니다.
@RequestBody 컨트롤러 요청 처리 메서드의 매개변수에 선언되면 요청된 HTTP 요청 body를 해당 매개변수에 바인딩합니다.
@ResponseBody • 컨트롤러 요청 처리 메서드의 매개변수에 선언되면 반환 값을 응답 HTTP 응답 body에 바인딩합니다.
• 스프링은 요청된 메시지의 HTTP 헤더에 있는 Content-Type을 기반으로 HTTP Message converter를 사용하여 반환 값을 HTTP 응답 body로 변환합니다.

바인딩 : 객체를 받으면 해당 객체를 심어주는 것

 

 

@ReqeustParam

@ModelAttribute

XML이나 JSON처럼 형식을 갖춘 문자열 형태면 전달받을수 없다. -> @RequestBody 이용

 

HTTP 요청 body 내용을 메소드의 매개변수가 전달 받을 뿐만 아니라 HTTP 요청 body 내용 전체를 해당 매개변수 타입으로 변환해준다

 

@ReqeustBody가 선언된 메소드의 매개변수 => 폼 페이지에서 입력된 다중 값을 &로 연결된 name=value 형태로 전달 받음

 

예제

showForm()으로 webpage14_01.jsp 파일을 출력

@RequestBody :  name=HongGilSon&age=20&email=hong@naver.com

 

 

Accept부분 중요 : reqest를 이런 형식으로 보내라는 양식?

 

Payload : Form Data 확인 가능

 

 

pom.xml 추가

<!-- JSON -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.13.2.2</version>
    </dependency>

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.13</version>
    </dependency>

>> 다른 버전임

 

controller만들고 hltml 에서 post를 보냄

<Controller>

@Controller
public class Example01Controller2 {

    @GetMapping("/json")
    public String showForm() {
        return "webpage14_02";
    }

    @PostMapping("/test")
    public void submit(@RequestBody HashMap<String, Object> map) {
        System.out.println(map);
    }
}

<jsp>

<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<head>
<title>RESTful 웹 서비스</title>
</head>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
var obj = {"name" : "kim",  "age" : 30};
function test() {
    $.ajax({
        url : "<c:url value="/test"/>",
        type : "post",
        data : JSON.stringify(obj),
        dataType : "json",
        contentType : "application/json",
        success : function(data) {
            alert("성공" );
        },
        error : function(errorThrown) {
            alert("실패");
        }
    });
}
</script>
<body>
    <h3>RESTful 웹 서비스</h3>
    <button onclick="test()" type="button">실행하기</button>
    
</body>
</html>

 

 

하단의 실행하기 버튼을 누르면

<Script> 태그에서 test()함수 실행

$.ajax({

 ...

})

POST 됨ㅁ

 

 

 

HttpMessageConverter로 request body를 매개변수로 변환하는 방법

 

▼ 표 14-3 HttpMessageConverter를 구현하는 주요 클래스

구현 클래스 설명
ByteArrayHttpMessageConverter • HTTP 메시지와 byte 배열 사이의 변환을 처리합니다.
• 지원 콘텐츠 타입: application/octet-stream
StringHttpMessageConverter • HTTP 메시지와 String 사이의 변환을 처리합니다.
• 지원 콘텐츠 타입: text/plain;charset=ISO-8859-1
FormHttpMessageConverter • HTML 폼 데이터를 MultiValueMap으로 전달받을 때 사용합니다.
• 지원 콘텐츠 타입: application-x-www-form-urlencorded
SourceHttpMessageConverter • HTTP 메시지와 javax.xml.transform.Source 사이의 변환을 처리합니다.
• 지원 콘텐츠 타입: application/xml 또는 text/xml
MarshallingHttpMessageConverter • 스프링의 Marshaller와 unMarshaller를 이용하여 XML HTTP 메시지와 객체 사이의 변환을 처리합니다.
• 지원 콘텐츠 타입: application/xml 또는 text/xml
MappingJacksonHttpMessageConverter • Jackson 라이브러리로 JSON HTTP 메시지와 객체 사이의 변환을 처리합니다.
• 지원 콘텐츠 타입: applicaion/json

 

 

 

@ResponseBody

HTTP 응답 body 내용으로 매핑하는 역할

@RequestBody처럼 XML이나 JSON형식을 갖춘 문자열 형태로 응답할 때 이용

 

 

@RequestMapping

 

@ResponseBody Person submit()

 

 

 

 

 

@RestController 

@ResponseBody 추가된 것으로 JSON형태로 데이터를 반환

 

@RestController로 선언 -> @ResponseBody생략 O , JSON 형식으로 변환

-> RestController내에 controller, ResponseBody도 정의 되어 있음

@RestController
@RequestMapping("/exam03")
public class Example03Controller {
    @GetMapping
    public Person submit() {
        Person person = new Person();
        person.setName("HongGilSon");
        person.setAge("20");
        person.setEmail("Hong@naver.com");
        System.out.println(person);
        return person;
    }
}

이런식으로 작성해도 된다

 

 

 

ResponseEntity 

HTTP 요청에 대한 응답 데이터를 포함하는 클래스

HttpStatus, HttpHeaders, HttpBody 포함

 

 

 

 

RESTful 방식의 장바구니 기본 구조

 

 

 

 

 

 

 

 

 

 

반응형