728x90
디자인 패턴
“바퀴를 다시 발명하지 마라” : 이미 만들어져 잘되는 것을 다시 만들 필요가 없다는 의미
소프트웨어 설계에 있어 공통으로 발생하는 문제에 대해 상황에 따라 사용할 수 있게 하기 위해
통용되는 설계 방법을 “규약”에 의해 정의한 패턴입니다.
디자인 패턴의 사용 이유 / 종류
- 사용 이유 : 개발의 효율성, 유지보수성, 운용성, 프로그램 최적화에 도움이 됩니다.
- 종류 (* 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 > 개발 방법론' 카테고리의 다른 글
마이크로 서비스와 모놀리틱 아키텍처 (1) | 2023.11.29 |
---|---|
[OOP] SOLID 원칙 (0) | 2023.11.05 |
[개발] TDD(테스트 주도 개발)에 대한 이해 (0) | 2023.10.30 |