spring의 MVC?

buffet_psi·2023년 3월 30일
0

sprint_basic

목록 보기
4/6

Spring Framework는 Model-View-Controller(MVC) 아키텍처 패턴을 따릅니다.

M(Model)

Spring MVC에서 Model 객체는 뷰에 데이터를 전달하는 데 사용됩니다. 컨트롤러는 Model 객체에 데이터를 추가하여, 이 데이터를 View에서 사용할 수 있도록 합니다. Model 객체는 일반적으로 Map 인터페이스를 구현합니다. 따라서 Model 객체에 데이터를 추가하기 위해서는 Map 인터페이스의 메서드를 사용할 수 있습니다.

V(view)

사용자에게 보여지는 화면을 담당합니다. HTML, CSS, JavaScript 등의 프론트엔드 기술을 사용하여 사용자와 상호작용하며, 화면을 구성합니다. M의 설명에서 HTML파일이 대표적인 예시입니다.

C(Controller)

Model과 View 간의 연결고리 역할을 합니다. 사용자 요청을 받아 해당 요청을 처리하는 로직을 작성하고, Model의 데이터를 View에 전달합니다.위에서도 사용자의 요청이 들어오니 해당 요청을 처리하는건 컨트롤러가 한다. 일반적으로 @Controller 어노테이션으로 지정함

어떻게 데이터를 전달하나??
1. Model 객체는 컨트롤러 메서드의 파라미터로 선언되면, 자동으로 생성된다.
2. 컨트롤러 메서드가 실행될 때, Spring MVC는 Model 객체를 생성하고 이를 메서드 파라미터로 전달한다.
3. 이후 컨트롤러 메서드에서 Model 객체에 데이터를 추가하면, Spring MVC는 이 데이터를 뷰에서 사용할 수 있도록 전달합니다.

예시 상황) Controller 클래스가 있고 html 파일은 hello.html이라고 설정한 상황이다.

//컨트롤러는 주로 컨트롤러 class를 따로 만들어서 적어놓음
@Controller
public class HelloController {
	@GetMapping("hello")
    public String hello(Model model) {
    	model.addAttribute("data", "hello!!");
        return "hello";
 }
//아래에 html파일은 resource > templates에 뒀다고 가정한다
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요! ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>
  1. User가 localhost:8080/hello라는 요청을 한다
  2. 스프링은 요청된 url과 일치하는 주소로 GetMapping 해준다
  3. 요청된 hello라는 녀석은 model 객체에 담아서 “hello”를 리턴해준다
  4. 이때 리턴된 hello라는 녀석은 정적인 페이지를 요청해 주는데 그때 body 태그에 있는 타임리프 문법으로 ${data}가 있는 곳에 hello! 문자열을 넘겨준 뒤 리턴해준다.

풀어서 쓴 거: hello라는 url을 매핑해줄게 근데 출력 결과는 return “hello”라는 html이야 이때 hello html에는 th(타임리프) 문법으로 안녕하세요 텍스트를 출력하는데 뒤에 데이터 값이 하나 있어!
그리고 그 데이터 값은 네가 String hello라는 메서드에서 정의한 data->”hello”라는 값을 넣어서 출력해 줄게! 라는 의미이다.

근데 어떻게 html 리턴해준 는 hello를 html 파일인 줄 알고 리턴할까? viewResolve가 컨트롤러의 리턴 값을 찾아서 처리함(즉 viewResolve가 컨트롤러가 리턴하는 값이 html 인지 아닌지 판별해 줌)

스프링에서는 왜 mvc아키텍쳐 패턴을 따를까?
1. 유지보수성이 좋다.
MVC 패턴은 역할이 분리되어 있어, 코드의 가독성과 유지보수성이 높아집니다. Model은 비즈니스 로직과 데이터 처리에 집중하며, View는 화면 처리에 집중합니다. Controller는 Model과 View를 연결하여, 요청에 따라 적절한 로직을 처리합니다. 이렇게 역할이 분리되어 있어, 코드를 수정하거나 유지보수할 때 다른 영역에 영향을 미치지 않아서 안전하고 쉬운 작업이 가능해집니다.

  1. 재사용성이 높아집니다.
    MVC 패턴을 사용하면 코드의 재사용성이 높아집니다. Model은 비즈니스 로직과 데이터 처리에만 집중하기 때문에, 이를 재사용할 수 있습니다. 또한 View 역시 재사용이 가능합니다. 예를 들어, 동일한 모델과 컨트롤러를 사용하여 다른 뷰를 만들 수 있습니다.

  2. 테스트하기 쉬워집니다.
    MVC 패턴을 따르면 테스트하기 쉬워집니다. Model과 Controller는 서로 독립적으로 테스트할 수 있습니다. 또한 View는 뷰 템플릿 엔진을 통해 생성되므로, 이를 테스트하기 쉽게 만들 수 있습니다. (나중에 Juit을 통해 하는데 따로 포스팅해보겠다)

따라서 Spring Framework에서 MVC 아키텍처 패턴을 따르는 이유는, 코드의 유지보수와 확장성, 재사용성, 테스트 용이성을 높이기 위함입니다.

profile
노력과효율!

0개의 댓글