CodeIgniter MVC(모델-뷰-컨트롤러) 프레임워크 예제
⚡ 스마트 요약
CodeIgniter MVC 프레임워크는 애플리케이션을 모델, 뷰, 컨트롤러로 분리합니다. 모델은 데이터와 비즈니스 로직을 처리하고, 컨트롤러는 요청을 조정하며, 뷰는 결과를 표시합니다. 이를 통해 결합도를 낮추고 유연성을 높이며 개발자 생산성을 향상시킬 수 있습니다.
MVC 란 무엇입니까?
MVC는 Model-View-Controller의 약자입니다. 이는 애플리케이션을 세 가지 주요 구성 요소로 나누는 아키텍처 패턴입니다.
- 이 모델은 비즈니스 로직과 데이터베이스 상호작용을 다룹니다.
- 컨트롤러는 모델과 뷰 사이의 활동을 조율합니다.
- 뷰는 데이터 표시를 담당합니다.
다음은 MVC 아키텍처 패턴의 몇 가지 장점입니다.
- 느슨한 결합 – 구성 요소들이 서로 독립적으로 존재하고 기능합니다.
- 유연성 – 개별 구성 요소를 쉽게 변경할 수 있습니다.
- 생산성 향상 – 여러 사람이 동시에 프로젝트를 진행할 수 있습니다. 프런트엔드 개발자는 뷰와 프레젠테이션 작업을, 백엔드 개발자는 모델 개발에 집중할 수 있으며, 시스템이 느슨하게 결합되어 있어 최종적으로는 모든 구성 요소가 원활하게 연동됩니다.
모델
모델은 데이터 소스와 상호 작용하는 역할을 합니다. 일반적으로 데이터 소스는 데이터베이스이지만, 요청된 데이터를 제공하는 서비스일 수도 있습니다. 또한 비즈니스 로직을 컨트롤러가 아닌 모델에 두는 것이 일반적입니다. 이러한 방식을 흔히 "뚱뚱한 모델, 얇은 컨트롤러"라고 합니다.
모델은 일반적으로 데이터베이스에 데이터를 기록하고 데이터를 편집, 업데이트 및 삭제하는 메커니즘을 제공합니다. 최신 웹 애플리케이션에서 모델은 Active Record와 같은 데이터 접근 설계 패턴을 사용하여 데이터베이스와의 상호 작용을 더욱 쉽게 만듭니다.
예를 들어, CodeIgniter는 모델 구축을 지원하기 위해 내장된 Active Record 라이브러리를 사용하는 반면, Laravel과 같은 다른 프레임워크는 데이터 접근을 위해 Eloquent ORM(객체 관계형 매퍼)을 사용합니다.
제어 장치
컨트롤러는 사용자로부터 들어오는 리소스 요청을 수신합니다. 모델과 뷰 사이의 중개자 역할을 하며, 때로는 일부 비즈니스 규칙을 구현하기도 합니다. 예를 들어, 컨트롤러가 데이터베이스에 사용자를 등록하라는 요청을 받았다고 가정해 보겠습니다.
컨트롤러는 제출된 데이터에 대해 유효성 검사를 수행하여 모든 필수 매개변수가 있는지 확인합니다. 누락된 항목이 있으면 사용자는 적절한 오류 메시지와 함께 등록 페이지로 이동합니다. 또한 컨트롤러는 모델에 추가적인 유효성 검사를 요청할 수 있습니다. 예를 들어 제출된 이메일 주소가 이미 존재하는지 확인하는 등의 검사를 수행할 수 있습니다. 모든 유효성 검사 규칙을 통과하면 컨트롤러는 모델에 데이터를 전송하여 처리하고 응답을 기다립니다.
모델이 정보를 처리하고 긍정적인 응답을 반환하면 컨트롤러는 적절한 뷰를 로드하고 모델에서 반환된 데이터를 매개변수로 전달합니다.
관측
보기는 최종 사용자에게 표시되는 데이터를 처리합니다. 웹 애플리케이션에서 보기에는 HTML, CSS가 포함되는 경우가 많으며 선택적으로 JavaScript뷰에는 최소한의 프로그래밍 코드만 포함되어 있으며, 일반적으로 모델에서 받은 데이터 컬렉션을 순회하는 반복문이나 데이터 정리 또는 편집 링크 생성과 같은 도우미 함수만 있습니다. 대부분의 최신 웹 애플리케이션은 디자이너가 이해할 수 있는 의사 코드와 유사한 구문을 가진 템플릿 엔진을 사용합니다. CodeIgniter에서는 짧은 PHP 태그와 제어 구조를 사용하는 것이 일반적입니다. 무언가를 표시하려면 다음과 같이 합니다. CodeIgniter를 사용하려면 다음 코드를 사용할 수 있습니다.
<?=$title?>
다음과 반대되는 의미로:
<?php
echo $title;
?>
제어 구조는 일반적으로 다음과 같이 작성됩니다.
<?php foreach ($customers as $customer): ?> <li> <p><?=$customer->first_name?></p> </li> <?php endforeach; ?>
위 예시에서 볼 수 있듯이, 뷰는 여러 요소를 조합하여 사용합니다. PHP 모든 것을 순수한 PHP 코드로 묶는 대신 HTML과 HTML을 사용합니다.
MVC 프레임워크는 어떻게 작동할까요?
다음 이미지는 MVC 프레임워크의 작동 방식을 보여줍니다.
컨트롤러는 사용자의 요청을 받아 필요한 경우 데이터베이스 모델과 상호 작용한 다음 결과를 HTML 코드 형태로 브라우저에 반환합니다. 브라우저는 이 코드를 사람이 읽을 수 있는 형식으로 해석하여 사용자에게 표시합니다.
Code점화기 컨트롤러
이제 우리가 파일을 로드했을 때 무슨 일이 일어났는지 자세히 살펴보겠습니다. URL 웹 브라우저를 열고 application/controllers 폴더에 있는 Welcome.php 컨트롤러 파일을 엽니다. 다음과 같은 코드가 보일 것입니다.
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Welcome extends CI_Controller { public function index() { $this->load->view('welcome_message'); } }
이리:
- `defined('BASEPATH') OR exit('No direct script access allowed');`는 요청이 index.php를 통하지 않고 들어온 경우 컨트롤러에 직접 접근하는 것을 방지합니다. 이는 보안상의 이유입니다.
- `class Welcome extends CI_Controller {…}`는 Welcome 컨트롤러 클래스를 정의하고 부모 클래스인 CI_Controller를 확장합니다.
- public function index(){…}는 요청에 응답하는 index 메서드를 정의합니다. URL
http://localhost:3000. - `$this->load->view('welcome_message');`는 application/views 디렉토리에 있는 `welcome_message` 뷰를 로드합니다.
이제 인덱스 메서드를 다음과 같이 업데이트하겠습니다.
public function index()
{
$this->load->model('customers_model');
$data['customer'] = $this->customers_model->get_customer(3);
$this->load->view('welcome_message',$data);
}
이리:
- $this->load->model('고객_모델'); 고객 모델을 로드합니다.
- $data['customer'] = $this->customers_model->get_customer(3);는 customers_model의 get_customer 메서드를 호출하고 매개변수 3을 전달합니다. 이 예제에서는 값을 하드코딩했지만 실제 응용 프로그램에서는 URI에서 가져온 매개변수가 될 것입니다.
- `$this->load->view('welcome_message',$data);`는 welcome_message 뷰를 로드하고 `$data` 변수를 전달합니다.
Code점화기 모델
이제 위 코드에서 참조된 모델을 만들어 보겠습니다. 간단하게 설명하기 위해, 이 모델은 다른 요소와 상호작용하지 않을 것입니다. 데이터베이스 하지만 이 코드는 정적인 고객 레코드를 반환합니다. 다음 튜토리얼에서는 데이터베이스를 다룰 예정입니다. application/models 폴더에 Customers_model.php 파일을 생성하고 다음 코드를 추가하세요.
<?php class Customers_model extends CI_Model { public function get_customer($id) { $data['id'] = 3; $data['first_name'] = 'John'; $data['last_name'] = 'Doe'; $data['address'] = 'Kingstone'; return $data; } }
이리:
- 클래스 Customers_model은 CI_Model을 확장합니다. {...}는 CI_Model을 확장하는 Customers_model 모델을 정의합니다.
- public function get_customer($id) {…}는 고객 ID를 기반으로 하는 get_customer 메서드를 정의합니다.
- $data[…]는 가상의 고객에 대한 고정 값을 정의합니다. 이는 데이터베이스에서 반환된 행이어야 합니다.
- $data를 반환합니다. 고객 데이터를 반환합니다.
이것으로 모델 설명은 끝입니다. 이제 welcome_message 뷰를 수정해 보겠습니다. 다음 위치에 있는 welcome_message.php 파일을 엽니다.
application/views/welcome_message.php
다음 코드로 교체하세요:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>CodeIgniter MVC Basics</title> </head> <body> <h1>Customer Details Card</h1> <p>Customer ID : <strong><?=$customer['id']?></strong></p> <p>First Name : <strong><?=$customer['first_name']?></strong></p> <p>Last Name : <strong><?=$customer['last_name']?></strong></p> <p>Address : <strong><?=$customer['address']?></strong></p> </body> </html>
변경 사항을 저장하고 다음을 로드하세요. URL 웹 브라우저에서: http://localhost:3000/아래 이미지와 같이 고객 카드가 표시되어 있을 것입니다.



