xml, 요즘엔 json이라는 데이터 구조 포맷을 사용하여 클라이언트에게 데이터 전달Vue.js, React를 사용할 때도 API로 데이터만 내려주면 화면은 클라이언트가 알아서 그리고 정리함html을 내려줄 필요가 없고 데이터를 주고 받는 게 중요 → 데이터를 받을 때 API 방식 사용(이 부분은 깊이 있게 파고 들면 정의가 달라질 수 있음)View를 찾아서 템플릿 엔진을 통해 화면에 렌더링 할 html 파일을 웹브라우저에 넘겨주는 방법API를 쓰는 방법@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) { // 외부에서 인자를 받아 옴
model.addAttribute("name", name);
return "hello-template";
}
페이지 소스 코드 보기를 하면 아래 화면이 나온다.

@GetMapping("hello-string")
@ResponseBody // http의 헤더부와 바디부 중 바디부에 데이터를 직접 넣어주겠다는 것
public String helloString(@RequestParam("name") String name) {
return "hello " + name; // "hello spring"
// View 같은 것 없이 문자가 그대로 내려감
}
페이지 소스 코드 보기를 하면 아래 화면이 나온다.

html을 거치지 않고 데이터를 그대로 내려준다.
위에선 문자를 내려 받았지만, 실제로 API가 유용한 건 데이터를 내려 받을 때이다.
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello(); // 객체화
hello.setName(name);
return hello; // 문자가 아닌 객체를 넘김
}
static class Hello { // Hello 클래스
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
localhost:8080/hello-api?name=spring! 으로 실행하면 아래 화면이 출력된다.

페이지 소스 코드 보기를 해도 똑같이 나온다.

이렇게 json 방식이 사용된 걸 볼 수 있다.

@ResponseBody 사용viewResolver 대신에 HttpMessageConverter 가 동작StringHttpMessageConverterMappingJackson2HttpMessageConverter (JsonConverter)HttpMessageConverter가 기본으로 등록되어 있음클라이언트의 1. HTTP Accept 헤더(어떤 포맷으로 받고 싶은지 요청)와 2. 서버의 컨트롤러 반환 타입 정보 둘을 조합해서
HttpMessageConverter가 선택됨
그러나 요새는 거의json만 사용된다.
정보에 감사드립니다.