โง '๋ฉ๋ฉํ์ ๋ผ๋ผ๋ฒจ๋ก ์๋ก ๋ง๋ค๊ธฐ' ํ๋ก์ ํธ ๋ชฉ์ฐจ โง (๋ณด์๋ ค๋ฉด ์๋ ๋๋ณด๊ธฐ ๋ฅผ ๋๋ฌ์ฃผ์ธ์.)
0. ๋ผ๋ผ๋ฒจ(laravel) ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถํ๊ธฐ-๋ฐฉ๋ฒ2 (Windows & ๋์ปค(docker) & sail ํ์ฉ)
2. ๊ธฐ์กด ์์ค๋ฅผ ํ๋์ ๋ธ๋ ์ด๋๋ก
5. ๊ธฐ์กด PHP ๋ก์ง์ ์ปจํธ๋กค๋ฌ๋ก
6. ๋ธ๋ ์ด๋ ๋ฌธ๋ฒ์ผ๋ก ์์
7. ์ธ๋ถ ๋ธ๋ ์ด๋ ํ์ผ, component ํ์ฉ
8. (DB) Model ๋ฐ ๊ธฐํ ํ์ผ ์์ฑ
9. (DB) ๋๋ฏธ๋ฐ์ดํฐ๋ฅผ ํ๊ธ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ
10. (DB) ๋ชจ๋ธ, DB ํ์ฉ ์ฐ์ต
11. (DB) ๊ธฐ์กด ๋ฐ์ดํฐ ๋ฐฐ์ด์ DB๋ก ๋ณํ
12. (DB) DB ๋ฐ ๋ชจ๋ธ์ ์ด์ฉํ์ฌ ๊ตฌํ
13. ๋ก๊ทธ์ธ ๊ตฌํ์ ์ํ ์คํํฐํคํธ Breeze ์ค์น ๋ฐ ๋ก๊ทธ์ธ ์์
14. ๋ก๊ทธ์ธ ์ฐฝ ๋ท๋ฐฐ๊ฒฝ๋ ๋์์์ด ๋ณด์ด๋๋ก ์์
15. ๊ด๋ฆฌ์ ํ๋ฉด์์ ์ ์ฒด ๊ฒ์๊ธ ๋ฆฌ์คํธ ํ๋ฒ์ ๋ณด๊ธฐ
16. ๊ด๋ฆฌ์ ํ๋ฉด์์ ๊ฒ์๊ธ ์์ ํ๊ธฐ
17. ๊ด๋ฆฌ์ ํ๋ฉด์์ ๊ฒ์๊ธ ์ญ์ ํ๊ธฐ
ํ์ฌ ๋ณด์ฌ์ง๋ ํ๋ก๊ทธ๋จ ์ค๋ช ๋ค์ ์ปจํธ๋กค๋ฌ ์์ ๋ฐฐ์ด๋ก ํ๋ ์ฝ๋ฉ ๋์ด ์์ต๋๋ค. ์ด๊ฒ์ DB์ ์ ์ฅํด๋๊ณ ๋ชจ๋ธ์ ์ด์ฉํ์ฌ ๋ถ๋ฌ์ฌ ์ ์๋๋ก ์์ ํ ๊ฒ์ ๋๋ค.
1. DB ์ฐ๊ฒฐ ์ค์
.env ํ์ผ์ ๋ณด๋ฉด ์๋์ ๊ฐ์ด DB ์ ์ ๊ด๋ จ ๋ด์ฉ์ด ์ค์ ๋์ด ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ์ด ๊ธฐ๋ณธ ๋ด์ฉ ๊ทธ๋๋ก๋ฅผ ์ฌ์ฉํฉ๋๋ค.

