Laravel 모델 팩토리로 가짜 레코드를 생성하고 사용하는 방법

게시 됨: 2023-04-28

테스트는 웹 개발에 필수적입니다. Laravel 모델 팩토리는 예측 가능하고 쉽게 복제 가능한 방식으로 데이터베이스 레코드를 정의하여 앱 테스트가 일관되고 제어되도록 합니다. 모델 팩토리는 각 Eloquent 모델에 대한 기본 속성 세트를 정의합니다.

예를 들어 작성자와 중재자가 댓글을 게시하기 전에 승인할 수 있는 블로깅 앱을 만드는 경우 사용자에게 배포하기 전에 기능이 제대로 작동하는지 테스트해야 합니다. 이 모든 것은 테스트 데이터가 필요합니다.

위에서 설명한 블로깅 앱을 테스트하려면 애플리케이션의 기능을 모방하고 테스트하기 위한 댓글 데이터가 필요합니다. 라라벨은 가짜 데이터를 생성하기 위해 라라벨 팩토리와 Faker를 사용하여 실제 사용자의 의견을 받지 않고 이를 수행할 수 있도록 합니다.

이 문서에서는 실제 사용자의 댓글 없이 댓글 데이터를 가져오는 방법을 설명합니다.

전제 조건

이 자습서를 완료하려면 다음 사항을 잘 알고 있어야 합니다.

  • XAMPP
  • 작곡가

XAMPP는 PHP, Perl 및 MariaDB(MySQL 데이터베이스)가 포함된 설치하기 쉬운 무료 Apache 배포판입니다. 이 자습서에서는 PHP 8.1.10을 설치하는 최신 버전인 8.1.10을 사용합니다. MacOS용 XAMPP를 설치하는 경우 이 문서 또는 Linux용 이 가이드를 읽으십시오. 이 튜토리얼은 Windows에서 XAMPP를 사용합니다.

Composer는 개발 및 프로덕션에서 웹 앱이 의존하는 패키지를 정의, 설치 및 다운로드할 수 있는 도구입니다. 이 자습서에서는 PHP 버전 7.2 이상이 필요한 Composer 버전 v2.4.4를 사용합니다. 이 튜토리얼에서는 Composer를 사용하여 Laravel 설치 프로그램을 설치합니다.

프로젝트를 따라갈 전체 코드를 다운로드할 수도 있습니다.

앱 테스트를 나중에 생각해서는 안 됩니다. Laravel 모델 팩토리가 도움이 될 수 있습니다!클릭하여 트윗하는 방법은 다음과 같습니다.

프로젝트 설정 방법

이 섹션에서는 Laravel 프로젝트를 생성하고 이를 데이터베이스에 연결합니다. 수반되는 모든 것과 이를 달성하는 방법을 살펴보겠습니다.

Laravel 설치 프로그램 설치

Laravel 프로젝트를 빠르게 생성하려면 Laravel 설치 프로그램을 설치하십시오.

 composer global require laravel/installer

이 코드는 시스템에 Laravel 설치 프로그램을 전역적으로 설치합니다.

라라벨 프로젝트 생성

다음으로 다음을 실행하여 Laravel 프로젝트를 만듭니다.

 laravel new app-name

이 코드는 새로운 Laravel 프로젝트를 부트스트랩하고 모든 의존성을 설치합니다:

라라벨 프로젝트 생성
라라벨 프로젝트 생성

Laravel을 설치하는 또 다른 쉬운 방법은 Composer를 직접 사용하는 것입니다.

 composer create-project laravel/laravel app-name

위의 방법을 사용할 때 Laravel 설치 프로그램을 설치할 필요가 없습니다.

앱 시작

이제 디렉토리를 app-name 으로 변경하고 Laravel의 자체 명령줄 인터페이스(CLI) 도구인 Artisan을 사용하여 프로젝트를 시작할 수 있습니다.

 php artisan serve

이 코드는 프로젝트를 시작하고 localhost:8000 또는 포트 8000이 사용 중인 경우 다른 사용 가능한 포트에 연결합니다. localhost:8000에서 다음과 같이 표시되어야 합니다.

라라벨 웹사이트 홈페이지
라라벨

데이터베이스 생성

앱을 데이터베이스에 연결하려면 XAMPP의 PHPMyAdmin 그래픽 사용자 인터페이스를 사용하여 새 데이터베이스를 만들어야 합니다. localhost/phpmyadmin 으로 이동하고 사이드바에서 새로 만들기를 클릭합니다.

PHPMyAdmin의 데이터베이스 생성 양식
데이터베이스 양식 만들기

위의 이미지는 데이터베이스 이름으로 app_name을 사용하여 데이터베이스 생성 양식을 보여줍니다.

만들기를 클릭하여 데이터베이스를 만듭니다.

