교재
스프링 코딩 공작소
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 방식의 장바구니 기본 구조
'IoT 빅데이터 응용 교육 과정_하계' 카테고리의 다른 글
[IoT 빅데이터 응용 교육 과정] 23.07.12 스프링 코딩 공작소 15장 스프링 웹 플로우 (0) | 2023.07.12 |
---|---|
[IoT 빅데이터 응용 교육 과정]23.07.12 스프링 코딩 공작소 14장 RESTful 방식 (0) | 2023.07.12 |
[IoT 빅데이터 응용 교육 과정]23.07.10 13장 사용자 정의 애너테이션 (0) | 2023.07.10 |
[IoT 빅데이터 응용 교육과정] 23.07.06 13장 유효성 검사 (0) | 2023.07.06 |
[IoT 빅데이터 응용 교육 과정] 23.07.06 12장 다국어 처리 (0) | 2023.07.06 |