[Spring] MVC 패턴이란?

2022. 8. 4. 22:40Web/Spring

스프링을 사용하면서 웹 개발을 진행할 때 MVC 패턴을 사용한다. 

MVC 패턴 이전의 개발에서는 하나의 서블릿 혹은 JSP만으로 모든 요청과 처리를 진행하였다. 그러한 상황에서는 유지보수 및 어떤 부분을 수정하는 상황에서 하나의 비즈니스 로직 /  HTML /  UI 수정 어느 부분을 수정하든 전체를 수정해야 하는 일이 발생하였고, 이런 상황에서 등장한 것이 바로 MVC 패턴이다. 지금부터 기록할 것은 바로 이 현재 사용되고 있는 스프링 MVC에 대해 기록하려 한다.

 

MVC란?

먼저 MVC에 대해 알아보자. 정확히 무엇을, 어떠한 형태를 MVC 패턴이라고 하는가? 

기본 MVC - 2 패턴

바로 이러한 형태를 MVC 패턴이라고 한다. 이러한  MVC 패턴은 3가지 구조로 이루어져서 클라이언트에게 제공이 된다.

 

각각의 부분들은 Model / View / Controller로 나눠지며 하나의 웹 애플리케이션을 이룬다. 

Controller

Controller는 HTTP 요청이 들어오면 그 요청에 맞게 각 비즈니스 로직을 실행하는 과정이다. 서비스, 즉 비즈니스 로직이 따로 controller 내부에 존재하는 것은 보안 상의 이유로 아니며, 각 요청에 맞게 비즈니스 로직을 실행하며 그에 맞춰서 repository에서 데이터 타입을 받아오기도 한다. 이때 Controller에서는 받아온 데이터를 그냥 view에 넘기는 것이 아닌 Model의 객체에 담아서 View에 전달한다. 

위에서는 설명이 안되어있지만 초기 mvc-1에서는 컨트롤러 상에 비즈니스 로직이 같이 포함됐었다. 그러나 비즈니스 로직이 컨트롤러 안에 존재할 시 코드의 가독성으로 인한 유지보수 문제와 혹여 해커가 컨트롤러에 접근하는 순간 비즈니스 로직까지 한 번에 접근이 가능하다는 보안상의 이유로 해당 mvc-1에서 mvc-2로 발전이 되었다.

 

mvc -1

 

Model

View가 출력할 데이터를 담아둔다. view가 필요한 데이터를 요청에 맞춰 controller가 모델에 담아주고 view는 이에 따라 비즈니스 로직이나 데이터의 접근을 상관하지 않고 화면에 표시하는 일에 집중할 수 있다.

 

또한 HashMap의 형태로 키(Key)와 벨류(value)의 형태로 값을 저장한다.

@GetMapping
public String members(Model model) {
    List<Member> members = memberRepository.findAll();

    model.addAttribute("members", members);
    return "members";

}

해당 코드는 mvc 강의 영상 중 한 부분이다. 예제에서는 Model을 매개변수로 선언 후 그 변수를 사용한다. 그리고 받아온 데이터를 addAttribute를 통해 view로 보내준다. return은 "members"의 이름을 가진 jsp를 반환한다.

 

 

View

 

모델에 담아져 있는 데이터를 화면에 렌더링, 표현해주는 역할을 한다. 기존에 비즈니스 로직, 뷰로직으로 나눠져 있던 과거에는 렌더링 하는 과정에서도 비즈니스 로직과 데이터를 신경 써야 했지만 이제는 model이 데이터를 받아와 참조를 시켜주기에 front 요소로 표현을 해주기만 하면 된다. 흔히 백엔드에서 간단하게 작동하는지만 알아보기 위해 jsp 혹은 Thymlelaf를 사용한다. 

Thymeleaf - View Template 엔진이며, 웹을 염두해두고 설계됐다.

- 순수한 HTML 구조를 유지한다. 그렇기에 HTML 템플릿을 만들 때 적합하며 자바스크립트 및 CSS에 적합한 템플릿도 설계가 가능하다고 한다.

- 비즈니스 로직과 구분이 되어 view에 집중 가능하다.
Jsp - java server page

- 서블릿이라는 형태로 반환되어 동작이 된다. java 코드 기반이기에 java 코드 사용이 가능하다.

- 내부에서 java 코드 삽입으로 인한 비즈니스 로직이 사용가능 하지만 지양하는 편이다.

-  jar 패키징 불가 및 war 패키징만 사용가능하다.