[Spring] API 방식
API 란? Application Programming Interface의 약자.
Appllication Programming 은 응용 프로그래밍을 뜻하고,
인터페이스는 서로 다른 두 개의 시스템이 정보를 주고 받도록 이어주는 경계를 뜻한다.
즉, API는 운영체제와 응용프로그램 사이의 통신에 사용되는 언어나 메시지 형식을 말한다.
이전의 서버는 백엔드에서 데이터를 이용해서 완성된 HTML를 브라우저에게 전달해줘서, 브라우저는 단순한 뷰어 역할로 쓰였다.
요즘의 서버는 브라우저에서 필요한 데이터만을 전달하는 API 서버의 형태로 변화하고 있다.
즉, 서버는 브라우저에게 완성된 HTML이 아닌, 브라우저에서 요구하는 순수한 데이터를 전해준다.
이전 방법에서는, 모델에 있는 key 값에 대응하는 value를 넣어줬었다.
그런데, 여기서는 모델에 값을 넣지 않고, 데이터를 바로! 전달해준다!
@ResponseBody
일반적인 JSP와 같은 뷰로 전달되는게 아니라, 데이터 자체를 전달하기 위한 용도임을 알려주는 annotation이다.
(이 때, annotation은 주석이면서 설명이라고 보면 될 듯 하다.)
메소드 반환값을 나타내는 Annotation은 웹 response body 에 바인딩 되어야한다.
@ResponseBody 를 사용하면 HTTP의 BODY에 문자 내용을 직접 반환한다.
이때 viewResolver 대신 HttpMessageConverter가 동작하는데, 뭘 받았느냐에 따라 처리하는 방식이 다르다.
그리고 동작하는 Converter도 다르게 불린다.
문자인 경우 StringHttpMessageConverter, 객체인 경우 MappingJackson2HttpMessageConverter 로 불린다.
기본 문자 처리
- HelloController 내용 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
package hello.hellospring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data", "spring!!");
return "hello";
}
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam(value = "name", required= false) String name, Model model){
model.addAttribute("name", name);
return "hello-template";
}
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name){
return "hello " + name;
}
}
|
cs |
문자를 받게 된 경우, StringConverter가 이 데이터를 http 응답에 반환한다.
return "hello" + name; 에서 이 반환값도 문자이다!
- localhost:8080/hello-string?name=uhhyunjoo 접속
- 페이지 소스 보기
MVC 방식에서는 템플릿 엔진이, View라는 템플릿이 있는 상태에서 데이터 조작했던건데,
API 방식에서는 데이터를 그냥 그대로 내려보내준다.
기본 객체 처리
- HelloController 내용 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
package hello.hellospring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "spring!!");
return "hello";
}
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam(value = "name", required = false) String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
@GetMapping("hello-uhhyunjoo")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name; // "hello uhhyunjoo"
}
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
|
cs |
객체를 받게 된 경우, JsonConverter가 JSON 방식으로 데이터를 만들어서 http 응답에 반환한다.
return hello 에서 이 hello는 객체이다.
- localhost:8080/hello-api?name=uhhyunjoo!!! 접속
- 페이지 소스 보기
* 자동 정렬 : Ctrl + Alt + L
* Complete Statement : Ctl + Shift + Enter
'etc > Spring' 카테고리의 다른 글
[Spring] MVC 와 템플릿 엔진 (0) | 2021.01.12 |
---|---|
[Spring] 정적 컨텐츠 (.html) 가져오기 (0) | 2021.01.04 |
[Spring] Port 8080 was already in use. (0) | 2021.01.04 |
[Spring] 프로젝트 빌드하고 실행하기 (0) | 2021.01.04 |
[Spring] spring-boot-devtools 라이브러리 추가하기 (0) | 2021.01.03 |
댓글
이 글 공유하기
다른 글
-
[Spring] MVC 와 템플릿 엔진
[Spring] MVC 와 템플릿 엔진
2021.01.12 -
[Spring] 정적 컨텐츠 (.html) 가져오기
[Spring] 정적 컨텐츠 (.html) 가져오기
2021.01.04 -
[Spring] Port 8080 was already in use.
[Spring] Port 8080 was already in use.
2021.01.04 -
[Spring] 프로젝트 빌드하고 실행하기
[Spring] 프로젝트 빌드하고 실행하기
2021.01.04