05장 MVC 모델 알아보기

박준우·2025년 7월 2일
0

Spring Boot

목록 보기
5/14

1. MVC 모델 알아보기

(1) MVC 모델이란?

프로그래밍을 Model, View, Controller 로 역할을 나눠 개발하는 방식이다.

모델

비지니스 로직의 핵심적 기능을 구현한다. 예를 들어 상품 검색, 장바구니 담기, 상품검색, 결제 드으이 기능이다.

사용자의 입력, 결과 출력 등 무언가를 표시하는 부분이며 화면을 담당한다.

컨트롤러

비지니스 로직과 뷰를 제어하는 역할을 한다.

정리

사용자가 뷰에게 명령을 내리면, 이를 뷰가 컨트롤러에게 전달하고, 모델과 뷰에게 지시한다.

2.Spring MVC 알아보기

Spring MVC는 프론트 컨트롤러 라는 디자인 패턴을 채택하였다.
모든 클라이언트의 요청을 하나의 컨트롤러가 먼저 수신한 뒤, 다른 컨트롤러에게 요청을 분배한다. 이런 가장 먼저 받는 컨트롤러를 Dispatcher Servlet이라고 부른다.

요청 수신에서 응답까지 흐름

  1. 뷰로 사용자가 요청
  2. Dispatcher Servlet 이 다른 컨트롤러의 요청 메소드(핸들러)를 호출
  3. 컨트롤러는 비지니스로직을 호출해 결과를 가져온다.
  4. 가져온 결과를 모델로 설정하고, 뷰 이름을 return한다.
  5. Dispatcher Servlet 이 return된 뷰에 대해 출력하라고 클라이언트에게 요청한다.
  6. 클라이언트는 뷰를 보여준다.

3.Spring MVC 사용해보기

0. 사전 프로그램 세팅

의존성 추가
1. Spring Boot DevTools
2. Thymeleaf(탬플릿 엔진)
HTML, XML등 다양한 View파일에 동적으로 값을 넣어주는 역할을 한다.
탬플릿 엔진은 데이터와 템플릿 파일을 합쳐서 최종적인 뷰를 생성해낸다.

  1. Spring Web(웹)
    HTTP 요청, 응답처리, 라우팅, 예외 처리 등을 에노테이션을 통해 자동으로 처리한다.

빌드 세팅
1. 설정-빌드도구-gradle-gradle jvm에서 java버전 변경하기.
2. 프로젝트 구조- 프로젝트설정-프로젝트SDK에서 java버전 변경하기.

1. 컨트롤러 만들기

@Controller
@RequestMapping("hello")
public class HelloViewController {

    @GetMapping("view")
    public String helloView(){
        return "hello";
    }
}

#### 해석
1. @Controller : 이 클래스를 컨트롤러로 선언한다. HTTP요청을 받아 로직을 
호출하고 응답을 반환하는 역할을 한다.
2. @RequestMapping("hello") : 컨트롤러와 URL을 매핑하기 위한 역할. 
안의 인자는 매핑할 URL의 경로이다. 
3. @GetMapping("view") : /hello/view URL로 들어오는 요청을 이 메소드가 처리한다고 선언한다. 

컨트롤러의 사용 법

  1. @RequestMapping :
    매핑이란? 어떤 URL이 어떤 메소드와 연결되는지 지정하는 것을 의미힌다.
    @RequestMapping은 지정한 URL이 이 컨트롤러 클래스와 매핑됨을 의미한다.
    value= URL, method = HTTP의 요청방식 지정가능
1. @RequestMapping("hello") // [value = 생략가능]
이 클래스 안의 모든 메소드는 hello로 시작하는 URL과 매핑된다.
2. @RequestMapping(value = {"hello", "hellospring"}) 
이 클래스 안의 모든 메소드는 hello,hellospring 로 시작하는 URL과 매핑된다.

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

4. @RequestMapping(value = "hello", method = {RequestMethod.GET,RequestMethod.POST}) 
  1. @GetMapping :
    특정 URL로 Get방식으로 요청이 왔을 때 어떤 메서드가 실행될지 지정해주는 에노테이션이다. 이 문장을 사용하여 @RequestMapping의 (method=RequestMethod.GET)을 생략해 더 짧게 코딩할 수 있다. (즉, 아래 두 문장은 완전히 같은 기능을 한다.)
@RequestMapping(value = "hello", method = RequestMethod.GET) 
@GetMapping(value = "hello") 

단, 예제의 경우, @RequestMapping("hello")를 클래스 외부에 적용해 주었음으로,
URL맨 앞에 hello를 기본적 설정 후, view를 Get방식으로 받아옴을 나타낸다.
즉, 클라이언트에서 GET메소드로 http://localhost8080/hello/view URL을 보내면, HelloViewController의 helloView 메소드가 호출된다.

일반적인 HTTP구조
http://[서버명]:[포트번호]/[애플리케이션명]/[기능 명] 
localhost= 내컴퓨터
포트번호 = 어떤 프로그램에 데이터를 보낼지 구분하는 구분자
  1. @PostMapping
    특정 URL로 Post방식으로 요청이 왔을 때 어떤 메서드가 실행될지 지정해주는 에노테이션이다. 이 문장을 사용하여 @RequestMapping의 (method=RequestMethod.POST)을 생략해 더 짧게 코딩할 수 있다. (즉, 아래 두 문장은 완전히 같은 기능을 한다.)
@RequestMapping(value = "hello", method = RequestMethod.GET) 
@PostMapping(value = "hello") 

2. 뷰 만들기

뷰(html)는 resources.template 패키지 안에서 구현한다. 만약, 보여줘야할 화면이 많을 때는 기능별로 하위 폴더를 만들고, 그 안에 각 뷰를 배치한다. 또한, CSS나 자바스크립트를 작성해야한다면, resources.static 패키지 안에서 구현하면 된다.

resources.template 패키지에 HTML 삽입하기

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

3.실행결과


컨트롤러가 뷰를 가져와 사용자에게 보여준다.

profile
DB가 좋아요

0개의 댓글