소프트웨어 공학에서  Design Pattern(설계패턴)이란 용어는
근/현대에서 각종 소프트웨어/시스템을 구축하면서 직면했던 대표적인 주요 문제점들의 해결책에 대한 설계방법들을 유형별로 정리해 둔것이라고 말할수있습니다.


1) Design Pattern이란?
소프트웨어 개발의 주요목적,즉 현실세계의 다양한 문제점들을 해결 하기 위한 수단으로서 각종 S/W 개발작업을 진행할 때 직면하는 크고 작은 문제들 중에서 대표적이고 유사한 문제점들에 대한 해결 방법들에 대해 주요 구조를 설계 정리 계승 한 것이며 이렇게 정리된 해결방안들은 정리되고 관리/추가 계승되어 이전 이후 개발 세대들이 시행착오를 덜 겪고 동일,유사한 문제들을
빨리 해결 수 있도록 도울 수 있는 용도 및 설계 방법론 으로 사용되고 있습니다.

일종의 다양한 업종에서 사용되고 있는 사고대응,문제해결 매뉴얼과 같은 것으로 보아도 좋을듯합니다. 







2) MVC Design Pattern 이해하기

현대적인 서버기반 웹 프로그래밍 구현시 가장 보편적으로 사용하는 설계패턴이며 대부분의 현대적 서버 기반 백엔드 시스템(어플리케이션)들은 아래와 같이  개발시 MVC 패턴을 기반으로 개발되고 있습니다.

백엔드 개발언어 + 개발 언어별 웹개발 프레임워크 + MVC 설계 패턴

- JAVA + Spring(SpringBoot) + MVC Pattern

- C# + ASP.NET Core + MVC Pattern 

- Kotlin +SpringBoot + MVC Pattern

- Python + Django or Flask + MVC Pattern

- PHP + Lalabel + MVC Pattern

- Node(JavaScript) + Express + MVC Pattern

...


주로 웹 기반
사용자 요청에 대한 서버측 에서의 웹브라우저와 같은 (모바일앱,이기종시스템) 클라이언트들의 요청과 응답에 대한 처리는 Controller(Routes),
서버측 에서의 HTML(화면-View)에 대한 제어는 View ,
DB서버와의 연동을 통한 데이터의 처리영역은 Model 영역등
각각의 M(Model),V(View),C(Controller) 영역을 관심사의 분리관점으로 나눠 시스템을 설계하고 구현하는 처리지침 및 기본 가이드를 제공하는것을 목적으로 합니다.  



A) Controller(Routes) 영역

- 사용자나 모바일 디바이스,웹브라우저,이기종 시스템 과 같은 클라이언트의 요청을 URL 형식을 통해 받고 응답을 처리해주는 주체입니다.
- 클라이언트의 주된 요청내용은 웹페이지 요청이나 순수데이터(JSON=RESTfulAPI) 또는 데이터를 포함 웹페이지에 대한 요청입니다.
- 실제 클라이언트가 서버측에 요청을 하는 방식은 URL을 기반으로하는 주소체계를 기반으로 상기 요청내용들을 요청합니다.
- 클라이언트들이 URL을 통해 특정 작업을 요청해오면 처리결과에 대한 응답처리 또한 담당합니다.
- 서버측에서의 응답결과는 웹페이지소스 또는 JSON데이터,이미지,파일등 다양한 형태의 응답결과를 클라이언트로 보낼수 있습니다.
- Controller에 의해 웹페이지를 응답결과로 보내고 싶으면 View영역에 특정 View파일을 지정해 결과물을 반환하고 데이터가 필요하면  Model영역을 통해 데이터를 처리 또는 조회결과를 가져와 최종 응답 결과물로 전달합니다.
- 따라서 Controller는 MVC패턴에서 클라이언트의 최접점에서 사용자 요청과 응답을 처리하는 핵심 주체이며 Routes라는 용어를 사용하기도 합니다.   


B) View 영역
- View 는 한마디로 사용자에게 보여지는 화면이 포함된 웹페이지 소스를 말합니다.
- 서버 백엔드 어플리케이션상에서 실제 웹페이지가 존재하는 영역으로 사용자가 Contoller를 통해 특정 웹페이지를 요청하면 Views안에 특정 화면에 대한 View파일을 만들고 View파일내의 웹페이지 소스를 View가 제공합니다.
- View파일안에서는 View파일내 html 소스를 동적으로 조작/제어할수 뷰엔진 기술을 언어별로 제공하며 각각의 뷰엔진 기술을 이용해 뷰파일안에서 html 소스를 서버상에서 동적으로 변경하고 최종 View결과물을 클라이언트에 제공하게 됩니다. 


C) Model 영역
- 서버상 백엔드 어플리케이션에서 데이터 처리(등록/수정/삭제/조회)에 대한 모든 기능 구현을 담당하는 영역
- DB 서버와의 연결 패키지 또는 ORM 패키지등을 추가로 프로젝트에 설치하여 ORM 또는 SQL을 DB서버에 전달해 데이터를 처리합니다. 
- 주로 Controller영역에서  모델영역의 ORM이나 SQL 구문을 Database에 전달해 데이터를 처리하하고 그결과를 받아 Controller에 반환하는 기능을 제공합니다.
- Controller영역은 모델 영역을 통해 반환된 데이터를 View영역에 특정 뷰파일에 전달해 뷰엔진 기술을 통해 서버 기반에서 HTML을 조작해 최종 데이터를 포함한 웹페이지를
  클라이언트에 전송하거나 View영역에 보내지 않고 반환된 데이터를 순수 JSON형태로 변환해 클라이언트에 제공하는 RESTful API형태로 서비스를 제공합니다.