.env 파일 편집

앱을 데이터베이스에 연결하려면 .env 파일의 DB 부분을 편집해야 합니다.

 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=app_name DB_USERNAME=root DB_PASSWORD=

이 코드는 데이터베이스 자격 증명을 데이터베이스 이름, 사용자 이름, 포트, 암호 및 호스트로 채웁니다. 이제 팩터리와 모델을 만들 준비가 되었습니다.

참고: 값을 데이터베이스 자격 증명으로 바꾸십시오. 또한 "사용자에 대한 액세스 거부" 오류가 발생하면 DB_USERNAMEDB_PASSWORD 값을 큰따옴표로 묶습니다.

가짜 데이터를 생성하는 방법

앱을 만들고 데이터베이스에 연결한 후 이제 데이터베이스에서 가짜 데이터를 생성하는 데 필요한 파일을 만들 수 있습니다.

댓글 모델 만들기

데이터베이스 테이블과 상호 작용할 모델 파일을 만듭니다. 모델을 생성하려면 Artisan을 사용하십시오.

 php artisan make:model Comment

이 코드는 상용구 코드가 포함된 app/Models 폴더 내에 Comment.php 파일을 생성합니다. use HasFactory; 선:

 protected $fillable = [ 'name', 'email', 'body', 'approved', 'likes' ];

이 코드는 Laravel이 기본적으로 대량 할당으로부터 데이터베이스를 보호하기 때문에 대량 할당을 허용하려는 필드를 나열합니다. 주석 모델 파일은 이제 다음과 같아야 합니다.

주석 모델 파일
주석 모델 파일

마이그레이션 파일 만들기

모델 파일을 생성하고 $fillable 배열을 선언한 후 아래 명령어를 사용하여 마이그레이션 파일을 생성해야 합니다.

 php artisan make:migration create_comments_table

참고: Laravel에서 마이그레이션을 생성하기 위한 명명 규칙은 일반적으로 underscore_case 라고도 하는 snake_case 입니다. 첫 번째 단어는 작업이고 두 번째 단어는 모델의 복수형이며 마지막 단어는 프로젝트 내부에서 생성되는 기능입니다. 즉, Book 모델에 대한 마이그레이션을 생성할 때 create_books_table 작성하게 됩니다.

이 코드는 database/migrations 폴더 내에 yyyy_mm_dd_hhmmss_create_comments_table 이라는 파일을 생성합니다.

