6편 JAVA spring boot study - MVC와 템플릿 엔진

mvc란 model / view / controller
의 개념입니다.
view와 controller는 과거에 분리되어 있지 않았다고 합니다. (저는 2년차 주니어 개발자이기에 직접적으로 와닿진 않네요!)

view에서 모든걸 다 했었습니다. 그것을 model1방식이라고 했다고 합니다.
과거에는 view안에서 비즈니스로직도 다 있고 굉장히 복잡했습니다.그래서 하나의 파일이 굉장히 커지고 유지보수가 많아지는 현상이 생겼습니다. 그렇기에 요즘에는
그러나 현재는 mvc방식으로 개발 보통 합니다 (mvc패턴이 정답만은 아니지만요 :))

역할과 책임을 들을 수 있는데요
view는 화면을 그리는데 모든 영량을 직접하는것입니다.
controller는 비즈니스 로직이나 내부적인 로직을 개발하는데 집중 하는 부분입니다.

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org/">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p th:text="'hello' + ${name}"></p>
</body>
</html>

위 코드를

src/main/resources/templates

와에 만들어 놓고
위의 mvc설명에서 배웠던 c 부분을 담당하는 controller에
밑의 코드를 넣으면

//controller part
package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@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-mvc")
     public String helloMvc(@RequestParam("name") String name, Model model){
        model.addAttribute("name", name);

        return "hello-template";
    }

rest요청중 get요청을 진행합니다.
서버가 켜져 있는지 확인하고,
브라우저 검색바에

http://localhost:8080/hello-mvc?name=insung!!

과 같이 입력을 하면,

위 화면과 같이 나오는것을 볼 수 있습니다.
@RequestParam 데코레이션을 통해 name이라는 키값을 외부에서 받아서 return을 할때
hello-templete.html 파일의 name에 들어가게 되는것입니다.

동작 원리는
웹브라우저가

localhost:8080/hello-mvc?name=insung

요청을 보내면 spring의 내장 톰캣 서버가 해당 요청을 받고 스프링 컨테이너로 보냅니다.
스프링 컨테이너는 이 요청을 받고 해당 요청에 맞는 controller를 찾고 해당 controller가
helloMvc 메소드이니까 메소드가 return 하는 값을 spring에 넘겨주고 그러면 view관련된 값이 넘어올때 spring은 내부에서 viewResolver라는 부분에 해당 부분을 넘긴다. 그러면 viewResolver는 해당 view를 찾아서 가져다 주는 역할을 한다. 따라서 해당 output이 나오게 되는 것입니다.

⌨️ nestjs위에서 개발하고 있는 개발자의 시선에서 spring과의 연결점과 차이점!
nestJS에서는

import { Controller, Get } from '@nestjs/common';

@Controller('/hello-mvc')
export class HelloController {
  @Get()
  findAll(@Param() name): string {
    return `'hello' + ${name}`;
  }
}

위와 같이 작성을 하는데 합니다.
nodejs와 비슷하면서도 다른 부분을 볼 수 있는 시간이였습니다!

좋은 웹페이지 즐겨찾기