๊ทธ๋ฆฌ๊ณ , ์ ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ๋ณธ ๊ฐ๋ฐํ๊ฒฝ์ ์๋์ฐ์ฆ์์ docker๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค. ํฐ๋ฏธ๋์์ wsl๋ฅผ ์ ๋ ฅ ํ ./vendor/bin/sail up์ ์ ๋ ฅํ์ฌ ์คํ์์ผฐ๋ค๋ฉด, ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ๊ฐ์ด munghome ์ด๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํ๋ ์์ฑ๋์ด ์์ ๊ฒ์ ๋๋ค. ํน์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ๋ฐ ํ๊ฒฝ์ ์คํ์์ผฐ์ ๊ฒฝ์ฐ ๊ฐ์์ ๋ฐฉ๋ฒ์ผ๋ก DB๋ฅผ ์์ฑํ์๊ธฐ ๋ฐ๋๋๋ค.
2. Model, Factory, migration ์์ฑ
๊ฐ. Post ๊ด๋ จ ํ์ผ๋ค ์์ฑ (ํ๋ก๊ทธ๋จ ์ค๋ช ๋ค์ ์ ์ฅํด๋๋ DB์ ๊ด๋ จ์๋ ๊ฒ๋ค)
docker exec -it munghome-laravel.test-1 php artisan make:model Post -cmf or ./vendor/bin/sail php artisan make:model Post -cmf or php artisan make:model Post -cmf
์ฝ์์ ์์ ๊ฐ์ด ์ ๋ ฅํ๋ฉด ์๋์ ๊ฐ์ ํ์ผ๋ค์ด ์์ฑ๋ฉ๋๋ค.


