본문 바로가기

백엔드 개발/SpringMVC

Spring Web 개발 기초 - MVC 작동원리

1.MVC란?

-model view controller 

Controller는 원래 view의 일부였는데, 너무 내용이 복잡해서 둘로 쪼갰다.

view == 화면을 그리는 데 집중하는 part

model, Controller == 비즈니스 로직이나 요청 내용 처리에 집중하는 part

 

2. 코드 분석

@Controller
public class HelloController {

    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("data","hello!!");
        return "hello";
    }

// hello-mvc 조회(GET)에 대비한 mapping을 추가
    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model)
    {
        model.addAttribute("name", name);
        return "hello-template";
    }
    //GetMapping("hello-mvc") == /hello-mvc로 조회 요청 들어오면 밑의 public 함수로 처리해라
    //@RequestParam("name") == name이라는 key값 안에 특정 값을 받아오겠다. 
    //string name인 걸로 보아 string 값
    //Model model -> public 함수의 내용물
    //model.addAttribute("name", name); name이라는 key값의 value는 parameter로 데려오는 값이다. 
    //return "hello-template"; == resource에 hello-template라는 html문서를 실행시켜라.
//hello-template html 문서

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

<!-- 3행 -> 타임리프 엔진을 이용하겠다.-->
<!-- 5행의 hello empty는 없어도 된다. 다만 서버를 이용하지 않고,바로 html 문서를 열 때-->
<!--대신 출력 되는 내용이다.-->
<!-- 5행의 +${name}은 모델의 키 값인 name의 value를 꺼내 쓰겠다는 뜻이다.-->

해당 내용 바로  Run 하면 에러가 뜸. 

Why?

파라미터인 name에게 값을 주지 않았기 때문에(스프링 부트에선 파라미터에 값이 있는데 default다.)

따라서 값을 넣어줘야 한다.

localhost:8080/hello-mvc?name=spring! ( ?파라미터이름=값)은 해당 파라미터에 값을 넣어주는 것이다.

이렇게 되면 모델의 key값인 name의 value로 spring!이 들어간다.

 

3.작동원리

1)    Localhost:8080/hello-mvcget 요청이 들어옴

2)    tomcat에서 해당 요청 받아서 스프링부트로 넘겨줌. 스프링부트는 해당 요청에 mapping 되는 컨트롤러 있는지 확인. helloController 안에 해당 요청과 mapping이 되는 @getmapping(“hello-mvc”)가 있음을 확인하고 해당 컨트롤러가 일 처리하도록 맡김.

(@getmapping(“hello-mvc”) == url/hello-mvc란 주소로 get 요청이 들어왔다면 밑의 함수로 일 처리해라.)

3)    hello-template.html이라는 값을 resource 안에서 찾아서 반환하라. 이때 model을 참조하는 값은 확인해서 처리해라 (여기서 ${name} = spring! 으로 치환)

4)    viewResolver: view 처리하는 녀석 -> 해당 html을 주어진 파라미터 값(namevaluespring!)에 맞게 변환 후 웹 브라우저에 띄움.

 

4. 외운 거 확인

(1) 코드 분석 보고 스스로 답하기 

(2)작동원리 그림만 보고 답하기