본문 바로가기

프로젝트/커뮤니티 사이트 프로젝트 - 과정

new 로그인 구성 2. 회원가입 M

해당 포스팅에서는 MVC 순서로 진행한다. 

이유는

1.디자인패턴의 MVC모델을 공부하는 데에는 그대로 모델-뷰-컨트롤러 이 순으로 하는게 더 이해하기 쉬웠기 때문이다. 

2.M에서 데이터베이스에 넣을 컬럼을 구성하면, V에서 쉽게쉽게 작성이 가능하고

  C에서는 C만의 작업에 집중 할 수 있었다.


M


 

Model(모델)

파일의 이름은 User 로, 유저에 관한 모든 작업을 진행할 것 이다. 

해당 모델을 사용했던 기능 : 회원가입,로그인,로그아웃,회원정보수정,회원탈퇴

<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Symfony\Component\HttpFoundation\Request;

class User extends Authenticatable
{
    use Notifiable;

    protected $table='users';
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
       'id', 'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'user_id', 'confirm_code', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types
     *
     * @var array
     */

}

$fillable : 입력되는 정보들을 의미, 해당 부분에 지정한 것들만 DB에 직접 입력이 가능하다. 

$hidden : 해당 부분에 넣은 컬럼들은 유저가 직접 입력하지 않아도, 전송받을 때 '자동'으로 생성된다. 

 

라라벨에선 $hidden에서 지정하지 않은 부분은 모두 입력을 받아야한다. 

만약 한곳이라도 빠트리면 한곳이 입력이 안되었다는 식으로 웁스페이지가 뜰 것이다. 

만약, 내가 $fillable 에 넣은 내용이 'id','name','email','password' 인데 V(뷰) 에서 'id','name','email' 만 입력하는 폼을 만들었다면 'password'는 입력받은 내용이 없어서 '?' 로 기록이 되고, 웁스페이지가 뜬다. 

그런데, 만약 내가 password가 null(공란)로 들어갔으면 해서 일부러 만들지 않았을 수도 있다. 그런 경우에도 꼭 폼에 해당 password를 입력받는 전송폼을 만들어줘야한다.


 

Migration(마이그레이션)

 

MVC의 M은 분명히 모델이라는 내용이지만, M에서는 채워주는 부분, 자동으로 생성하는 부분을 구성한다. 

그럼 DB의 테이블은 어디서 생성되는가에 대한 질문이 있을 수 있다. 

라라벨만을 사용해서 테이블을 생성할 수 있다. 

단! 기본 데이터베이스는 따로 만들어야할 필요가 있다. 해당 부분에 대한 구체적인 설명은 아래 설명에 있으니까 참고한다. 

https://jins-coding-blog.tistory.com/71

 

게시판 만들기 - 2. 기본 설정

초기 설정은 2가지가 있는데, 이 2가지는 처음에 설정해두면 굳이 나중에 바꿀일이 없고 추가하는 일도 거의 없다. 1. config/database.php 'connections' => [ 'mysql' => [ 'driver' => 'mysql', 'url' => env('..

jins-coding-blog.tistory.com

생성하기 위해서는 MySQL이나 다른 DB의 문법처럼 create 문이 필요하다. 일일이 DB에 들어가서 생성하는 것이 아니라 라라벨에서 생성하는 방식을 사용해본다. 

 

마이그레이션을 생성하는 명령어는 아래의 것을 사용한다.

php artisan make:migration create_'테이블이름'_table

//나의 경우
php artisan make:migrateion create_users_table

아래는 마이그레이션의 모든 코드이다.

<?php

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

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
       Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('user_id')->unsigned();
            $table->string('name');
            $table->string('id')->uniqid();
            $table->string('password');
            $table->string('email');
            $table->timestamp('email_verified_at')->nullable();
            $table->rememberToken();
            $table->timestamps();
        });
    }


    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

 

위의 내용은 기본 SQL문 생성시의 문법에서 라라벨로 조금만 바꾼 거기 때문에 굳이 설명하지 않는다. 

만약 궁금하신 분이라면 아래 주소를 참고! 

https://laravel.kr/docs/6.x/queries

 

라라벨 6.x - 쿼리 빌더

라라벨 한글 메뉴얼 6.x - 쿼리 빌더

laravel.kr

그럼 여기까지 데이터베이스 준비는 끝났으니 실제로 생성하고 사용하는 쪽으로 해본다. 

아래는 마이그레이션들을 실행하고 테이블을 만드는 명령어이다. 

php artisan migrate 

//마이그레이션 되돌리기 
php artisan migrate:rollback

해당 명령어에 대해 더 궁금하다면 위의 라라벨 주소를 들어가봐도 되고, 아래 주소도 참고부탁드린다. 

https://jins-coding-blog.tistory.com/35

 

마이그레이션

마이그레이션 = migration = 이주 데이터 스키마의 버전 관리. 데이터베이스 마이그레이션을 이용하면, 테이블에 새로운 열을 추가한다든지, 열 이름을 바꾼다든지 하는 이력을 마이그레이션 코드로 남겨 두고 필..

jins-coding-blog.tistory.com

나는 Model-Migration 순으로 정리했지만, 만약 실제로 해보실 분들이라면 반대로 해보시는 걸 추천한다. 

이미 어떤 항목들을 넣을지 생각이 정해지신 분이라면 상관없겠지만, 정해지지 않은 분이라면 마이그레이션으로 미리 테이블을 만들어놓고 그 다음 직접채워넣을 것과, 자동으로 채워넣을 것을 구분하시는게 좋을 것 같다.