본문 바로가기
📍 Back-End/🜸 Spring

[Spring Boot] Spring Web MVC

by 예리Yelee 2021. 6. 18.
반응형

스프링 부트를 이용하여 MVC 패턴의 웹을 구축해보려 한다.

 

What's MVC?

Model

View

Controller

 

모델 - 뷰 - 컨트롤러의 약자로

Model은 데이터를 주고받는 통로 역할을

View는 실제 유저의 눈에 보이는 페이지를

Controller는 유저의 요청을 받고 응답을 담당한다

 

조금 더 얕지만 깊이 들어가 보자면

사용자가 특정 URL을 통해 데이터를 요청(request)하면 Controller는 이에 View를 응답(Response)하는데

이때, 컨트롤러는 사용자가 요청하는 데이터를 Model에 의뢰하고 가져온다.

 

패키지 및 클래스 생성

test라는 패키지 아래 controller, model, service 클래스를 생성했다

 

Model

모델에는 DTO/DAO/VO 등등이 있는데

일단 이번 예제에서는 DTO(=VO?) 개념의 Model 클래스를 하나 생성하고

로직을 처리하는 서비스 클래스를 만들 예정이다

 

DTO는 쉽게 말해 냉장고 같은 곳이라 이해하면 된다

재료를 담아두고 필요할 때 꺼내는 냉장고,,,ㅎ(는 나만의 이해 방식)

 

스프링 부트의 장점!

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class TestModel {

  private String name = "예리";
  private String sex = "여자";

}

 

Getter/Setter 어노테이션을 통해 간단히 getter와 setter를 생성할 수 있다

아직 데이터 베이스가 연결되어있지 않으므로 직접 하드 코딩을 하여 

이름과 성별 데이터를 입력하였다

 

Service Class

서비스는 컨트롤러가 데이터를 의뢰하고 가져올 때 필요한 로직을 처리하는 곳이다

컨트롤러는 "제 이름은 예리입니다 성별은 여자입니다"라는 데이터를 View에 출력하고 싶지만

저장된 데이터는 오직 "예리"와 "여자" 뿐이다.

 

이를 문장으로 만들어주기 위해 로직을 생성해야 되고 

그러한 부분을 담당하는 곳이 Service 클래스의 역할이다

import org.springframework.stereotype.Service;

@Service
public class TestService {

  public String testService(TestModel model) {
    String name = model.getName();
    String sex = model.getSex();

    return "제 이름은 " + name + "입니다" + " 성별은 " + sex + "입니다";
  }

}

 

Controller 

앞서 사용자가 접근한 URL에 따라 컨트롤러는 요청받은 데이터를 view에 반영하여 사용자에게 알려주는 역할을 한다고 설명했다.

결과를 출력하기 위해 user.html 파일을 생성해두었고

아래는 ModelAndView 객체를 통해 내가 전달하고자 하는 데이터를 result 변수에 담아 user.html로 이동하는 코드이다.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class TestController {

  @Autowired
  private TestService testService;

  @GetMapping(value = "/")
  public ModelAndView dashboard(TestModel model) {
    ModelAndView modelAndView = new ModelAndView();

    modelAndView.addObject("result", testService.testService(model));
    modelAndView.setViewName("user");

    return modelAndView;
  }

}

 

View

회사에 입사하기 전에는 jsp를 이용하여 객체를 출력하는 방식만 알고 있었는데 

입사 후 타임리프를 알게 되면서 이번 예제에서는 간단하게 타임리프를 통해 

controller에서 보내는 result 변수를 출력해보기로 했다

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

 

결과 

아주 큰 페이지 창에 하-얀 여백과 함께 결과가 잘 뜨는 것을 확인할 수 있다

 

반응형

댓글