[Spring] 스프링 입문 (코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술) - 스프링 웹 개발 기초

밀크야살빼자·2023년 4월 18일
0

정적 컨텐츠

스프링 부트는 정적 컨텐츠 기능을 자동으로 제공해준다.

web에서 어떤 url을 입력했을 때, 그 url을 처리해주는 controller가 없으면 resources/static에서 html 파일을 찾는다.

파일을 그대로 웹 브라우저에 전달해준다.

hello-static.html

<!DOCTYPE HTML>
<html>
<head>
	<title>static content</title>
    <meta http-equiv="Content-Type" content="text/html"; charset=UTF-8"/>
    </head>
    <body>
    정적 컨텐츠 입니다.
    </body>
    </html>

웹브라우저에서 localhost:8080/hello-static.html 들어가면 내장 톰캣 서버가 처음 받아서 스프링한테 넘기면 스프링은 먼저 controller가 우선순위를 갖기 때문에 controller에서 hello-static을 찾아서 없으면 resource:static/hello-static.html을 찾아서 반환해준다.

MVC와 템플릿 엔진

MVC : Model, View, Controller
Controller, Model : 비지니스 로직과 관련있거나 내부적인것을 처리한다.
View : 화면을 그리는 것

서버에서 변형을 해서 전달해주는 방식이다.

HelloController

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

hello-template.html

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

localhost:8080/hello-mvc?name=spring!!!!!라고 url에 치면
hello spring!!!!이라고 뜬다.

웹브라우저에서 localhost:8080/hello-mvc를 들어가면 내장 톰캣 서버가 스프링한테 넘기면 스프링은 conroller에서 hello-mvc를 찾고 있으면 해당 메소드를 호출하고 model(name:spring)을 뷰 리졸버(뷰 찾아주고 템플릿 엔진 연결 시켜줌)한테 넘기면 templates:hello-template.html을 찾아서 템플릿 엔진인 변환하고 해당 템플릿을 반환해준다.

API

json 데이터 구조로 전달해준다.
HelloController

@Controller
public class HelloController {
    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("data","hello!!");
        return "hello";
    }
    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model){
        model.addAttribute("name", name);
        return "hello-template";
    }
    @GetMapping("hello-spring")
    @ResponseBody
    public String helloString(@RequestParam("name") String name){
        return "hello"+name;
    }
    @GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name){
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }
    static class Hello{
        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        private String name;


    }
    }

@ResponseBody : http의 바디쪽에 이 데이터들을 직접 넣겠다는 의미이다.

웹 브라우저에서 localhost:8080/hello-api를 들어가면 내장 톰켓 서버가 스프링에 알려주서 helloController에서 해당 메소드를 찾는다. 해당 메소드에 @ResponseBody(객체로 데이터를 받으면)가 있으면 httpMessageConverter가 동작해서 json형식으로 만들어서 http에 응답한다.

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

0개의 댓글