Laravel API 프로젝트 10단계 - 구현 (데이터 베이스)

Database Table 구조

테이블은 기본 프로젝트 생성시 같이 생성되는 users 테이블을 사용하겠습니다.

users 테이블의 구조 정보는 database/migrations/2014_10_12_000000_create_users_table.php 파일에 정의되어 있습니다.

Laravel에서는 정의되어 있는 파일을 참조해서 테이블로 만들어주고, 갱신해주는 등 다양한 기능을 제공합니다.

Spring에서 JPA의 ddl-auto 기능과 유사한 이 기능을 마이그레이션이라고 부릅니다.

 

root@80612f23b0cf:/var/www/html# cd /var/www/html/laravel-api
root@80612f23b0cf:/var/www/html/laravel-api# php artisan migrate --path=database/migrations/2014_10_12_000000_create_users_table.php
PHP Warning:  Module "pdo_mysql" is already loaded in Unknown on line 0

   INFO  Preparing database.

  Creating migration table ............................................................................................................... 64ms DONE

   INFO  Running migrations.

  2014_10_12_000000_create_users_table ................................................................................................... 91ms DONE

 

프로젝트로 이동 후 마이그레이션 명령어를 실행하면 Database에 users 테이블이 자동으로 만들어집니다.

 

더미 데이터 생성

Laravel에는 더미 데이터를 생성해주는 모델 팩토리라는 아주 편리한 기능있는데, 이 기능을 사용해서 더미 데이터를 만들어보겠습니다.

 

더미 데이터를 생성하려면 팩토리와 시드를 작업해줘야 합니다.

팩토리는 프로젝트 생성시 기본으로 database/factories/UserFactory.php 경로에 만들어지기 때문에 따로 만들지는 않겠습니다.

 

php artisan make:factory UserFactory.php

 

팩토리 생성 명령어 입니다.

 

<?php

namespace Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;

/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
 */
class UserFactory extends Factory
{
    /**
     * The current password being used by the factory.
     */
    protected static ?string $password;

    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        return [
            'name' => fake()->name(),
            'email' => fake()->unique()->safeEmail(),
            'email_verified_at' => now(),
            'password' => static::$password ??= Hash::make('password'),
            'remember_token' => Str::random(10),
        ];
    }

    /**
     * Indicate that the model's email address should be unverified.
     */
    public function unverified(): static
    {
        return $this->state(fn (array $attributes) => [
            'email_verified_at' => null,
        ]);
    }
}

 

대충 보시면 아시겠지만 definition 메서드에서 users 테이블의 컬럼에 해당하는 값들을 어떻게 기준으로 더미데이터를 만들것인지 정의하고있습니다.

 

시드를 만들어보겠습니다.

 

root@80612f23b0cf:/var/www/html/laravel-api# php artisan make:seeder UserSeeder
PHP Warning:  Module "pdo_mysql" is already loaded in Unknown on line 0

   INFO  Seeder [database/seeders/UserSeeder.php] created successfully.

 

위의 명령어로 시드 파일을 생성해주세요.

 

 database/seeders/UserSeeder.php 경로에 파일이 생성되었습니다.

 

<?php

namespace Database\Seeders;

use App\Models\User;
use Illuminate\Database\Seeder;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        User::factory(10)->create();
    }
}

 

factory 메서드 인자에 10을 넣었으니, 더미 데이터 추가 명령어 실행시 더미 데이터 10개가 생성됩니다.

 

root@80612f23b0cf:/var/www/html/laravel-api# php artisan db:seed --class=UserSeeder
PHP Warning:  Module "pdo_mysql" is already loaded in Unknown on line 0

   INFO  Seeding database.

 

 

더미 데이터가 팩토리에서 정의한대로 생성되었습니다.