[spring]스프링 개발 mvc, api 방식

devguri·2022년 3월 25일
0
post-thumbnail
post-custom-banner

스프링 개발 공부를 하고 싶어서 인프런에서 유명한 제일 유명한 김영한 강사님의 스프링 강의 로드맵 순서로 수강중이다.
다시 정리하고 싶어서 2번째 보는 중인데 스프링을 쉽게 이해하고 싶은 사람들에게 추천한다. 물론 스프링 자체가 어렵긴 하지만 쉽게 설명하시는게 느껴진다...!

웹개발 방식
1. 정적 컨텐츠
2. MVC 패턴
3. API 방식

정적 컨텐츠

: 컨트롤러 사용 없이 resource에 있는 html 파일 그대로를 요청해서 보여주는 방식

  1. 웹브라우저는 내장 톰켓 서버가 hello-static.html 주소 받음
  2. 내장 톰켓 서버는 스프링 부트에게 넘김
  3. 스프링은 먼저 컨트롤러 파일쪽에 hello-static 컨트롤러가 있는지 확인
  4. 그 다음 resouces파일 찾음
    → controller가 resources보다 우선순위 높다

MVC와 템플릿 엔진

: model, view, controller을 통해 역할을 나눠서 데이터를 전달하여 웹상에 표시하는 방식이다.

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

[HelloController.java]

<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>

[hello-template.html]

  1. 컨트롤러에서 querystring name에 대한 값을 외부에서 받아와서 names에 저장한다.
  2. 모델 객체에 name이라는 key에 대한 value 값인 names를 넘긴다.
  3. hello-template을 리턴 하면 html 파일에 모델 객체 전달되어 가져온 값으로 변환 후 웹페이지에 결과 출력해준다.
  • requestParam은 외부에서 값을 전달 받는 것이다. (이 값을 modle객체에 넘겨줌)

  1. 웹브라우저에서 hello-mvc주소를 내장 톰캣 서버에게 넘기고, 스프링 컨테이너에 전달한다.
  2. 컨트롤러는 hello-mvc에 매핑된 메소드를 호출해주고, 데이터를 담은 모델을 viewResolver에 넘겨줌
  3. Thymeleaf 템플릿 엔진은 모델값에 대해 rendering 해서 변환 후 html을 웹브라우저에 전달함

→ 템플릿 엔진으로 변환 후에 웹브라우저에 넘겨줌

→ 모델에 담아서 전달함

API

: html과 템플릿 엔진을 사용하지 않고 바로 결과를 넘겨주는 것이다.

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


    static class Hello{ //클래스 안에서 static class 선언(HelloController.Hello라고 생각하면됨)
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
  • @ResponseBody → http에서 body부에 데이터 직접 넣어주는 것
  • 데이터를 setName을 호출하여 데이터 설정

  • @ResponseBody를 사용하면 viewResolver을 사용하지 않음, 대신 HttpMessageConverter가 동작함
  • 문자를 반환하면 응답에 바로 전달했는데 객체를 주면 json 방식으로 데이터 만들어서 http 응답에 반응함
  • 단순 문자이면 StringConverter가 동작,
    객체면 JsonConveter가 동작
profile
Always live diligently
post-custom-banner

0개의 댓글