[Spring] 스프링 입문 START (21.08.26)

2358 단어 SpringSpring

Spring🔥

인프런 스프링 입문

프로젝트 환경설정

  • https://start.spring.io/에서 스프링부트 프로젝트를 만들 수 있다. Gradle project가 대세다. dependencies에서 spring web과 thymeleaf(html 템플릿 엔진)를 add함.

스프링 웹 개발 기초

mvc와 템플릿 엔진

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

"localhost:8080/hello-mvc?name=spring"으로 접속하면 내장 톰켓서버를 거치고 스프링에 던져준다. helloController에 "hello-mvc"가 맵핑되어있으므로 해당 메소드를 호출해준다. model에 키는 "name"으로 값은 URL에서 넘겨준 'spring'으로 설정해준다. return으로 "hello-template"으로 주면
viewResolver가 templates/에서 그 리턴값과 같은 이름의 파일을 찾아서 Thymeleaf 템플릿 엔진으로 처리해달라고 한다. 템플릿엔진은 렌더링해서 HTML을 변환해서 웹브라우저에 반환한다.(정적 컨텐츠일때는 변환을 하지않고 바로 반환을 해준다)

API

정적 컨텐츠 방식을 제외하면 두가지다. HTML방식으로 내리냐, API방식으로 내리냐.

리턴 문자

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

**ResponseBody** : http에서의 Body부분에 이 데이터를 직접 넣어주겠다.
문자 리턴 값이 요청한 클라이언트에 바로 직접 내려간다. 뷰 이런게 없다.

리턴 데이터(객체)

    @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;
        }
    }


※class 안에서 static class를 쓰면 또 클래스를 쓸 수 있다.
※과거에는 XML방식(HTML)으로 쓰이기도했으나 요즘에는 심플한 JSON방식으로 쓴다. 스프링 @ResponseBody도 기본적으로 JSON방식으로 반환하도록 설정돼있다.

컨트롤러에 맵핑이 되어있는데 @ResponseBody가 있으면 viewResolve이 아니라 HttpMessageConverter가 동작을 한다. http응답에 이 데이터를 그대로 넣어서 넘긴다. 근데 데이터가 단순 문자가 아니라 객체라면 JSON방식으로 http응답에 반환한다.

좋은 웹페이지 즐겨찾기