사실 정적 컨텐츠 방식을 제외하면 MVC 방식에서 View를 찾아서 템플릿 엔진을 통해서 화면을 랜더링해서 HTML을 웹 브라우저에 넘기는 방법이 있고, API를 사용하는 방식이 있습니다.

즉, 2가지만 기억하면 됩니다. "HTML로 내리냐, API 방식으로 데이터를 바로 내리냐"

@ResponseBody 문자 반환

바로 코드로 봅시다. HelloController에 추가합니다.

@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
    return "hello " + name;
}
  1. @ResponseBody

실행을 해봅니다.

Untitled

페이지 소스를 보면 HTML이 아니라 문자열만 나타납니다.

Untitled

이전의 템플릿 엔진은 화면을 가지고 뷰라는 템플릿이 있는 상황에서 조작하는 방식이고,

API 방식은 데이터를 그대로 내려줍니다.

하지만 사실 문자열을 그대로 내려주는 방식을 사용할 일은 거의 없습니다.

@ResponseBody 객체 반환

문자가 아니라 데이터를 내놓으라고 할 때 API를 많이 사용합니다. HelloController에 추가합니다.

    @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;
        }
    }
  1. static을 써야하는 이유?
  2. 프로퍼티 규약

처음으로 문자가 아닌 객체를 넘겼습니다. 이 방식을 API 방식이라고 부릅니다.

@ResponseBody 를 사용하고, 객체를 반환하면 객체가 JSON으로 변환됩니다.