최근, 코드이그나이터(CodeIgniter)로 만들어진 사이트를 리뉴얼하기 위해 소스코드를 분석하다가 초기 개발자의 엄청난 소스 코드를 보고 이번 포스팅을 준비하게 되었습니다.
코드이그나이터 프레임워크는 MVC 패턴의 구조를 사용하고 있지만, 초기 개발자의 소스코드는 대부분 MVC 패턴을 따르지 않고 있었습니다. 결과적으로 프레임워크로 인해 덩치는 커지고 소스코드는 지저분해졌습니다.
이번 포스팅에서는 MVC 패턴의 기본적인 이해와 동작 원리를 알아보도록 하겠습니다.
MVC 패턴이란?
모델-뷰-컨트롤러(Model–View–Controller, MVC)는 소프트웨어 공학에서 사용되는 아키텍처 패턴이다. 이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. MVC에서 모델은 애플리케이션의 정보(데이터)를 나타내며, 뷰는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다. - From 위키백과
MVC 패턴은 누가 사용해야 하는가?
작은 규모의 사이트 제작 또는 혼자서 모든 것을 개발하는 경우라면, 덩치가 커지고 속도가 느려지는 단점을 감수하면서까지 MVC 패턴을 고집할 필요는 없다고 생각됩니다.
다만, 객체지향을 이용한 코드의 재활용, 유지보수와 확장성에 좀 더 비중을 두고 사이트를 개발한다면 MVC 패턴을 추천합니다.
MVC 패턴 동작
MVC 패턴을 이용한 사이트 제작 시, 일반적인 동작 과정을 간단하게 설명해 보겠습니다.
각 php 파일은 클래스와 함수가 선언되어 있으며, 특정 기능이 필요할 때 해당 클래스의 객체를 생성하여 함수를 호출하게 됩니다.
* 아래 구조는 이해를 돕기위한 예제이며 실제 코드이그나이터(CodeIgniter), 라라벨(Laravel) 프레임워크의 구조와 상이할 수 있습니다.
/core
/application.php
/controller.php
/model.php
/view.php
/controller
/home.php
/blog.php
/model
/article_model.php
/view
/home_view.php
/blog_view.php
[메인 화면을 볼 때의 동작]
* 전제조건: 메인 화면에서는 데이터를 사용하지 않음.
1. index.php 파일은 기본적인 변수 선언과 필수 파일(Core)을 로드하고 Appication을 기동합니다.
2. application.php 파일은 입력된 URL을 분석하여 컨트롤러, 함수, 파라미터로 구분하고, 해당 컨트롤러의 함수를 호출합니다.
ex) http://comlover.com/home
컨트롤러 : home, 함수 : X, 파라미터 : X
3. URL에 함수 정보가 없으므로 home.php 파일의 디폴트 함수를 호출합니다.
4. 디폴트 함수에서는 view 폴더의 home_view.php 파일을 로드하여 사용자에게 결과를 보여줍니다.
[블로그 포스팅을 볼 때의 동작]
1. index.php 파일은 기본적인 변수 선언과 필수 파일(Core)을 로드하고 Appication을 기동합니다.
2. application.php 파일은 입력된 URL을 분석하여 컨트롤러, 함수, 파라미터로 구분하고, 해당 컨트롤러의 함수를 호출합니다.
ex) http://comlover.com/blog/view/1
컨트롤러 : blog, 함수 : view, 파라미터 : 1
3. blog.php 파일의 view 함수를(파라미터:1) 호출합니다.
4. view 함수에서는 파라미터 정보를 이용하여 article_model.php 파일에 데이터를 요구합니다.
5. article_model.php 파일은 DB에서 해당 데이터를(블로그 1번 글) 찾아 view 함수로 돌려줍니다.
6. view 함수에서는 blog_view.php 파일을 로드하고 DB에서 읽어온 데이터를 넘겨줍니다.
7. blog_view.php 파일은 view 함수로부터 넘겨받은 데이터를 포함하여 사용자에게 결과를 보여줍니다.
MVC 패턴을 이용한 대표적인 PHP 프레임워크로는 Laravel, Phalcon, Yii, CodeIgniter 등이 있으며, 많은 개발자들이 개발 기간 단축 및 작업 분업화 등의 이점을 위해 이런 오픈소스 프레임워크를 이용하고 있습니다.
이런 프레임워크를 사용한다면 MVC 패턴을 제대로 이해하고 객체지향 코딩을 할 때, 비로소 '프레임워크를 잘~ 사용했다'라고 말할 수 있을 것 같습니다.
"지금 당신의 귀차니즘이 후임 개발자에게 밤샘작업으로 돌아옵니다."