DevYGwan
MVC Pattern 본문
요즘 실제 개발론으로 MVC 패턴을 많이 사용하고 있습니다. 그렇다면 왜 MVC 패턴을 많이 사용하는 것일까에 대한 의문이 들었고 그래서 이번 기회에 MVC 패턴에 대해서 공부를 해보고 정리하려고 합니다.
MVC 패턴의 사전적 정의는
모델-뷰-컨트롤러(model–view–controller, MVC)는 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다. 이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. MVC에서 모델은 애플리케이션의 정보(데이터)를 나타내며, 뷰는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.
출처 : 위키백과
간단하게 말해서, MVC 패턴은 Model, View, Controller로 나누어 처리를 하는 개발기법을 말하는데 각각의 역할은
- Model(모델)
- 애플리케이션 정보, 데이터를 나타낸다.
- 데이터와 비즈니스 로직을 관리합니다.
- 실제 로직을 구현하는 응용 프로그램의 중요한 부분으로 이는 일반적으로 데이터베이스로부터 데이터를 가져와서 담아두거나, 데이터베이스로 저장하는 역할을 수행한다.
- 모델은 앱이 포함해야할 데이터가 무엇인지를 정의한다.
규칙
1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
2. View나 Controller에 대해서 어떤 정보도 알지 말아야 한다.
3. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야 한다.
- View(뷰)
- 레이아웃과 화면을 처리한다.
- 사용자 인터페이스 즉, UI를 출력하는 컴포턴트이다.
- 오로지 화면을 출력하기 위한 역할만을 담당해야한다.
- 뷰는 앱의 데이터를 보여주는 방식을 정의한다.
규칙
1. 모델이 가지고 있는 정보를 따로 저장해서는 안된다.
2. 모델이나 컨트롤러와 같이 다른 구성 요소들을 몰라야 한다.
3. 사용자 입력이나 인터렉션, 업무와 관계된 로직은 결코 뷰가 가져서는 안된다.
4. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야 한다.
- Controller(컨트롤러)
- MVC에서 가장 핵심이 되는 컴포넌트이다.
- Model과 View사이를 이어주는 인터페이스 역할을 한다.
- 사용자의 인터렉션을 처리하고, 모델을 조작하며, 최종 UI로 출력될 뷰를 결정하는 역할을 담당한다.
- 사용자의 입력 값을 수신하고 데이터 모델을 통해 필요한 데이터를 가져와 응답을 구성하는 전반적인 책임을 담당한다.
규칙
1. Model이나 View에 대해서 알고 있어야 한다.
2. Model이나 View의 변경을 모니터링 해야 한다.
이렇듯 MVC 패턴은 3가지로 나눠져있고 3가지의 역할이 확실하게 구별되어 있습니다. 따라서 MVC패턴을 사용할때 가장 중요한 것은
이 3가지를 독립적으로 작동할 수 있게 확실히 구분하고 처리해야 한다는 것입니다.
간단한 MVC 모델 작동 방식을 도식화하자면,
이러한 식으로 동작합니다.
그렇다면, MVC 패턴을 사용하는 장점이 무엇일까?
- 기능별로 코드를 분리하여 가독성과 코드의 관리가 용이하다.
- 개발 후 발생할 장애 처리 및 유지 · 보수하기 편리하다.
- 병행 개발(동시에 각각의 컴포넌트를 개발하는 방식)이 가능하다.
이렇듯, MVC 패턴을 사용하면 코드가 길어지면 길어질수록 관리하기 편해집니다. 따라서 이러한 형식으로 코드를 작성하는 것이 실제 다루는 코드 양이 많은 현업에서 많이 쓰입니다.
물론, 코드의 양이 방대해지면 확실하게 나누기 힘들 수도 있습니다. 또한 코드를 짜다보면 다수의 View와 Model이 생기게 되고 이를 연결하기 위해 Controller의 양이 방대해지게 됩니다. 이를 우리는 Massive - View - Controller 라고 합니다. 따라서 이러한 문제를 해결하기 위한 여러가지 방법론 또한 존재합니다. 이러한 방법론에 대해서는 후에 추가적으로 설명하도록 하겠습니다.
'Study > DEVELOP' 카테고리의 다른 글
Jitpack & github releases를 사용한 라이브러리 배포 (1) | 2024.09.13 |
---|---|
SSH 방식으로 CICD 구축 시 주의할 점 :: 서버 내 환경 변수 설정 처리 (3) | 2024.06.13 |
Coding Style : Case Style ( Naming Convention ) (0) | 2022.12.27 |