정적 컨텐츠를 제외하고는
1. MVC: html을 웹브라우저에 넘겨줌
2. API: 데이터를 직접 내려줌
먼저 String 형태로 내려주는 API 방식부터.
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name){
return "hello "+name;
}
여기에서 @ResponseBody가 중요한데,
html 바디 태그가 아니라,
http에서 헤더부와 바디부 중 <바디부>에 데이터를 직접 넣어주겠다는 뜻. (@ResponseBody)

그러면 이전과 똑같이 나오기는 하지만, 코드를 보면

html 태그 없이 바로 String 문자만 내려갔다는 것을 알 수 있다.
테플라 엔진과의 차이는?
템플릿 view 이런 부분이 없다.
이제 객체를 내려주는 API 방식을 볼건데, 이게 중요하다.
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name){
// Shift + ctrl + enter
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello{
private String name;
// Generate: alt + insert
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Hello 객체 형태로 데이터를 내려줄거다. (* 이때 IntelliJ 버전이 맞지 않아서 좀 고생을 했다.)
private String name의 getter setter을 만들어주고,
@ResponseBody // 바디부에 우리가 직접 데이터를 내려줄건데
@RequestParam("name") // name 파라미터를 입력받아서
hello.setName(name); // hello 객체의 파라미터로 setName 해줄 것이다.
이런 내용.
웹페이지에 들어가보면

이런 식의 페이지를 볼 수 있다.
{"name": "spring"}은 json이라는 방식인데, 스프링도 json으로 반환하는 것이 기본이다.
스프링 입장에서 객체가 오면 뭘로 반환하지?를 한 번 생각해 보는데,
json으로 반환하는 것이 디폴트이기 때문에 굳이 다른 설정을 건드리지 않으면 json으로 반환된다.

MVC에서는 viewResolver가 동작해서 view 페이지를 보여줬지만,
@ResponseBody가 있을 경우에는(아! 데이터를 http 프로토콜의 바디부에 직접 내려받겠다는 거군)
HttpMessageConverter가 작동한다.
단순 문자인 경우 -> StringConverter
객체인 경우 -> JsonConverter
어쨌든 결론은?
1. 요즘은 json을 대체로 쓴다.
2. API 방식은 객체를 반환하는 것.
근데 이때 http 메세지 컨버터를 통해서 jsoh 스타일로 바꿔서 반환해준다.
'Framework > Spring' 카테고리의 다른 글
| 회원 리포지토리 테스트 케이스 작성 (0) | 2024.01.09 |
|---|---|
| 회원 도메인, 리포지토리 만들기 (0) | 2024.01.09 |
| IntelliJ 단축키 모음 (0) | 2024.01.09 |
| 정적 컨텐츠, MVC/템플릿 엔진 (0) | 2023.12.28 |
| View 환경설정 (0) | 2023.12.28 |