반응형

디자인 패턴
“바퀴를 다시 발명하지 마라” : 이미 만들어져 잘되는 것을 다시 만들 필요가 없다는 의미
소프트웨어 설계에 있어 공통으로 발생하는 문제에 대해 상황에 따라 사용할 수 있게 하기 위해
통용되는 설계 방법을 “규약”에 의해 정의한 패턴입니다.
디자인 패턴의 사용 이유 / 종류
- 사용 이유 : 개발의 효율성, 유지보수성, 운용성, 프로그램 최적화에 도움이 됩니다.
- 종류 (* GoF 디자인 패턴)
- 생성 패턴 : 객체 인스턴스를 생성하는 패턴, 클라이언트와 인스턴스 사이의 연결을 끊는 패턴
- 행동 패턴 : 클래스와 객체가 상호작용하는 방법과 역할을 분담하는 패턴
- 구조 패턴 : 클래스와 객체를 더 큰 구조로 만들 수 있게 구성을 사용하는 패턴
- → MVC 패턴은 구조 패턴에 속합니다.
GoF 디자인 패턴 : 소프트웨어 영역에서 23가지 디자인 패턴을 정의하고 체계화한 패턴
MVC 패턴의 종류
MVC 패턴의 MVC는 `Model, View, Controller` 의 약자로 구성되어 있습니다.
MVC 패턴은 프로그램을 상기 3가지의 구성요소에 따른 역할로 구분해 정의합니다.
MVC 패턴의 등장 배경 : 너무 많은 역할에 대한 분리
- HTML 페이지를 더 쉽게 만드는 *템플릿 엔진의 등장
- 템플릿 엔진 : HTML 문서 + 변경 필요 부분만 자바 코드를 사용하기 위한 목적의 엔진
(ex : JSP, Thymeleaf, Freemarker, Velocity)
- 템플릿 엔진 : HTML 문서 + 변경 필요 부분만 자바 코드를 사용하기 위한 목적의 엔진
- 템플릿 엔진에 집중된 로직을 분리하기 위한 MVC 패턴의 등장
- 결국 템플릿 엔진에도 HTML과 자바 코드(비즈니스 로직)가 혼재했습니다.
- 따라서 비즈니스 로직과 HTML 코드를 분리하자는 의견이 등장했습니다.
MVC 패턴의 특징
패턴을 통해 사용자 인터페이스로부터 비즈니스 로직을 분리합니다.
- UI의 시각적 요소와 이면의 비즈니스 로직을 구분해 독립적인 유지보수가 가능하다는 점이 있습니다.
MVC 패턴의 종류
MVC1, MVC2 아키텍처에서 발전된 패턴 2개가 있다.
- MVC1 :
View, Controller를 모두JSP가 담당하는 형태입니다.

- JSP 가 두 가지 기능을 담당하고 있어 코드 가독성 ⬇️ 복잡성 ⬆️
- 이후
Controller역할을 하는Servlet*(서블릿) 이 추가된 MVC 패턴 2가 등장합니다.- 서블릿 : 클라이언트 요청을 처리, 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
- 사용자가 URL을 입력 시(HTTP Request) Servlet 컨테이너로 전송합니다.
- Servelet 컨테이너는
HTTPServletRequest, HTTPServletResponse객체를 생성합니다. - 서블릿의 요청에 따라 메서드를 호출하고 동적 페이지를 생성하는 CGI(프로그램의 웹 출력 결과를 전송하는 방법)에게 출력 화면을 생성을 지시합니다.
- 서블릿 : 클라이언트 요청을 처리, 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
- MVC2 : JSP = View, Servelet = Controller 가 담당하는 형태입니다.

- Controller, View의 명확한 분리로 가독성, 코드 유지보수 ⬆️
- MVC2 패턴을 잘 발전시킨 대표적 프레임워크가 스프링입니다.
MVC 패턴의 구성요소
Model
애플리케이션이 무엇을 하는지 정의하는 부분으로, 비즈니스 로직을 처리하기 위한 역할입니다.
특징
- 데이터 가공을 책임지는
Component입니다. - 데이터 추출, 저장, 삭제, 업데이트 등의 역할을 수행합니다.
- 클라이언트의 요청의 모든 정보를 가지고 있다.
- ★
DDD(도메인 주도 설계)의repository, service, entity가 이에 해당합니다.
규칙
- 사용자가 편집하기를 원하는 모든 데이터를 가지고 있어야 합니다.
Model은View와Controller에 대해서 어떤 정보도 알지 못해야 합니다.- 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야 합니다.
View
사용자에게 보이는 부분, 즉 User Interface(UI)를 의미합니다.
특징
- 도메인
Model의 상태를 변환하거나, 받아서 렌더링 하는 역할입니다. - html, css 등의 정적 리소스 및 동적 리소스(템플릿 엔진)를 보여줍니다.
규칙
Model이 가지고 있는 정보를 따로 저장해서는 안됩니다.View는Model이나 컨트롤러에 대해서 어떤 정보도 알지 못해야 합니다.
Controller
Model과 View 사이를 잇는 브리지 역할을 합니다.
특징
View와Model이 각각 어떤 역할과 책임이 있는지 알고 있어야 합니다.Model이 데이터를 어떻게 처리할지 알려주는 역할을 합니다.Model의 데이터 변화를View에게 전달하는 역할을 합니다.
규칙
Model이나View에 대해서 알고 있어야 합니다.Model이나View의 변경을 모니터링해야 합니다.
반응형
'DEV > 개발 방법론' 카테고리의 다른 글
| [개발 방법론] 마이크로 서비스(MSA)와 모놀리틱 아키텍처의 차이점 (1) | 2023.11.29 |
|---|---|
| [개발방법론] 객체지향 프로그래밍, SOLID 원칙에 대한 설명 (0) | 2023.11.05 |