MVC란

Zakkuri·2023년 1월 30일
post-thumbnail

MVC아키텍쳐의 구성

「Model」
모델은 어플리케이션에서 사용되는 영역의 비지니스로직을 담당한다.
비지니스로직이란 데이터베이스상의 데이터에 대한 처리순서를 뜻하며,
라라벨에선 데이터를 PHP에서 사용하기 쉽게 오브젝트 형식으로 변환하는 처리를 담당한다.

「View」
뷰란 유저가 직접눈으로보는 UI를 담당한다.
컨트롤러에서 받아온 데이터를 사용하여, 유저에게 보여주는 HTML을 생성한다. 라라벨에서는 Blade라고하는 템플렛엔진을 사용하여 표현한다.

「Controller」
컨트롤러란 브라우저에게 요청받아, 그것을 모델에게 전달해 데이터처리를 의뢰한다. 처리받은 데이털르 이번에는 뷰에 전달해 HTML생성을 의뢰한다. 그리고 받아온 HTML은 최종적으로 리스폰(응답)한다음 브라우저로 돌려보낸다.

  1. Model

데이터베이스에서 데이터를 가지고 올 수 있고 데이터를 가지고 있을 수도 있다.
데이터베이스와 소통한다.
컨트롤러에게 데이터를 전달한다.
모델이 뷰와 직접 소통하는 일은 없다.
2. View

유저가 보는 화면을 보여주게 하는 역할이다.
데이터를 받고 그리는 역할을 수행한다.
모델이나 데이터베이스와는 소통하지 않고 컨트롤러와만 소통한다.
컨트롤러에게 엑션이나 데이터를 전달만 하고 전달 받기만 한다.
3. Controller

뷰에서 엑션과 이벤트에 대한 인풋 값을 받는다.
모델에게 전달해주기 전에 데이터를 가공할 수 있다.
뷰에게 모델에게 받은 데이터를 가공할 수 있다.

View는 브라우저에서 보이는 화면이다.
View에서의 모든 요청은 일단 routes 폴더에 있는 web.php에서 받는다.
web.php에서는 요청에 따라 어떤 컨트롤러로 전달할지 결정한다.
컨트롤러에서는 요청받은 내용을 수행하고(만약 DB 처리 작업이 필요할 경우 Model을 통해 작업을 수행한다.), 전달할 데이터와 뷰를 맵핑해서 브라우저에 띄워준다.

1.Model, View, Controller 스크립트 생성

$ php artisan make:controller MainController
$ php artisan make:model Memo

컨트롤 생성위치
app
└─Http
└─Controllers
├─Controller.php
└─MainController.php
php artisan make:controller 명령어를 통해 생성한 컨트롤러는 Controllers 폴더에 생성되며, 같은 폴더에 있는 Controller.php를 상속한다.
Controller.php는 프로젝트 초기 생성 시, 기본적으로 생성되는 스크립트이다.
본 포스팅에서의 예제는 모든 요청 처리를 이 MainController를 통해 진행한다.

모델 생성위치
app
└─Memo.php
Model 스크립트는 app 폴더에 만들어진다.
이제부터 이 Memo 모델 스크립트는 mysql의 memos테이블과 상호 작용한다.

MainController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Memo; //Memo 모델을 사용한다.

class MainController extends Controller
{
    //웹 최초 진입시 처리.
    public function index(){
    	// memos 테이블에서 메모 생성 날짜 기준 내림차순으로 정렬해 가져온다.
        $memos = Memo::orderBy('created_at', 'desc')->get();
        //index view와 가져온 메모 데이터를 렌더링해 브라우저에 출력.
        return view('index',['memos' => $memos]);
    }
	
    //create 요청을 받는다.
    public function create(){
        return view('create'); //view를 렌더링해 브라우저에 출력.
    }
	
    //create view에서 메모 삽입 요청시 처리.
    public function store(Request $request){
    
    	//request 객체를 통해 메모 내용을 가져온다.
        //validate 메서드를 이용해 메모 길이가 500을 넘는지 검사한다.
        //500이 넘어가면 create view에 에러를 반환하고 데이터는 삽입되지 않는다.
        $content = $request->validate(['content' => 'required:max:500']);
        
        //memos테이블에 데이터 삽입.
        Memo::create($content);
        
        //삽입이 끝나면 index 메서드로 리다이렉트.
        return redirect()->route('index');
    }
	
    //메모 수정 요청
    public function edit(Request $request){
        //request 객체를 통해 수정하고자 하는 메모의 id값을 받는다.
        $memo = Memo::find($request->id);
        
        //edit view와 해당 메모를 렌더링, 브라우저 출력
        return view('edit',['memo' => $memo]);
    }

    //edit view에서 수정된 메모를 적용하는 요청.
    public function update(Request $request){

        //memo테이블에서 요청 받은 id값의 데이터를 호출.
        $memo = Memo::find($request->id);
        
        //메모 내용이 500자가 넘는지 검사.
        $content = $request->validate(['content' => 'required:max:500']);

        //수정된 메모를 테이블에 적용하고 save한다.
        $memo->fill($content)->save();
        
        //index 메서드로 리다이렉트.
        return redirect()->route('index');
    }
	
    //메모 삭제 요청
    public function delete(Request $request){
        //id를 통해 해당하는 row를 찾는다.
        $memo = Memo::find($request->id);
        
        $memo->delete(); // row 삭제.
         //index 메서드로 리다이렉트.
        return redirect()->route('index');
    }
}

index・・메인 페이지 요청
create・・메모 작성 페이지 요청
store・・메모 삽입 요청
edit・・메모 수정 페이지 요청
update・・메모 수정 적용 요청
delete・메모 삭제 요청

Model 내용 추가

<?php
use App\Memo;

namespace App;

use Illuminate\Database\Eloquent\Model;

class Memo extends Model
{
    protected $table ='memos';
    protected $fillable =['content'];
}

링크텍스트

정리하자면 특정웹사이트에서 버튼을 클릭한다 (보여지는것 :뷰)
그 버튼에서 누른걸 루트에서 처리하여 컨트롤러로 보낸다
컨트롤러는 그 처리를 모델로 보낸다 이때 모델은 해당처리에 관한 로직을 찾아 컨트롤러에 반환한다.
이때 필요에따라 데이터베이스 처리를 담당한다.

컨트롤러는 모델에서 로직을받아 루트에 반환 루트는 뷰에 연결하여 뷰는 사용자에게 해당 처리를 보여준다

profile
작크리(ざっくり) 메모하기위한 블로그입니다

0개의 댓글