[인프런]스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술2

8778 단어 SpringSpring

2. 스프링 웹 개발 기초

2.1 정적 컨텐츠

2.2 MVC와 템플릿 엔진

  • JSP, PHP와 같이 html을 서버에서 프로그래밍해서 html을 동적으로 바꿔서 내리는 것

  • controller, model, template 엔진 화면 => MVC

  • 차이점: 정적 컨텐츠는 파일을 그대로 사용자에게 전달해주는 것이고, MVC와 템플릿 엔진는 서버에서 파일을 변형해서 내려주는 방식

  • MVC: Model, View, Controller

    • View: 화면을 그리는데 집중
    • Controller: 비지니스 로직과 같은 내부적인 일을 처리하는데 집중
    • Model: Controller에서 화면에 필요한 것 들을 담아서 View 쪽으로 넘겨줌
  • MVC 코드 작성

    • java/hello.hellospring/controller/HelloController.java
     @GetMapping("hello-mvc")
        public String helloMyc(@RequestParam(value = "name") String name, Model model){
            model.addAttribute("name",name);
            return "hello-template";
        }
    • resources/templates/hello-template.html
    <html xmlns:th="http://www.thymeleaf.org">
    <body>
    <p th:text="'hello ' + ${name}">hello! empty</p>
    <--"hello! empty"는 서버없이 그냥 html 파일을  때를 대비해서 적어 넣은 것-->
    </body>
    </html>
  • MVC, 템플릿 엔진 이미지

2.3 API

  • JSON이라는 데이터 구조 포맷으로 사용자에게 데이터를 전달하는 방식

  • 정적 컨텐츠를 제외하면 html 방식으로 내릴지 API 방식으로 데이터를 바로 내릴지 2가지 방식이 있음

  • API 코드 작성1(@ResponseBody 문자 반환)

    • java/hello.hellospring/controller/HelloController.java
      • @ResponseBody를 사용하면 뷰 리졸버(View Resolver)를 사용하지 않음
      • 대신 HTTP의 BODY에 문자 내용을 직접 반환(HTML BODY TAG를 말하는 것이 아님)
      @GetMapping("hello-string")
      @ResponseBody
      public String helloSpring(@RequestParam("name") String name){
          return "hello " + name;
      }
  • API 코드 작성2(@ResponseBody 객체 반환)

    • java/hello.hellospring/controller/HelloController.java
      • @ResponseBody를 사용하고, 객체를 반환하면 객체가 JSON으로 변환됨
        @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;
          }
      }
  • @ResponseBody 사용원리

    • HTTP의 BODY에 문자 내용을 직접 반환
    • viewResolver 대신 HttpMessageConverter가 동작
    • 기본 문자처리: StringHttpMessageConverter
    • 기본 객체처리: MappingJackson2HttpMessageConverter
    • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음

[참고]
클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter가 선택된다.

참고문헌

[인프런] 김영한 강사님, 「스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술」

좋은 웹페이지 즐겨찾기