[8] MVC Pattern
8.1. 관심사의 분리 (Separation of Concerns)와 계층화(layering)
- 관심이 같은 것은 한곳으로 모으고, 다른 것은 따로 떨어뜨려
=> 서로 영향을 주지 않도록 분리하는 것임. - 복잡한 소프트웨어를 계층으로 나눔으로써 관심사를 분리함.
프리젠테이션(Presentation) : 사용자와 소프트웨어간 상호작용을 처리함 || |/ 도메인 (Domain) : 핵심 업무 논리 처리하는 객체들로 구성됨. 엔터프라이즈 애플리케이션에서 가장 중요한 자산 || || || |/ 데이터 원본 (DataSource) : 파일 또는 데이터베이스 시스템 등과 데이터 송/수신 처리함
8.2. 소프트웨어 개발시 지켜야 할 두가지 요건
- 오늘 완성해야 하는 기능을 구현하는 코드를 짜야하는 동시에
- 내일 쉽게 변경할 수 있는 코드를 짜야 한다.
8.3. SOLID 원칙
다섯가지 소프트웨어 설계 원칙임
- Single responsibility - Open/closed - Liskov responsibility - Interface separation - Dependency inversion principle함수와 데이터 구조를 클래스로 배치하는 방법, 그리고 이들 클래스를 서로 결합하는 방법으로 구성됨
모듈과 컴포넌트 내부의 구조를 이해하기 쉽고, 변경에 유연하게 만드는데 목적을 두고 있음.
8.4. 관심사의 분리 (Separation of Concerns)와 높은 응집도, 낮은 결합도
- 관심이 같은 것끼리는 한곳으로 모으고, 다른 것은 따로 떨어뜨려 서로 영향을 주지 않도록 분리하는 것임.
- 응집도가 높다는 것
- 하나의 모듈, 클래스가 하나의 책임 또는 관심사에만 집중되어 있다는 뜻임.
- 결합도가 낮다는 것
- 하나의 오브젝트가 변경될 때에 관계를 맺고 있는 다른 오브젝트에 영향을 안준다는 뜻임.
8.5. MVC (Model-View-Controller) 패턴
- 모델-뷰-컨트롤러는 소프트웨어 공학에서 사용되는 아키텍쳐 패턴으로
- 주목적은 Business logic과 Presentation logic을 분리하기 위함.
- 서로 영향없이 쉽게 고칠 수 있는 애플리케이션 만들수 있음.
- Model : 애플리케이션의 정보(데이터, Business Logic 포함)
View : 사용자에게 제공할 화면 (Presentation Logic)
Controller : Model과 View 사이의 상호 작용을 관리
8.6. 각각의 MVC 컴포넌트 역할
- 모델 컴포넌트
- 데이터 저장소(DB)와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다루는 일을 함
- 여러 개의 데이터 변경 작업(추가, 변경, 삭제)을 하나의 작업으로 묶는 트랜잭션을 다루는 일도 함
- DAO 클래스, Service 클래스에 해당
- 뷰 컴포넌트
- 모델이 처리한 데이터나 그 작업 결과를 가지고 사용자에게 출력할 화면을 만드는 일을 함
- 생성된 화면은 웹 브라우저가 출력하고, 뷰 컴포넌트는 HTML나 CSS, JavaScript(jQuery)를 사용하여 웹 브라우저가 출력할 UI를 만듦
- HTML과 JSP를 사용하여 작성할수 있음
- 컨트롤러 컴포넌트
- 클라이언트의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트를 호출하는 일을 함
- 클라이언트가 보낸 데이터가 있다면, 모델을 호출할 때 전달하기 쉽게 데이터를 적절히 가공하는 일을 함
- 모델이 업무 수행을 완료하면, 그 결과를 가지고 화면을 생성하도록 뷰에게 전달 (클라이언트 요청에 대해 모델과 뷰를 결정하여 전달)
- Servlet를 사용하여 작성할수 있음
8.7. 스프링 MVC의 요청/응답 처리 흐름
- 프런트 컨트롤러인 DispatcherServlet을 중심으로 동작함.
- MVC(Model-View-Controller)가 협력해 웹 요청과 응답을 처리함.
8.8. MVC 아키텍쳐 패턴
- 로직과 프리젠테이션 분리
- 화면의 구성요소와 데이터를 담은 모델(Model)
- 화면 출력 로직을 담은 뷰(View)
- 애플리케이션 제어 로직을 담은 컨트롤러(Controller)
8.9. 프론트 컨트롤러(Front Controller) 패턴
- 컨트롤러를 대표해서 모든 요청과 응답을 대응함.
- 요청 및 응답에 대한 횡단 관심사(보안, 예외 처리)를 적용함.
- 적절한 하위 컨트롤러에게 작업 위임, 뷰 선택 및 결과를 출력함.
LIST
'SPRING' 카테고리의 다른 글
| [SPRING]JSP 영역(내장객체) (0) | 2023.02.13 |
|---|---|
| [SPRING]JSTL (0) | 2023.02.03 |
| [SPRING]EL (0) | 2023.02.01 |
| [SPRING]JSP 기초 (0) | 2023.01.31 |
| [SPRING]Servlet, JSP (0) | 2023.01.30 |
댓글