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

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

정적 컨텐츠

src > resources > static에 파일을 작성한 후  "localhost:8080/ 작성한 파일"로 이동하면 입력한 파일이 그대로 반환됨

  1. localhost:8080/hello-static.html 검색
  2. 내장 톰캣 서버가 스프링에 hello-static.html이라는 요청이 왔다고 스프링에 전달
  3. 스프링부트가 controller에 hello-static.html이 있는지 확인 (controller가 우선권을 가짐)
  4. 없으면 resources안에 static/hello-static.html을 찾아 웹브라우저에 반환
  • 원하는 파일을 static에 만들면 만든 정적파일이 그대로 반환됨
  • 어떠한 프로그래밍을 할 수 없음

MVC와 템플릿 엔진

MVC : Model, View, Controller

  • 과거에는 view, controller 분리 X -> 역할을 분리할 필요 O, view는 화면을 그리는데 집중, controller는 내부적 로직을 처리하는데 집중

 

//src/main/java/hello.helloSpring/controller/HelloController.java

public class HelloController {
      @GetMapping("hello-mvc")
      public String helloMvc(@RequestParam("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>
  </body>
  • localhost:8080/hello-mvc 접속시 "Required String parameter 'name' is not present" 오류 -> command+p 단축키 이용하여 parameter 정보 보기
  • prameter required의 default 값이 true이기 때문에 기본으로 값을 넘겨주어야함 -> ex) localhost:8080/hello-mvc?name =spring
  1. localhost:8080/hello-mvc 검색
  2. 내장 톰캣 서버가 스프링에 hello-mvc 라는 요청이 왔다고 스프링에 전달
  3. 스프링부트가 controller에 hello-mvc 있는지 확인
  4. 있으므로 해당 method 호출. (return hello-template , model(name:spring) )을 스프링에 넘겨줌
  5. viewResolver (view를 찾아주고 템플릿 엔진 연결)가 템플릿 엔진에 처리해달라고 넘김
  6. 템플릿 엔진이 변환 후 웹 브라우저에 넘겨줌

API

@Controller
  public class HelloController {
      @GetMapping("hello-string")
      @ResponseBody
      public String helloString(@RequestParam("name") String name) {
          return "hello " + name;
      }
}
  • @responseBody :

    뷰 리졸버( viewResolver )를 사용하지 않음

    http body에  return 값 직접 반환.
@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;
} }
}
  • return 값으로 객체 넘김 (json 방식 - {key:value} )
  • 단축키 command+N -> getter, setter 생성

@responseBody 사용 원리

  1. localhost:8080/hello-api 검색
  2. 내장 톰캣 서버가 스프링에 hello-api 라는 요청이 왔다고 스프링에 전달
  3. 스프링부트가 controller에 hello-api 있는지 확인
  4.  있는거 확인, @responseBody가 붙어있으므로 viewResolver 동작 X, HttpMessageConverter 동작 O
  5. 기본 문자면 StringHttpMessageConverter (그대로 넘겨줌), 기본 객체면 MappingJackson2HttpMessageConverter( json 방식으로 데이터를 변환하여 넘겨줌)
  6. byte 처리 등등 기타 여러 HttpMessageConverter 존재

+ Recent posts