Framework/Spring, Spring Boot

[Spring] MVC 아키텍처

생각많은 프로그래머 2024. 2. 25. 23:13

스프링의 기본 흐름

 

MVC 패턴 정리 (Model 2 방식)

 

웹 애플리케이션을 작성하기 위해서는 아래 두 가지 로직을 구현해야 한다.

- 비즈니스 로직 : 실제 업무를 처리하는 부분, 데이터베이스와 연동하여 데이터를 얻어오는 작업
- 프리젠테이션 로직 : 화면을 처리하기 위한 부분, 비즈니스 로직의 결과를 HTML 형태로 클라이언트에게 보여줌

 

MVC 기반으로 쉽게 웹 애플리케이션을 개발할 수 있도록 해주는

프레임워크로는 스트럿츠와 스프링이 있다. 

MVC 패턴은 각 컴포넌트의 재사용성과 코드의 가독성을 높이려는 기법이다.

클라이언트의 요청 처리와 응답 처리, 비즈니스 로직을 처리하는 부분을

모듈화시킨 구조로서 처리 작업의 분리로 인해 유지보수와 확장이 용이하고

개발자와 디자이너의 역할과 책임 구분이 명확해진다.

하지만 MVC 구조에 대한 이해가 필요하며 개발자의

높은 스킬이 요구된다는 것이 단점이다.

 

MVC 패턴은 모델(Model), 뷰(View), 컨트롤(Control)의 세 영역으로 나누고

이들의 결합도를 최소화하는 것을 모토로 한다.

 

모델 : 실제 업무를 처리하는 비즈니스 로직에만 집중한다.

주로 데이터베이스와 연동하는 비즈니스 로직을 통해

얻어온 데이터를 저장하는 용도로 사용한다.

 

: 화면을 처리하는 부분에만 집중한다. 사용자와의 인터페이스로 주로 jsp페이지를 사용한다.

(모델이 넘겨준 jsp파일을 html문서로 랜더링해서 화면에 보여준다.)

 

컨트롤 : 모델과 뷰 간의 흐름을 제어하는 역할을 수행한다.

클라이언트의 요청을 수행하기 위해서 모델 영역의 어떤 비즈니스 로직을

수행할지를 결정한다. 이를 처리한 후에 결과를 보여주기 위한 뷰를 선택한다.

주로 서블릿을 사용한다.

 

 

컨트롤러의 역할

 

백엔드 웹 애플리케이션의 역할은

클라이언트가 보내는 HTTP 요청을 받아

처리한 후 HTTP 응답을 주는 것이다.

 

HTTP 요청은 크게 두 가지로 나눌 수 있는데,

1. 사용자가 눈으로 보게 될 HTML문서를 요청하거나,

2. HTML 문서가 아닌 필요한 데이터만 요청하는 경우도 있다.

 

이러한 클라이언트 요청 처리를 담당하는 곳이

컨트롤러(Controller)이다.

 

컨트롤러는 사용자가 보낸 HTTP 요청을 

받아 애플리케이션의 적절한 기능을 호출하고,

그 결과를 받아와 HTML문서나 JSON이라는

데이터 형식으로 변환하여 사용자에게 응답 시 제공한다.

 

MVC 구조에서는 서블릿(Servlet)이 컨트롤러의 역할을 담당한다.

컨트롤러는 비즈니스 로직(데이터를 어떻게 처리하느냐)을

결정하는 역할을 담당한다. 컨트롤러는 요청이 들어오면

이를 처음 받아서 요청에 맞는 모델을 선택한다.

(모델마다 서로 역할에 맞는 비즈니스 로직이 구현되어 있기 때문이다.)

 

모델에는 DAO클래스에 정의된 메소드가 호출되어 데이터베이스를 처리하여

그 결과를 얻게 된다. 이렇게 얻어온 결과가 어떤 뷰에 보내져서 처리될 것인지를

