MVC(Model-View-Controller) 패턴은 애플리케이션을 데이터 관리, 사용자 인터페이스(UI), 사용자 입력 처리의 세 가지 역할로 분리하여 설계하는 아키텍처 패턴이다. 각 구성 요소의 역할과 상호작용을 명확히 함으로써 유지보수성, 확정성, 재사용성을 높인다.
1. 구성 요소별 역할
| 구성 요소 | 설명 | 주요 책임 |
|---|
| Model | 애플리케이션의 데이터와 비즈니스 로직을 관리합니다. | - 데이터 저장, 조회, 수정 - 변경 시 View/Controller에 알림(Observer 패턴 주로 활용) |
| View | 사용자에게 정보를 표시하는 UI 레이어입니다. | - Model의 데이터를 시각화 - 사용자 입력을 Controller에 전달 |
| Controller | 사용자 입력을 처리하고 Model과 View를 중개합니다. | - 입력 검증 및 처리 - Model 업데이트 또는 데이터 조회 - View 선택 및 업데이트 |
2. 동작 흐름
- 사용자 입력: View를 통해 입력(예: 버튼 클릭)이 발생하면 Controller로 전달됩니다.
- 입력 처리: Controller는 입력을 해석하고, 필요한 경우 Model을 업데이트하거나 데이터를 요청합니다.
- 데이터 변경: Model은 데이터 변경 후 관련 View를 자동으로 갱신하거나(Observer 패턴) Controller에 알립니다.
- UI 갱신: Controller는 최신 데이터를 기반으로 View를 선택하거나 업데이트하여 사용자에게 표시합니다.
3. 장점
- 관심사 분리(Separation of Concerns): 각 컴포넌트가 독립적으로 작동하여 코드 복잡도 감소.
- 재사용성: Model은 UI 변경 없이 재사용 가능하며, View는 다른 데이터 소스와 연결 가능합니다.
- 유지보수 용이: 기능 수정 시 해당 컴포넌트만 변경하면 됩니다.
- 협업 효율성: 프론트엔드/백엔드 개발자의 병렬 작업이 용이합니다.
4. 단점
- 초기 복잡성: 간단한 애플리케이션에는 과도한 구조일 수 있습니다.
- 의존성 관리: View와 Model이 직접 통신하면 결합도 증가 (이를 해결하기 위해 MVVM 등 파생 패턴 등장).
- 컨트롤러 과부하: 로직이 Controller에 집중되면 "뚱뚱한 컨트롤러" 문제 발생 가능.