본문 바로가기
Web Develop/Book Study

[Book Study] 스프링 프레임워크 첫걸음 - 5. MVC 모델 알아보기

by tripleup 2023. 8. 11.
728x90
반응형

[Book Study] Spring Framework 스프링 프레임워크 첫걸음
5. MVC 모델 알아보기


5 - 1 MVC 모델 알아보기

MVC 모델

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

1. 모델 (Model) : 시스템에서 제공하는 비즈니스 로직의 처리 내용을 작성하는 곳

2. 뷰 (View) : 외형, 사용자 입력과 결과 출력 등 시스템에서 표현 부분을 담당하며 웹 애플리케이션에서는 주로 화면을 담당

3. 컨트롤러 (Controller) : 서비스 처리를 담당하는 모델과 화면 표시를 담당하는 뷰를 제어하는 역할

 

사용자가 입력한 내용을 뷰에서 받고, 받은 데이터를 기준으로 모델에 내용을 전달

 

MVC 모델의 개요와 이점

1. 역할 분담을 통해 효율적인 개발 가능

2. 개발하는 엔지니어의 분업화가 용이

3. 설계 변경에 유연하게 대응 가능


5 - 2 스프링 MVC 알아보기

스프링 MVC

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

 

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

1. 모든 요청을 수신하는 프런트 컨트롤러인 DispatcherServlet이 클라이언트로부터 요청을 수신

2. DispatcherServlet이 컨트롤러의 요청 핸들러 메서드를 호출

3. 컨트롤러는 비즈니스 로직 처리를 호출하고 처리 결과를 받아 처리 결과를 모델로 설정하고, 뷰 이름을 반환

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

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


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


* 타임리프 : 데이터와 미리 정의한 템플릿을 바인딩(묶어주는)해서 뷰에 표시할 떄 도움을 주는 템플릿 엔진

 

컨트롤러 생성 (HelloViewController.class)

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";
    }
}

 

클라이언트가 URL (http://localhost:8080/hello/view) 로 GET 메서드를 보내면 HelloViewController 클래스의 helloView 메서드가 호출됨

 

 

@Controller

- 클라이언트와 데이터 입출력을 제어하는 애플리케이션 레이어의 컨트롤러를 부여

- 요청 핸들러 메서드의 반환값을 뷰 이름으로 하여 템플릿 엔진의 뷰가 응답 HTML을 생성

 

@RequestMapping

- 컨트롤러의 요청 핸들러 메서드와 URL을 매핑

 

속성1) value

- 매핑할 URL경로(path)를 지정

- value는 처음의 /를 생략할 수 있음

- URL 경로만 지정하는 경우에는 속성에서 value를 생략할 수 있음

- URL 경로를 여러 개 지정할 수 있음

 

//value 속성의 예

//value 속성에 처리 대상의 URL 경로를 매핑
@RequestMapping(value="hello")

//value 속성만 지정하는 경우 생략 가능
@RequestMapping("hello")

//URL 경로를 여러 개 지정 가능
@RequestMapping(value = {"hello", "hellospring")

 

속성2) method

- GET과 POST등의 HTTP 메서드를 지정

- GET을 지정하는 경우네는 RequestMethod.GET을 사용

- POST를 사용하는 경우에는 RequestMethod.POST를 사용

- HTTP 메서드를 여러 개 지정 가능

- 클래스에 @RequestMapping을 부여하는 경우에는 지정할 수 없음

 

// method에서 HTTP 메서드 'GET'을 지정
@RequestMapping(value = "hello", method = RequestMethod.GET)

//메서드를 여러 개 지정할 수 있음
@RequestMapping(value = "hello", method = {RequestMethod.GET, RequestMethos.POST})

 

@GetMapping

- @RequestMapping의 GET 요청용 어노테이션

- value 속성은 같지만 method 속성은 없음

 

// value속성만이라면 생략 가능
@GetMapping("hello")

//URL을 여러 개 지정할 수 있음
@GetMapping(value = {"hello", "hellospring"})

 

@PosttMapping

- @RequestMapping의 POST 요청용 어노테이션

- value 속성은 같지만 method 속성은 없음

 

// value속성만이라면 생략 가능
@PostMapping("hello")

//URL을 여러 개 지정할 수 있음
@PostMapping(value = {"hello", "hellospring"})

 

뷰 생성

 

스프링 부트에서는 템플릿 엔진을 사용하는 경우 '뷰'를 두는 곳이 지정되어 있기 때문에 규칙을 지켜야 함

1. resources/templates폴더 및에 뷰를 생성

2. 뷰가 많이 필요한 경우에는 기능별로 폴더를 만들어서 보관

3. 폴더를 나눈 경우는 templates 폴더 이하의 폴더명을 요청 핸들러 메서드의 반환ㄱ밧에 지정

4. CSS나 자바스크립트 등은 resuorces/static 폴더에 배치

 

 

//hello.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>View Sample</title>
</head>
<body>
    <h1>Hello View!!!</h1>
</body>
</html>


728x90
반응형

댓글