CodeIgniter MVC(모델-뷰-컨트롤러) 프레임워크 예제

⚡ 스마트 요약

CodeIgniter MVC 프레임워크는 애플리케이션을 모델, 뷰, 컨트롤러로 분리합니다. 모델은 데이터와 비즈니스 로직을 처리하고, 컨트롤러는 요청을 조정하며, 뷰는 결과를 표시합니다. 이를 통해 결합도를 낮추고 유연성을 높이며 개발자 생산성을 향상시킬 수 있습니다.

  • 🏗️ 핵심 패턴: MVC는 애플리케이션을 모델, 뷰, 컨트롤러 구성 요소로 나눕니다.
  • 💾 모델: 데이터 소스와 상호 작용하고, 주로 Active Record를 통해 비즈니스 로직을 저장합니다.
  • 🎛️ 제어 장치: 요청을 수신하고, 입력을 검증하며, 모델과 뷰를 조율합니다.
  • 🖼️ 전망: 데이터를 HTML, CSS 및 최소한의 PHP 코드로 표현하며, 복잡한 로직은 포함하지 않습니다.
  • 🔗 느슨한 결합: 구성 요소들은 독립적으로 작동하므로 프런트엔드와 백엔드 작업이 병렬로 실행될 수 있습니다.
  • 간략 태그: CodeIgniter 뷰는 일반적으로 더 깔끔한 템플릿을 위해 짧은 PHP echo 태그를 사용합니다.
  • 🔁 요청 흐름: 컨트롤러에서 모델로, 모델에서 뷰로, 그리고 최종적으로 HTML이 브라우저로 전달됩니다.

CodeIgniter MVC 프레임워크

MVC 란 무엇입니까?

MVC는 Model-View-Controller의 약자입니다. 이는 애플리케이션을 세 가지 주요 구성 요소로 나누는 아키텍처 패턴입니다.

  1. 이 모델은 비즈니스 로직과 데이터베이스 상호작용을 다룹니다.
  2. 컨트롤러는 모델과 뷰 사이의 활동을 조율합니다.
  3. 뷰는 데이터 표시를 담당합니다.

다음은 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 프레임워크의 작동 방식을 보여줍니다.

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/아래 이미지와 같이 고객 카드가 표시되어 있을 것입니다.

고객 정보 카드가 생성되었습니다. Code이그나이터

자주 묻는 질문

즉, 비즈니스 로직이 모델 안에 존재한다는 뜻입니다.ping 컨트롤러는 간결하고 요청 라우팅에 집중되어 있습니다. 덕분에 로직을 재사용할 수 있고 컨트롤러를 더 쉽게 읽고 테스트할 수 있습니다.

뷰는 데이터만 표시해야 합니다.ping 이러한 논리를 통해 관심사가 분리되므로 디자이너는 비즈니스 규칙을 건드리지 않고 레이아웃을 편집할 수 있으며 동일한 데이터를 다양한 보기에서 표시할 수 있습니다.

Active Record는 모델이 원시 SQL 대신 메서드 호출을 사용하여 데이터베이스를 읽고 쓸 수 있도록 하는 내장 쿼리 빌더입니다. 또한 SQL 인젝션을 방지하는 데에도 도움이 됩니다.ping values.

AI는 기능에 대한 설명으로부터 일치하는 컨트롤러, 모델 및 뷰 파일을 생성하고 명명 규칙을 일관되게 유지할 수 있습니다. Rev쿼리를 실행하기 전에 생성된 쿼리와 유효성 검사 결과를 확인하세요.

짧은 `echo` 태그는 뷰에서 값을 출력하는 간결한 방법입니다. 전체 PHP 태그 블록은 명령문과 제어 구조에 사용됩니다. 두 태그 모두 출력 결과는 동일하지만, 짧은 태그를 사용하면 뷰를 더 깔끔하게 유지할 수 있습니다.

이 게시물을 요약하면 다음과 같습니다.