๋. Category ๊ด๋ จ ํ์ผ๋ค ์์ฑ (ํ๋ก๊ทธ๋จ์ ๋ถ๋ฅํด ๋๊ธฐ ์ํ ์นดํ ๊ณ ๋ฆฌ๋ค์ ์ ์ฅํด๋๋ DB์ ๊ด๋ จ์๋ ๊ฒ๋ค)
์ ๊ฐ๋ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋์ ๊ฐ์ด ์ ๋ ฅํ๋ฉด, ํ์ํ ํ์ผ๋ค์ด ์์ฑ๋๋ค. (๋จ, ์ต์ ์ค์ -c (์ปจํธ๋กค๋ฌ)๋ ์์ฑํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ๋ ฅํ์ง ์์.)
docker exec -it munghome-laravel.test-1 php artisan make:model Category -mf
3. database/migrations ์์ => ํ ์ด๋ธ ๋ฐ ํ๋ ์์ฑ์ ์ํ ์ ๋ณด ์ ๋ ฅ
๊ฐ. 2022_10_02_134550_create_posts_table.php ์์ (์ด ํ์ผ ์ด๋ฆ์ ํ์ผ ์์ฑ์์ ๋ ์ง ์๊ฐ ๋ฑ์ด ์๋์ผ๋ก ๋ถ์ฌ๋จ.)
public function up() { Schema::create('posts', function (Blueprint $table) { $table->id(); $table->integer('order'); $table->foreignId('category_id'); $table->date('created'); $table->string('title'); $table->string('version'); $table->text('excerpt'); $table->text('body'); $table->text('link_blog')->nullable()->default(NULL); $table->text('link_youtube')->nullable()->default(NULL); $table->timestamps(); }); }
๋. 2022_10_03_003200_create_categories_table.php ์์ (์ด ํ์ผ ์ด๋ฆ์ ํ์ผ ์์ฑ์์ ๋ ์ง ์๊ฐ ๋ฑ์ด ์๋์ผ๋ก ๋ถ์ฌ๋จ.)
public function up() { Schema::create('categories', function (Blueprint $table) { $table->id(); $table->string('name'); $table->integer('order'); $table->timestamps(); }); }
4. database/factories ์์ => ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ธฐ ์ํจ.
๊ฐ. PostFactory.php ์์
public function definition() { return [ 'order' => 1, 'category_id' => Category::factory(), 'created' => now(), 'version' => '1.0', 'title' => $this->faker->sentence(), 'excerpt' => $this->faker->sentence(), 'link_blog' => 'https://mungkhs.tistory.com/104', 'link_youtube' => 'https://youtu.be/PoLoiscfgMo', 'body' => '<p>'.implode('</p><p>', $this->faker->paragraphs(6)).'</p>', ]; }
๋. CategoryFactory.php ์์
public function definition() { return [ 'name' => $this->faker->unique()->wordsslug(2,true), //wordsslug ํจ์๋ ํ๊ธ์ ์ฐ๊ธฐ ์ํด ์ ๊ฐ ์๋ก ๋ง๋ ํจ์์
๋๋ค. //๋ฐ๋ผ์ ๊ทธ๋ฅ ์ฌ์ฉํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. //ํ๊ธ ๋ฐ ์ wordsslug ํจ์๋ฅผ ์ฐ๋ ค๋ฉด ๋ค์ ๊ฒ์๊ธ์ ์ฐธ๊ณ ํ์๊ณ , //๊ทธ๋ฅ ๋ผํด์ด๋ก ์ฌ์ฉํ๋ ค๋ฉด ์๋ฅผ ์ฃผ์์ฒ๋ฆฌํ๊ณ , ์๋ ์ฃผ์์ ์ง์์ฃผ์ธ์. //'name' => $this->faker->unique()->word(), 'order' => 1, ]; }
๋ค. database/seeders/DatavaseSeeder.php ์์ => ๋๋ฏธ๋ฐ์ดํฐ ์์ฑ ๊ฐฏ์ ๋ฑ ์ค์
public function run() { Post::factory(15)->create(); }
5. app/Http/Models ์์
๊ฐ. Post.php ์์
class Post extends Model { use HasFactory; public function category() { return $this->belongsTo(Category::class); } }
๋. Category.php ์์
class Category extends Model { use HasFactory; public function posts() { return $this->hasMany(Post::class); } }
6. ๋๋ฏธ ๋ฐ์ดํฐ ์ค์ ์์ฑ
docker exec -it munghome-laravel.test-1 php artisan migrate:fresh --seed
์ฝ์์ ์์ ๊ฐ์ด ๋ช ๋ น์ ๋ด๋ฆฌ๋ฉด, ์๋์ ๊ฐ์ด ์ค์ ๋๋ฏธ๋ฐ์ดํฐ๋ค์ด DB์ ์์ฑ๋๋ค.


7. ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ํ๊ธ๋ก ๋ง๋ค๊ธฐ => ๋ค์ ๊ฒ์๊ธ ์ฐธ๊ณ
๊ธฐ๋ณธ ์ค์ ์ํ์์ ์ ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด๋ณด๋ฉด ๋ผํด์ด๋ก ์์ฑ๋ฉ๋๋ค. ์ ๋ ๋ช๊ฐ์ง ์์ ์ ํตํด ๋๋ฏธ๋ฐ์ดํฐ๋ ๋ชจ๋ ํ๊ธ๋ก ์์ฑํด์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ ์ ๊ฐ์ด ํ๊ธ๋ก ์ค์ ํ์๋ ค๋ฉด ๋ค์ ๊ฒ์๋ฌผ์ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
๐บ๐บ ์์ ํ ๋ชจ๋ ์์ค๋ ์๋ ๋งํฌ์์ ํ์ธํ์ค ์ ์์ต๋๋ค. ๐บ๐บ
https://github.com/mmssem/munghome
GitHub - mmssem/munghome
Contribute to mmssem/munghome development by creating an account on GitHub.
github.com
'๋ผ๋ผ๋ฒจ(laravel)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
- 1. DB ์ฐ๊ฒฐ ์ค์
- 2. Model, Factory, migration ์์ฑ
- 3. database/migrations ์์ => ํ ์ด๋ธ ๋ฐ ํ๋ ์์ฑ์ ์ํ ์ ๋ณด ์ ๋ ฅ
- 4. database/factories ์์ => ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ธฐ ์ํจ.
- 5. app/Http/Models ์์
- 6. ๋๋ฏธ ๋ฐ์ดํฐ ์ค์ ์์ฑ
- 7. ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ํ๊ธ๋ก ๋ง๋ค๊ธฐ => ๋ค์ ๊ฒ์๊ธ ์ฐธ๊ณ