다음으로 yyyy_mm_dd_hhmmss_create_comments_table 내에서 up 함수를 편집합니다.

 public function up() { Schema::create('comments', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email'); $table->longText('body'); $table->boolean('approved'); $table->integer('likes')->default(0); $table->timestamps(); }); }

이 코드는 id , name , email , body , approved , likestimestamps 있는 테이블을 생성하는 스키마를 생성합니다.

마이그레이션 실행

마이그레이션 파일 생성 및 편집은 명령줄을 사용하여 실행할 때까지 아무 작업도 수행하지 않습니다. 데이터베이스 관리자를 보면 여전히 비어 있습니다.

Artisan을 사용하여 마이그레이션을 실행합니다.

 php artisan migrate

이 명령은 앱을 만든 후 첫 번째 마이그레이션이므로 데이터베이스/마이그레이션 내부의 모든 마이그레이션을 실행합니다.

성공적인 마이그레이션
성공적인 마이그레이션

다음 이미지는 실행한 모든 마이그레이션 파일을 보여줍니다. 각각은 데이터베이스의 테이블을 나타냅니다.

마이그레이션 후 데이터베이스
마이그레이션 후 데이터베이스

CommentFactory 파일 생성

정의 함수가 포함된 팩토리 파일을 생성합니다. 이 데모에서는 Artisan을 사용하여 공장을 생성합니다.

 php artisan make:factory CommentFactory.php

이 코드는 database/factories 폴더 내에 CommentFactory .php 파일을 생성합니다.

정의 함수

CommentFactory 내부의 함수는 Faker가 가짜 데이터를 생성하는 방법을 정의합니다. 다음과 같이 보이도록 편집하십시오.

 public function definition() { return [ 'name' => $this->faker->name(), 'email' => $this->faker->email(), 'body' => $this->faker->sentence(45), 'approved' => $this->faker->boolean(), 'likes' => $this->faker->randomNumber(5) ]; }

이 코드는 Faker에게 다음을 생성하도록 지시합니다.

  • 이름
  • 이메일 주소
  • 45개의 문장을 포함하는 문단
  • 참 또는 거짓일 수 있는 승인된 값
  • 0에서 9999 사이의 난수

주석 모델을 CommentFactory에 연결

정의 위에 보호된 $model 변수를 선언하여 Comment 모델을 CommentFactory 에 연결합니다.

 protected $model = Comment::class;

또한 use App\Models\Comment; 파일 종속성에. 이제 CommentFactory 파일은 다음과 같아야 합니다.

CommentFactory 파일
CommentFactory 파일

데이터베이스를 시드하는 방법

프로그래밍에서 시드는 테스트 목적으로 데이터베이스에 대한 임의의 가짜 데이터를 생성하는 것을 의미합니다.

이제 모델을 만들고 마이그레이션을 실행하고 CommentFactory 내에서 정의를 만들었으므로 DatabaseSeeder 파일을 사용하여 시더를 실행합니다.

CommentSeeder 파일 생성

팩토리를 사용하여 데이터를 생성하는 시더 파일을 생성합니다.

 php artisan make:seeder CommentSeeder.php

이 코드는 database/seeders 폴더 안에 CommentSeeder .php 파일을 생성합니다.

실행 기능 편집

Comment 모델을 CommentSeeder에 연결합니다. run 함수 안에 다음 코드를 추가합니다.

 Comment::factory()->count(50)->create();

이 코드는 CommentSeeder에게 Comment 모델과 CommentFactory의 정의 함수를 사용하여 데이터베이스 내에서 50개의 댓글을 생성하도록 지시합니다. 또한 use App\Models\Comment; 파일 종속성에. 이제 CommentSeeder 파일은 다음과 같아야 합니다.

CommentSeeder 파일
코멘트 시더 파일

참고: 로컬 데이터를 생성하도록 Faker를 구성할 수 있습니다. 예를 들어 app/config.php 파일 내부의 faker_locale it_IT 로 설정하여 임의의 이름 대신 이탈리아어 이름을 생성하도록 설정할 수 있습니다. 이 가이드에서 Faker Locales에 대한 자세한 내용을 읽을 수 있습니다.

파종기 실행

다음으로 Artisan으로 시더 파일을 실행합니다.

 php artisan db:seed --class=CommentSeeder

이 코드는 시더 파일을 실행하고 데이터베이스에 50개의 가짜 데이터 행을 생성합니다.

데이터베이스 시드 성공
데이터베이스 시드 성공

이제 데이터베이스에는 애플리케이션의 기능을 테스트하는 데 사용할 수 있는 50개의 가짜 데이터 행이 있어야 합니다.

데이터베이스의 데이터 행 50개
데이터베이스의 데이터 행 50개

데이터베이스를 재설정하는 방법

생성된 데이터를 테스트용으로 사용하는 경우 테스트를 실행할 때마다 데이터베이스를 재설정하십시오. 승인된 댓글 토글 기능을 테스트하고 싶다고 가정합니다. 이전에 생성된 데이터가 향후 테스트를 방해하지 않도록 각 테스트 후 데이터베이스를 새로 고칩니다.

RefreshDatabase 사용

테스트 파일 내의 RefreshDatabase 특성을 사용하여 데이터베이스를 새로 고칩니다.

주석 use Illuminate\Foundation\Testing\RefreshDatabase; 대한 tests/Feature 폴더 내의 ExampleTest.php 로 이동합니다. test_the_application_returns_a_successful_response 함수 위에 다음 코드 줄을 추가합니다.

 use RefreshDatabase;

이제 ExampleTest.php 파일은 다음과 같아야 합니다.

ExampleTest 파일
예테스트 파일

테스트 실행

RefreshDatabase 트레이트를 테스트 파일에 추가한 후 Artisan을 사용하여 테스트를 실행합니다.

 php artisan test

이 코드는 아래 이미지와 같이 앱의 모든 테스트를 실행하고 테스트 후 데이터베이스를 새로 고칩니다.

성공적인 장인 테스트
성공적인 장인 테스트

이제 빈 주석 테이블을 보려면 데이터베이스를 확인하십시오.

빈 댓글 데이터베이스
빈 댓글 데이터베이스
수동 데이터 입력은 과거의 일입니다! Laravel Model Factory로 앱 테스트를 자동화하십시오. 여기서 시작하세요! 트윗하려면 클릭

요약

이 기사에서는 Laravel 프로젝트를 생성하고 데이터베이스에 연결하고 모델, 마이그레이션, 팩토리 및 시더 파일을 생성 및 구성하여 데이터베이스에 대한 임의 데이터를 생성하는 방법에 대해 설명했습니다. 또한 테스트를 실행한 후 데이터베이스를 재설정하는 방법에 대해서도 설명했습니다.

이제 Laravel Factory와 Faker가 최소한의 구성으로 애플리케이션을 테스트하거나 자리 표시자로 테스트 데이터를 몇 분 안에 쉽게 생성하는 방법을 확인했습니다.

Laravel 앱을 배포할 준비가 되면 Kinsta의 애플리케이션 호스팅 서비스에서 빠르고 효율적으로 배포할 수 있습니다.