컨트롤러가 결정한다. (비즈니스 로직은 모델에서 처리하므로 서블릿은 모델이

내부적으로 어떻게 비즈니스 로직을 처리하는지 알 필요가 없다.)

 

웹 브라우저의 요청에 맞는 모델을 사용하여 요청한 기능을 수행하고

그 결과를 뷰인 jsp에 전달해주기만 한다. 요청 처리 결과는

request나 session 기본 객체에 저장되어 뷰 역할을 하는

jsp 페이지로 전달된다.

 

이러한 컨트롤러의 역할은 다음과 같이 세분화 할 수 있다.

 

1) client의 요청(request)을 받아서 어떤 기능을 요청했는지 분석한다.

2) 분석된 요구사항을 바탕으로 필요한 비즈니스 로직을 처리하는 model을 호출한다.

3) model로부터 전달받은 결과물을 알맞게 가공한 후 request나 session 기본 객체의

setAttribute 메소드를 사용하여 결과값을 속성에 저장한다.

(이렇게 저장된 결과값은 view인 jsp에서 사용함)

4) 웹 브라우저에 처리 결과를 보여주기 위한 jsp를 선택한 후 해당 jsp를 포워딩한다.

 

뷰의 역할

 

MVC2 구조에서 뷰(요청한 결과를 보여주는 프레젠테이션)의 역할은 JSP로 구현한다. 

MVC패턴에서 뷰의 역할을 하는 JSP는 비즈니스 로직과 관련된 코드가 없다는 점을

제외하고 일반 JSP 페이지와 거의 동일하다.

다만 컨트롤러인 서블릿에서 request나 session 기본 객체에 저장한 데이터를

사용해서 알맞은 결과를 출력해 준다는 점이 특징이다.

 

 

모델의 역할

 

모델은 웹 브라우저의 요청에 따라 필요한 기능을 처리한다.

요청이 일어나면 이를 컨트롤러인 서블릿이 분석하여

어떤 기능이 동작해야 하는지 거기에 맞는 비즈니스 로직을

수행하는데 이러한 작업을 하는 것이 모델이다.

모델은 컨트롤러가 요청한 작업을 처리한 후 알맞은 결과를

컨트롤러에게 전달해준다.

 

이러한 모델의 역할은 다음과 같이 세분화 할 수 있다.

 

1) 컨트롤러로부터 요청을 받는다.

2) 비즈니스 로직을 수행한다.

3) 수행 결과는 컨트롤러를 거쳐 뷰에 전달된다.

 

 

비즈니스 로직이란?

 

회원가입을 예로 들면 회원가입을 위한 입력 폼이 뷰에 해당되고

입력 받은 회원 정보를 얻어 와서 데이터베이스에 추가하기 위해서

데이터를 처리하는 과정이 비즈니스 로직이다.

게시글을 예로 들면, 원하는 게시글을 읽으려면 컨트롤러에게

게시글을 보여 달라고 요청하고 이 요청을 하면서 게시글 번호를

모델에게 전달해 주면 이 게시글 번호로 데이터베이스에 저장된

게시글 중 번호에 해당되는 게시글 하나의 정보를 얻어온다.

이렇게 얻어온 게시글 정보(결과)는 컨트롤러를 통해 뷰에게 전달된다.

 

 

게시판 기능을 Model 1 방식으로 개발한다면?

 

개발 방식이 쉽기 때문에 개발비를 절약할 수 있다.

하지만 비즈니스 로직과 프레젠테이션 영역이 뒤섞여 있다 보니

리뉴얼 작업이 필요할 경우 유지보수 작업이 번거로워진다.

또한 개발자와 디자이너가 협업하는 데 있어 혼란을 초래할 수 있다.

프로젝트의 규모가 커질수록, 유지보스가 필요할수록 MVC2 방식으로

작성해 놓아야만 전체 개발 비용이 절약될 수 있다.

초기 개발비보다는 유지보수 비용이 더 높게 산정되기 때문이다.