본문 바로가기
  • 실행력이 모든걸 결정한다
Spring Series/Spring Boot

[Spring Boot] MVC 패턴

by 김코더 김주역 2021. 7. 15.
반응형

1. MVC 패턴이란?

Spring을 이미 배웠다면 MVC 패턴이 무엇인지 알 것이다.

그래도 강의 글이기 때문에 한 번 더 짚고 넘어가고자 한다.

 

MVC는 각각 Model, View, Controller를 나타낸다.

사용자가 웹 애플리케이션을 이용하기 위해 URL 요청을 하면, 해당 요청은 Controller에 들어오게 된다.

Controller은 해당 요청을 담당하는 메소드로 안내하고, 요청에 포함된 정보를 가지고 Model에 접근할 수 있다.

Model은 데이터베이스같은 비즈니스 로직을 처리하는 일을 수행하고 Controller로 다시 돌아온다.

Controller의 처리가 끝났다면 그 결과를 사용자들이 화면을 통해 볼 수 있도록 View로 이동시켜준다.

 

 

 

2. MVC 패턴 적용

1) View 측

(1) Mustache Plugin 설치

이전 포스팅에서는 Template 엔진으로 Mustache를 사용하기로 했기 때문에 해당 Plugin을 설치해야 한다.

File -> Settings -> Plugins에 들어가서 Marketplace에서 Handlebars/Mustache를 설치하자.

참고로, Template 엔진은 View code와 Data logic code를 분리해서 사용할 수 있도록 하는 엔진이다.

 

(2) View 페이지 생성

resources는 기본적으로 URL 요청의 영향을 받지 않는 디렉토리다.

그 아래에 있는 templates 폴더에는 주로 View 페이지를, static 폴더에는 이미지나 css 파일 등을 저장한다.

templates 폴더 내에 test.mustache 파일을 생성해주고, html 코드를 입력했다.

일반 HTML 코드에서는 변수를 사용할 수 없지만, Template 엔진을 이용하면 10번째줄의 "{{username}}" 처럼 중괄호 2개를 감싸서 변수처럼 쓸 수 있다.

<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <h1>{{username}}</h1>
</body>
</html>

 

 

2) Controller, Model 측

(1) Controller 파일 생성

com.example.demo 내에 controller 패키지를 생성해두고, controller 파일들은 이 패키지 안에 저장하려고 한다.

꼭 패키지를 생성하지 않아도 되지만, 편리한 관리를 위해서는 패키지로 같은 부류의 파일들을 적절히 묶어줘야 한다.

 

controller 패키지 안에 HomeController.java라는 controller을 생성한 모습이다. 

 

(2) controller 파일 작성

package com.example.demo.controller;

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

@Controller
public class HomeController {

    @GetMapping("/home")
    public String home(Model model){
        model.addAttribute("username","김코더 김주역");
        return "test";
    }
}

컨트롤러 클래스임을 명시하기 위해 @Controller 어노테이션을 클래스 위에 작성했고, /home URL 요청을 받기 위해 @GetMapping 어노테이션을 메소드 위에 작성했다. @GetMapping 말고도 @RequestMapping을 사용하는 방법도 있다.

그리고 View 파일인 test.mustache에서 username이라는 변수를 사용하기로 했기 때문에 Model을 이용하여 속성을 부여했다.

메소드의 리턴값으로 "test"를 지정했는데, 이는 templates에서 test(test.mustache) 라는 이름의 View 파일을 찾아가라는 의미이다.

 

추가로 또 다른 URL 요청을 처리하고 싶다면, 새 메소드를 생성하고 그 위에 @GetMapping 또는 @RequestMapping 어노테이션을 작성하면 된다.

 

모두 작성했다면 저장하고 서버를 재시작하면 웹 애플리케이션을 이용할 수 있는 상태가 된다.

 

/home으로 접속을 성공했다.

 

 

 

3. SpringBootApplication

이 Spring Boot 프로젝트는 어디에서 실행이 되는 것일까? 바로 @SpringBootApplication 클래스이다.

이 파일은 새 프로젝트 빌드 시에 생성되며, main 함수가 존재한다.

main 함수 내에 SpringBootApplication이라는 정적 클래스를 어노테이션을 이용하여 불러오고, 그 내부의 run 메소드를 실행함으로써 웹 애플리케이션이 돌아가는 것이다.

 

 

 

+추가) mustache에서는 html코드의 특정 부분을 파일화 할 수 있다.

 

<test.mustache>

<html>
{{>layout/head}}
<body>
    {{>layout/nav}}
    <h1>{{username}}</h1>
    {{>layout/footer}}
</body>
</html>

 

파일화된 html 부분 코드를 불러오기 위해서는, 위와 같이 2개의 중괄호 안에 >(꺽쇠)와 templates 폴더 내의 파일 경로같이 작성해주면 된다.

반응형

댓글