Spring

웹 개발 (정적 컨텐츠, MVC, API 방식)

yong_ღ'ᴗ'ღ 2022. 12. 10. 01:54

✔ 정적 컨텐츠, MVC 방식

@Controller
public class HelloController {

    @GetMapping("hello")
    public String hello(Model model) {
        model.addAttribute("data", "hello!!");
        return "hello";
    }
}

 

◼ Web Application 에서 첫번째 진입점: Controller

 

 localhost:8090/hello 라고 들어오면, 서버에서 받아서 Spring 한테 물어봄

    그럼 Spring이 '/hello'와 매칭되는 게 있는지  Controller 먼저 찾아봄(Controller가 우선순위를 가짐)

    → ① 매핑되는 컨트롤러가 있으면, 해당 컨트롤러의 메서드 실행

    → ② 매핑되는 컨트롤러가 없으면, resouces > static 폴더 안에 해당 파일 있는지 찾아봄

 

  매개변수 Model model : 스프링이 model을 만들어서 넣어줌 

     model.addAttribute("key", value);

 

 return hello;

    → Controller에서 return 값으로 문자를 반환하면, ViewResolver가 화면을 찾아서 처리한다.

         +) viewResolver: view를 찾아주고, 템플릿 엔진을 연결시켜줌 

    → resources > templates 에 있는 hello.html을 찾아서 렌더링한다.

 

     ▶ viewResolver가 hello라는 view찾아서 thymeleaf 템플릿 엔진에게 처리를 넘겨줌

         thymeleaf가 렌더링해서 변환한 HTML을 웹 브라우저에게 넘겨줌

        (정적 컨텐츠일 때는, 변환하지 않고 웹 브라우저에 넘겨줌)

 


✔ API 방식

 @ResponseBody: 응답 body 부분에 데이터를 직접 넣어주겠다.

    → View 이런 거 없이 그냥 해당 데이터를 그대로 반환

 

 현재 Spring에서는,

    객체를 반환하고 + @ResponseBody라고 되어 있으면, 

    default로 Json 형태로 반환해준다.

 

 @ResponseBody가 없을 때에는 viewResolver가 동작했는데,

    @ResponseBody가 있을 때에는 HttpMessageConverter가 동작한다.

    → 단순 문자면, StringHttpMessageConverter가 동작

    → 객체면, 기본적으로 MappingJackson2HttpMessageConverter(JsonConverter)가 동작

// 문자열 반환
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
    return "hello " + name;
}

chrome에서 localhost:8090/hello-string&name=hellooooo~ 해서 페이지 소스 확인해보면,

그냥 정말 '문자열' 데이터만 넘어온 거 확인할 수 있다.

 

 

 

// 객체 반환
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
    Hello hello = new Hello();
    hello.setName(name);
    return hello;
}

chrome에서 localhost:8090/hello-api&name=hellooooo~ 해서 페이지 소스 확인해보면,

객체가 json 형태로 바뀌어서 반환된 거 확인할 수 있다.