• inflearn 김영한의 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 강의를 보고 정리한 내용입니다.

1. 정적 컨텐츠

  • 파일을 그대로 웹브라우저에게 전달

  • 동작 과정
    1. 내장 서버에서 /hello-static.html 요청을 받으면 hello-static 관련 Controller를 찾는다.
    2. 해당 Controller가 없으면 /resources/static/hello-static.html을 웹브라우저에게 전달한다.

2. MVC와 템플릿 엔진

  • 서버에서 프로그래밍을 통해 html을 동적으로 바꿔서 웹 브라우저에게 전달한다.

  • MVC (Model, View, Controller) : Spring에서 제공하는 웹 모듈

    Model : 데이터 디자인을 담당한다.
    View : 실제로 렌더링되어 보이는 페이지를 담당한다.
    Controller : 사용자의 요청을 받고, 응답을 주는 로직을 담당한다.

  • Controller
    • controller/HelloContorller.java
    • @RequestParam(value="~", required="true") : 외부(url)에서 파라미터를 가져올 수 있다.
      • required의 default는 true, ture이면 반드시 파라미터를 넣어줘야 한다.
	@Controller
	public class HelloController {
 	    @GetMapping("hello-mvc")
 	    public String helloMvc(@RequestParam("name") String name, Model model) {
 		    model.addAttribute("name", name);
 		    return "hello-template";
 	    }
        }
  • View
    • resources/templates/hello-template.html
    • hello! empty가 "hello + ${name}으로 변환된다.
	<html xmlns:th="http://www.thymeleaf.org">
	<body>
	    <p th:text="'hello ' + ${name}">hello! empty</p>
	</body>
	</html>
  • 실행방법
  • 동작과정
    1. /hello-mvc 요청을 받으면 서버에서 해당요청을 Spring에 알려준다.
    2. Spring은 /hello-mvc와 mapping된 Controller 메서드를 호출한다.
    3. 해당 메서드에서 model(key="name", value="spring")과 hello-template을 return한다.
    4. ViewResolver가 return값에 해당하는 html파일을 찾고 템플릿 엔진에 처리를 요청한다.
    5. 템플릿 엔진에서는 html을 model의 정보를 이용하여 변환한 html을 웹 브라우저에게 전달한다.

3. API

  • View가 필요없이 API관련 Controller메서드의 return값을 바로 웹 브라우저에게 전달한다.

  • @ResponseBody
    • ViewResolver를 사용하지 않는다.
    • 대신 HTTP Response message의 body부분에 해당 메서드의 return값을 넣는다.

  • Controller (return value : string)
    • controller/HelloContorller.java
     @Controller
     public class HelloController {
         @GetMapping("hello-string")
         @ResponseBody
         public String helloString(@RequestParam("name") String name) {
             return "hello " + name;
         }
     }
  • Controller (return value : object)
    • controller/HelloContorller.java
     @Controller
     public class 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. @ResponseBody를 사용하므로 ViewResolver가 아닌 HttpMessageConverter가 동작한다.
    2. 만약 Cotroller 메서드의 return값이 string이면 string그대로 웹 브라우저에게 전달한다.
    3. 만약 Controller 메서드의 return값이 object이면 JSON으로 변환되어 웹 브라우저에게 전달한다.
profile
화이팅!

0개의 댓글

관련 채용 정보