Woopii Vyeolog

MVC 모델 본문

Spring Framework

MVC 모델

WooPii 2020. 2. 10. 10:00

MVC모델이란 모델-뷰-컨트롤러(Model–View–Controller, MVC)를 말하여 MVC모델은 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다.

 

사용자 인터페이스로부터 비즈니스 로직을 분리하여 

애플리케이션의 시각적 요소(view)나 그 이면에서 실행되는 비즈니스 로직(Service, Repository)을 

서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. 

 

즉 Front-end 와 Back-end에 서로 영향을 미치지 않고 개발하는 것이다. 

 

MVC에서 

Model은 애플리케이션의 정보(데이터)를 나타내며, 

View는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 

Controller데이터와 비즈니스 로직 사이의 상호동작을 관리한다.

그리고

Service는 DB수행을 요청하고 로직을 수행하여 원하는 출력을 보내준다. 

RepositoryDB를 다룬다. 

 

각 영역은 서로의 영역에 간섭하지 않는다.

 

이러한 개발을 3계층 구조(3 Tier) 방식의 개발이라고 하는데 이를 유용하게 구현 할 수 있는게 MVC모델이고 그리고 이러한 MVC모델의 구현을 효과적으로 할 수 있는 도구가 스프링 프레임워크이다.

 

3계층 구조(출처 : http://blog.naver.com/PostView.nhn?blogId=limoremo&logNo=220073573980)

 

 

 

조금 더 직관적으로 설명하자면, 

 

 


큰 프로그램은 혼자 개발 할 수 없다, 즉 분업이 필요한데,  모든 코드가 한 곳에 들어간 형태로는 분업이 어렵다

그래서 MVC모델로 구현하게 된다. 이 부분은 스프링 프레임워크에서 유용하게 사용할 수 있는 부분이다.

웹쪽에서 요청이 오면 그 요청은 콘트롤러(Controller)에 간다. 

콘트롤러(Controller)는 전체를 제어하는 역할을 하며 웹 입력을 받아서 서비스(Service)에 넘겨주고, 서비스(Service)에서 처리한 결과를 받아서 뷰(View)로 보내준다.

컨트롤러(Controller)는 서비스(Service)와 뷰(View)사이에서 제어하는 역할을 하는 것이다.

컨트롤러(Controller)와 서비스(Service)는 ServiceIO(DTO)를 통해 데이터를 주고 받는다.

서비스(Service)가 주요한 로직들을 처리하고, 화면이 원하는 ServiceIO(DTO)의 형태로 넘겨준다.  그리고 서비스는DB와 연동하는 레파지토리(Repository)를 호출해서  RepositoryIO(Domain)로 데이터를 받아온다.

레파지토리(Repository)는 DB를 처리하는 역할을 한다.  CRUD 처리한다.

레파지토리(Repository)의 구현에는 JDBC Template, Hibernate, Mybatis등 편리하게 사용할 수 있는 도구가 있다. 

나머지 영역은 DB에 관여하지 않는다.

정리하면, 웹에서의 요청을 컨트롤러에서 받아서 이를 서비스에 요청을 하고 서비스는 레파지토리에 DB 요청을 하고 레파지토리는 DB요청을 받아서 처리하고 서비스에서 로직처리를 하고 컨트롤러에서 넘겨주고 컨트롤러는 그 데이터를 뷰에 넘겨준다.

뷰에서는 jstl등의 방법으로 화면에 표시한다.

 

 

 

 

 

request에서부터 response까지의 흐름 

 

MVC모델 (http://terasolunaorg.github.io/guideline/1.0.1.RELEASE/en/Overview/SpringMVCOverview.html#id2)

 

1. request : 브라우저에서 서버에 요청이 들어오면 우선 Filter를 거쳐 요청을 하게 된다 .

                 (예를 들면 encoding같은 작업이 있을 수 있다.)

 

2. DispatcherServlet이 Controller에 요청을 전달하기 전에 controller의 어느 function으로 갈지 Mapping을 한다.

해당 function을 찾아 DispatcherServlet에 전달한다.

 

3, DispatcherServlet은 실행할 Controller정보를 HandlerAdapter에 전달한다.

 

4. HandlerAdapter는 해당 Controller를 호출한다.

 

5. Controller에서 전달된 요청을 처리하고 그 결과를 model에 담고(Set), return 값으로 지정된 view 이름을 HandlerAdapter에 전달한다.

 

*****servlet-context에서 전체 경로가 만들어진다. (prefix, suffix)(internalresourceviewresolver를 사용중임)****

 

6. 5번 내용을 갖고 ViewResolve가 매핑된 View를 찾아서 반환한다 (prefix, suffix 붙여서 view를 찾아줌)

 

**view는 model에 있는 내용을 가져 올 수 있다.

 

7. DispatcherServlet은 반환된 View를 넘겨주게 된다.

 

8. 요청받은 정적페이지, json, xml 등의 데이터 리소스를 보내줌(response)

 

 

 

 

출처 : https://all-record.tistory.com/164

Comments