재영재 2022. 1. 27. 21:00

본 게시물은 인프런 김영한 선생님의 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 수업을 듣고 혼자 공부하기 위해 작성된 것입니다.

 


 

정적 컨텐츠
서버에서 하는 것 없이 파일을 그대로 웹브라우저에 내려주는 것을 말한다. 정적컨텐츠에는 어떠한 프로그래밍도 할 수 없다. 따라서 모든 사용자들에게 똑같은 결과값을 보여준다.

 

스트링 부트는 정적 컨텐츠 기능을 자동으로 제공하기 때문에 static 폴더에 파일을 만들면 된다.

 

- 정적 콘텐츠의 동작 방식

  1. 웹 브라우저에서 hello.html(정적 콘텐츠)를 요청하면 내장 톰캣 서버가 요청을 받아 스프링에게 넘긴다.
  2. 스프링은 컨트롤러 쪽에 hello라는 컨트롤러가 있는지 먼저 찾는다.
  3. 만약 관련 컨트롤러가 없으면 스프링부트가 resources/static/hello.html이라는 정적 콘텐츠를 찾아서 웹 브라우저에게 반환한다.

 

 

 

MVC와 템플릿 엔진
MVC란?
Model : 데이터와 비즈니스 로직을 관리
View : 레이아웃과 화면을 처리
Controller : 내부 동작 처리

 

- MVC 동작 방식

  1. 웹 브라우저에서 localhost:8080/hello-mvc 를 요청했다면, 내장 톰캣 서버가 이를 스프링에게 알린다.

  2.관련된 helloController (mapping이 되어있음) 가 model에서 name:spring이라는 데이터를 꺼내어 hello-template과      함께 return한다.

 @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam(name= "name") String name, Model model) {
        model.addAttribute("name",name);
        return "hello-template";
    }

  3. viewResolver가 hello-template이라는 이름의 view가 있는지 찾는다.

  4. templates폴더 내에 hello-template.html이 존재하므로 , 이 view에 템플릿 엔진 처리를 완료한 후 , 웹 브라우저에         전달한다.

 

 

 

API
정적 컨텐츠를 제외하면 스프링의 동작 방식에는 mvc패턴으로 html을 내려주는 방식, API를 사용하는 방식의 두가지 방법이 있다.
 

 

API 방식이 어떤 것인지 살펴보자.

 

먼저 controller 파일에 다음과 같이 추가 해준다.

 @GetMapping("hello-spring")
    @ResponseBody
    public String helloSpring(@RequestParam("name") String name) {
        return "hello " + name;
    }

여기서 @ResponseBody 애노테이션은 http통신 프로토콜의 body부에 데이터를 직접 넣겠다는 뜻이다. 만약 name의 값이 string이면 리턴값은 hello string이 되는 것이다.

 

템플릿 엔진과의 차이점은?
api 방식을 사용하면 리턴시 view(html)가 필요없이 정말 데이터 그대로 "hello string"만 반환된다.