728x90
반응형
SMALL
Spring을 하려면 꼭 알아야 할 설계 방식인 MVC 패턴에 대해 포스팅 하겠습니다.
MVC 패턴
모델-뷰-컨트롤러(model–view–controller, MVC)는 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다. 이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. MVC에서 모델은 애플리케이션의 정보(데이터)를 나타내며, 뷰는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.
출처: MVC - wikipedia
MVC 패턴의 핵심은 사용자 인터페이스로부터 비즈니스 로직을 분리하여
로직을 쉽게 수정할 수 있는 어플리케이션이 된다는 것
Model
- Model은 Data와 어플리케이션이 무엇을 할 거 인지를 정의하는 부분으로 내부 비즈니스 로직을 처리하기 위한 역할을 합니다.
- 즉, 모델은 컨트롤러가 호출을 하면 DB와 연동하여 사용자의 입출력 데이터를 다루는 일과 같은 데이터와 연관된 비즈니스 로직을 처리하는 역할을 합니다.
- 데이터 추출, 저장, 삭제, 업데이트 등의 역할을 합니다.
View
- View는 사용자에게 보여주는 화면(UI)이 해당됩니다.
- 사용자와 상호작용을 하며 컨트롤러로부터 받은 모델의 결과값을 사용자에게 화면으로 출력하는 일을 합니다.
- MVC에서는 여러개의 View가 존재할 수 있습니다.
- Model에서 받은 데이터는 별도로 저장하지 않습니다.
View는 다음과 같은 규칙을 갖고 있습니다.
1. Model이 가지고 있는 정보를 따로 저장해서는 안됩니다.
2. Model이나 Controller와 같이 다른 구성요소들을 몰라야 합니다.
3. 변경이 일어나면 변경 통지에 대한 처리방법을 구현해야만 합니다.
Model과 View는 서로 몰라야 합니다.
Controller
- Controller는 Model과 View 사이를 이어주는 인터페이스 역할을 합니다.
- 즉, Model이 데이터를 어떻게 처리할지 알려주는 역할을 합니다.
- 사용자로부터 View에 요청이 있으면 Controller는 해당 업무를 수행하는 Model을 호출하고 Model이 업무를 모두 수행하면 다시 결과를 View에 전달하는 역할을 합니다.
Controller는 다음과 같은 규칙을 갖고 있습니다.
1. Model이나 View에 대해서 알고 있어야 합니다.
2. Model이나 View의 변경을 모니터링 해야 합니다.
결론
MVC는 Model-View-Controller의 약자입니다. 개발할 때 3가지 형태로 구분하여 개발하는 소프트웨어 개발 방법론입니다.
그 3가지 요소를 설명하면
Model은 무엇을 할지 정의합니다. 비지니스 로직에서의 알고리즘, 데이터 등의 기능을 처합니다.
Controller는 어떻게 할지를 정의합니다. 요청을 받아서 화면과 Model과 View를 연결시켜주는 역할을 하지요.
View는 무엇을 화면으로 보여주는 역할을 하지요. 웹이라면 웹페이지, 모바일이라면 어플의 화면의 보여지는 부분입니다.
MVC는 복잡한 대규모 프로그램을 개발을 하게 되면서 문제점이 확인되었습니다.
다수의 View와 Model이 Controller를 통해 복잡하게 연결될 수 있기 때문에 Controller가 뚱뚱해지게 되는 Massive ViewController(대규모 MVC 어플리케이션)가 되어버립니다.
View와 Controller가 라이브사이클에 강하게 연결되어있고, 더불어 Controller를 통해 View와 Model간에도 관계가 복잡하게 연결되어있어서 수정시 테스트가 힘들고, 파악이 어렵기 때문에 여러 Side-Effect를 불러오게 되는 문제점이 있습니다.
그래서 MVC는 위 문제점을 해결하기 위해 여러 패러다임을 수용한 다양한 패턴을 파생시켰습니다.
728x90
반응형
LIST
'Study' 카테고리의 다른 글
[Spring Boot]Spring boot + MyBatis + MariaDB 콜라보 (0) | 2023.09.22 |
---|---|
[Spring boot]MariaDB Sample Database로 RESTful API 만들기 (0) | 2023.09.21 |
[Spring] @RequestBody, @RequestParam, @ModelAttribute 파헤치기 (0) | 2023.09.12 |
[Spring] Spring boot VS Spring Framework (0) | 2023.09.08 |
래퍼 클래스(Wrapper class) 파헤치기 (0) | 2023.09.07 |