본문 바로가기
Back-end/Spring

[Spring] chapter05 MVC 모델 알아보기

by na1-4an 2023. 7. 22.

아래 글은 스프링 프레임 워크 첫걸음 책을 기반하여 작성한 글입니다.

 

5-1 MVC 모델 알아보기

(1) MVC 모델이란?

: 프로그램의 처리 역할을 나누어서 프로그램을 작성하는 방법!

전에 데이터 베이스 살짝 공부했을 때 들어본 기억이 난다..!!

1️⃣ 모델(Model: M)

: 비지니스 로직의 내용을 작성하는 역할

2️⃣ 뷰(View: V)

: 입력/출력 등을 표시하는 역할

3️⃣ 컨트롤러(Controller: C)

: 모델과 뷰를 제어하는 역할

(2) MVC 모델의 개요와 이점

MVC 모델의 개요

  1. 역할 분담을 통해 효율적인 개발 가능
  2. 개발하는 엔지니어의 분업화가 용이
  3. 설계 변경에 유연하게 대응 가능

5-2 스프링 MVC 알아보기

(1) 스프링 MVC란?

: 웹 애플리케이션을 간단하게 만들 수 있는 기능을 제공하는 프레임워크

- 스프링 MVC의 구성 요소:

Controller, View, Model     +       DispatcherServlet, 서비스 처리

 

- DispatcherServlet: 클라이언트로부터 모든 요청을 받는 프런트 컨트롤러

- 서비스 처리: 데이터베이스에 접속해 데이터를 취득, 가공 등 실행한다. 개발자가 설계하고 구현.

(1) 요청을 받고 응답을 보낼 때까지의 흐름

요청을 받고 응답을 보낼 때까지의 흐름

① DispatcherServlet이 클라이언트로부터 요청을 받는다.

② DispatcherServlet가 요청받은 핸들러 메서드를 호출한다.(컨트롤러를 통해)

③ 컨트롤러는 비지니스 로직 처리를 호출하고 처리결과를 받는다.

④ 처리 결과를 모델로 설정하고 뷰 이름을 반환한다.

⑤ 반환된 뷰 이름을 받아 DispatcherServlet이 뷰 이름에 대응하는 뷰에 대해 화면 표시 처리를 의뢰한다.

⑥ 클라이언트가 응답을 받고 브라우저에 화면이 표시된다.


5-3 스프링 MVC 사용해보기

(1) 스프링 MVC 프로그램 만들기

01 프로젝트 생성

 

02 컨트롤러 생성

// HelloViewController 클래스
package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller     
@RequestMapping
public class HelloViewController {
    @GetMapping("view")
    public String helloView(){
        //반환값으로 뷰의 이름을 돌려줌
        return "hello";
    }
}

@Controller: 애플리케이션 레이어의 컨트롤러 부여.

@RequestMapping: 클래스나 메서드에 부여. 요청 핸들러 메서드와 URL을 매핑하는 역할. 속성은 value와 method.

          ex. @RequestMapping(value = "hello", method = RequestMethod.GET)

@GetMapping: @RequestMapping의 GET 요청용 어노테이션. 속성은 value

          ex. @GetMapping("hello")

@PostMapping: @PostMapping의 POST 요청용 어노테이션. 속성은 value

          ex. @PostMapping(value = {"hello", "hellospring"})

 

03 URL 매핑

HelloViewController 클래스는

클래스에 @RequestMapping("hello") 어노테이션을 부여하고,

요청 해들러 메서드에 @GetMapping("view") 어노테이션을 부여했다.

따라서, 클라이언트가 URL(http://localhost:8000/hello/view)로 GET 메서드를 보내면 HelloViewController 클래스의 helloView 메서드가 호출된다.

 

04 뷰 생성

템플릿 엔진을 사용하는 경우 '뷰'를 두는 곳이 지정되어, 아래와 같은 규칙을 지켜야한다.

  • resource/templates 폴더 밑에 뷰를 생성한다.
  • 뷰가 많이 필요한 경우에는기능별로 폴더를 만들어서 보관한다.
  • 폴더를 나눈 경우는 templates 폴더 이하의 폴더명을 요청 핸들러 메서드의 반환값에 지정해야한다.
  • CSS나 javascript 등은 resources/static 폴더에 배치한다.
<!-- src/main/resources/templates/hello.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>View Sample</title>
</head>
<body>
    <h1>Hello View!!!</h1>
</body>
</html>

 

05 실행과 확인

실행 후 톰캣 서버를 정상적으로 기동했다는 메시지를 확인할 수 있다.

그러면 http://localhost:8000/hello/view에 접속했을 때 작성한 html 파일이 열려야하는데 열리지 않았다,,

두가지 실수를 했다,,!

하나는 포트 번호를 8080으로 들어가야하는데 8000으로 했고..^^

다른 하나는 HelloViweController 클래스에 @RequestMapping에 value값을 안 주었다..ㅎㅎ

접속 URL을 http://localhost:8080/hello/view로,

코드를 아래와 같이 고쳤더니 원하는 결과가 나왔당 ㅎ~ㅎ

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("hello")
public class HelloViewController {
    @GetMapping("view")
    public String helloView(){
        //반환값으로 뷰의 이름을 돌려줌
        return "hello";
    }
}

실행 결과