Web/PHP

[라라벨] 모델과 마이그레이션

_sparrow 2020. 4. 11. 22:22
반응형

요즘은 어느 사이트는 유저가 있다면 로그인/회원가입이 있다.

유저가 개인정보를 주고 운영하는 사이트들은 그 유저에 대해 권한이 주어지는 부분까지 사이트 내부에서의 특정 행위 들이 허용된다.

이처럼 로그인/회원가입은 사용자들이 개인정보를 입력하고 개인정보를 사이트에서는 저장하고 해당 사용자로 인식하는 수단이다. 

라라벨에서도 이에 맞게 라라벨 프레임워크를 설치하는 순간부터 app/User.php(모델)가 생성되어있다. 

 

모델을 따로 만들지않고 예시로 준 User모델에 대해서 파헤쳐보자

 

모델

   /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
protected $fillable = [
        'name', 'email', 'password'
    ];
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token'
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

User모델의 내부 코드이다. 다른 부분은 손대지 않더라도 확인해야 할 부분들이 있다.

 

$fillable은 배열내부의 name, email, password는 데이터베이스에서 값이 들어갈 수 있는 각각의 칼럼으로  이해하면 된다.

 

 $hidden의 password, remember_token 역시 각각의 칼럼 역할을 하지만 외부에 노출되지 않는 필드들을 정의한 것이다.  fillable과 hidden은 중복될 수 있다.

 

$casts는 속성에 대해서 공통의 데이타 타입으로 변환하는 편리함 메서드를 제공한다. 

위에서는 email_verified_at으로 저장이 되어있는데 이 칼럼에 대해서는 datetime의  값이 들어간다고 보면 된다.

 

즉 데이터베이스에 User라는 테이블이 있고 내부의 칼럼은 name, email, password, remember_token, email_verified_at이라는 칼럼으로 지정된다고 보면 된다.

 

기본 생성된 User 외에 아티즌(Artisan)을 활용해 모델을 만들어보자.

아티즌은 라라벨에 포함된 커맨드 라인 인터페이스(CLI)의 이름으로 개발에 도움을 주는 명령어를 제공하는 역할이라고 보면 된다.

 

//cmd 창에서 명령어를 입력해 모델을 만들어주자

php artisan make:model Example

 

입력하면 자신의 폴더내부에 Example이라는 모델이 만들어진 걸 볼 수 있다.

 

 //데이터베이스를 확인하고 생성할 수 있는 명령어를 입력해보자
 php artisan tinker
 
 App\User::get();
 

 

 

하지만 너무나도 당연하게도 테이블이 존재하지않는다고 뜰 것이다.

왜냐하면 아직 우리는 데이터베이스를 직접 만든 것이 아니다. 

저장되는 하나의 방식을 설계해놨다고 보면 된다.

 

이제 직접 데이터를 저장을 위한 틀인  테이블을 만들기 위한 마이그레이션을 할 차례이다.

 

마이그레이션

마이그레이션은 이주라는 뜻인데 말 그대로 데이터베이스를 옮기는 역할을 할 수 있고 백업도 가능하고 추가, 수정 삭제까지 가능하다.

 

물론 간단하게 cmd창에서 mysql에 접근해서 테이블을 만들고 sql문을 작성해서 DB를 구성하는 방식도 있다.

다른 플랫폼을 이용해서 비교적 편리하게 GUI를 통해서 추가하는 heidiSQL 이라던지 mysql workbench 방식도 있지만 이런 방식을 하게 되면 모델의 참된 의미가 없어지게 된다. 각각 장단점이 있겠지만 이왕 모델을 만들었으니 마이그레이션도 해보자.

 

// 마이그레이션 파일을 만들어보자

php artisan make:migration create_users_table

 

만들고 나서 database/migrations/날짜_create_users_table이 만들어졌을 거고 내부를 열면 아래와 같은 내용이 나온다.

 

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class FewTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        //
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        //
    }
}

 

마이그레이션 클래스는 up과 down, 두 개의 메서드를 가지며 up 메서드는 데이터베이스에 테이블, 컬럼, 인덱스를 추가하는데 사용되고, 이와 반대로 down 메소드는 up 메서드의 동작을 취소한다.

 

이제 유저 모델을 마이그레이션 폴더에 넣어주자.

 

public function up()
    {
    // User테이블을 만드는 역할을한다.
        Schema::create('Users', function (Blueprint $table) {
        //테이블의 컬럼이라고 보면된다.
            $table->string('name');
            $table->string('email');
             $table->string('password');
            $table->rememberToken();
            $table->timestamp('email_verified_at')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
    // up 메소드의 동작을 취소하는 역할을 한다
        Schema::drop('example');
    }

 

이렇게 코드를 작성해주고 

//artisan을 활용해서 테이블을 생성해보자

php artisan migrate

 

이렇게 만들고 가서 확인해보자. 테이블이 각자 입력한 것과 맞게 생성되어있을 것이다.

이제 상황에 맞게 사용해주면 된다.

 

마이그레이션에 대한 부가적인 추가나 삭제에 대한 정보는 여기에 있다.

위에서 작성했던 아티즌 팅커에 대한 정보는 여기에 있다.

 

잘 사용한다면 편리하게 사용이 가능하겠지만 매우 작은 웹사이트라던지 코드를 통한 입력이 불편하다면 기존 방식으로 해도 충분할 것이라고 생각한다.

하지만 마이그레이션의 가장 큰 장점은 이름 그대로 데이터베이스 이전과 복구 관리에 최적화되어있다고 생각한다.

한 번쯤은 익혀놓는다면 분명히 도움될 것이라고 생각한다.

반응형