일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- POST
- 계획은없음
- fork
- entity
- response
- 삽질잼
- javaserverpage
- Github
- JPA
- 프레임워크
- 개념정리중
- Spring
- 개념잡기
- 너무재미꼬
- upstream
- sagan
- MVC
- 공부
- 개선하기
- renderer
- 따라하기
- 스프링
- git
- 문제해결
- 공부하기
- data
- synchronizing
- Controller
- 홈페이지
- Request
- Today
- Total
메모장
MVC 개념 잡기[1/N] 본문
■ INTRO.
Spring Framework 공부를 하던중,
막연히 이해하고 있던 MVC 모델을 설명해보려고 했지만, 쉽지 않았다.
나 스스로 이해를 완벽하게 하지 못했다는 뜻이 아닐까 싶다.
누군가에게 설명할 수 있을 정도로 짚고 넘어가야하는 부분이라 생각했다.
■ MVC란?
펼쳐보면 Model View Controller의 약어이다.
이는 소프트웨어 디자인 패턴으로,
어플리케이션의 데이터와 그 정보를 사용자에게 보여주는 것을 분리한 것이다.
- 영문 위키를 찾아보면 Architecture Design 이라고도 하는데, Design pattern 보다는 상위 개념이라고 한다.
- 하지만 동시에 design pattern 이라는 표현을 하는 것을 보아 이게 맞다 저게 맞다의 문제는 아닌 것 같다.
+ 사진 첨부 필요
이를 통해서 데이터를 처리하는 비즈니스 로직이나 처리된 데이터를 보여주는 사용자 인터페이스를 구분하여 유지보수를 쉽게 하는 이점을 활용할 수 있다. 또한 코드 재사용 및 병렬적인 개발이 가능해진다.
즉, MVC 모델은 소프트웨어를 다음 3가지로 나누어 개발하는 것을 목표로 한다.
■ Model
MVC의 핵심 요소이다. 사용자 인터페이스와 독립적인, 어플리케이션의 동적인 자료 구조이다.
모델은 어플리케이션의 데이터, 로직, 규칙을 직접적으로 관리한다.
- 사전적 의미 : 객체, 시스템, 또는 개념에 대한 구조나 작업을 보여주기 위한 패턴, 계획, 또는 설명이다.
■ View
차트, 다이어그램, 표와 같은 정보의 표현 방법. 하나의 정보에 대해서도 다양한 view가 존재할 수 있다.
■ Controller
입력을 받아들이고, Model 혹은 View의 명령으로 변환한다.
- 영문 wiki 참조
■ Diagram
MVC를 검색하면, 정말 많은 다이어그램이 존재한다.
■ Summary
사용자의 입장에서 정리해보자면,
사용자는 View를 통해 소프트웨어에서 제공하는 정보를 확인할 수 있고,
Controller에게 어떠한 서비스 요청을 할 수 있으며,
이에 대해서, Controller는 Model에게 적절한 명령을 내린다.
Model에서는 서비스에 맞는 비즈니스 로직을 수행하고,
Controller는 다시 수정된 정보를 참조하도록 View에게 명령을 내린다.
개발자의 입장에서 정리하면,
데이터를 보여주고, 표현하는 사용자 인터페이스는 View,
사용자로부터 서비스 요청을 받는 Controller,
어플리케이션의 데이터와 사용자로부터 요청받은 서비스를 제공하기 위한 데이터 처리 등은 Model
3가지로 나누어 구현한다.
■ Pros. Cons.
MVC 패턴은 각 구성요소를 기능과 역할에 맞게 "분리"하는 것이다. 이를 통해 높은 응집도와 낮은 결합도의 소프트웨어를 개발할 수 있도록 한다. 또한 각 독립적인 요소들은 병렬적인 개발이 가능하도록 해주며, 유지보수 또한 쉽게 도와준다. 하지만 대부분의 디자인 패턴이 그러하듯, 이러한 이점은 "적절한 상황에서 잘" 사용할 경우 취할 수 있다.
3가지 구성요소로 "분리" 해야만 하는 부분에서 불편한 점이 발생하기도 한다. 크던 작던 새로운 기능을 도입하기 위해서는 3가지 요소로 분리해서 추가해야하고, 이에 대해서 상호간 일관된 표현 혹은 약속된 정의를 가지고 있어야 한다. 어플리케이션이 거대해질 경우, 각 요소간 관계가 얽히기도 하고, 복잡해질 수도 있다. 이건 MVC 패턴이 아니어도 발생할 수 있지 않나 싶다.
그리고 "사용자가 보는 것과, 사용하는 것"에 많은 상호작용이 있는 경향이 있다. 이로 인해 3가지 구성 요소 중 한 곳으로 기능이나 코드 밀도가 높아지는 현상이 발생되고, MVC 패턴의 장점 중 하나인 "코드의 분산"이 의미없어질 수도 있다.
■ Feedback
글이 날라갔다. 티스토리 버그인가? 같은 글에 대해서 여러 컴퓨터에서 접근해서 그런가? 데스크탑이랑 노트북에서 번갈아가면서 수정하긴 했는데, 그래도 임시저장을 잘하고 확인도 했는데,, 어쩐지 미리보기를 하는데 내가 수정한 것이 전혀 반영이 안되길래 뭐지 싶었는데, 포스팅을 하니, 수정한 것이 전혀 반영안되었다. 2문단 정도가 날아갔는데 ㅋㅋㅋㅋㅋ 의욕상실
다음부터 글 작성할때 너무 신중하게 생각하지말고 빠르게 포스팅해야겠다.
추가적으로, MVC 패턴이 단순하고, 많은 장점을 가지고 있지만, 동시에 다양한 문제 발생 가능성을 가지고 있다고 한다. 이에 대해서 파생된 디자인 패턴들에 대해서도 찾아볼 수 있었다. 공부해봐야할 것 같다. 공부할게 쌓여있다.
'공부 > Spring-Study' 카테고리의 다른 글
Spring Controller - Post Request & URL Response (0) | 2019.08.03 |
---|---|
Spring data JPA (0) | 2019.07.29 |
JSP 개념 잡기[1/N] (0) | 2019.07.24 |
Servlet 개념 잡기[1/N] (0) | 2019.07.23 |
스프링 개념 잡기[1/N] (0) | 2019.07.17 |