Laravel 완벽 가이드 | Eloquent ORM·Blade·Middleware·Queue·Artisan
이 글의 핵심
Laravel 완벽 가이드에 대해 정리한 개발 블로그 글입니다. Laravel로 우아한 웹 앱을 구축하는 완벽 가이드입니다. Eloquent ORM, Blade 템플릿, Middleware, Queue, Artisan CLI, 인증까지 실전 예제로 정리했습니다. > 실무 경험 공유:… 개념과 예제 코드를 단계적으로 다루며, 실무·학습에 참고할 수 있도록 구성했습니다. 관련 키워드:…
이 글의 핵심
Laravel로 우아한 웹 앱을 구축하는 완벽 가이드입니다. Eloquent ORM, Blade 템플릿, Middleware, Queue, Artisan CLI, 인증까지 실전 예제로 정리했습니다.
실무 경험 공유: 레거시 PHP 프로젝트를 Laravel로 마이그레이션하면서, 개발 속도를 3배 향상시키고 코드 가독성을 크게 개선한 경험을 공유합니다.
들어가며: “PHP 코드가 스파게티예요”
실무에서 마주치는 문제들
코드 구조가 엉망이에요
레거시 PHP는 구조가 없습니다. Laravel은 MVC 패턴을 강제합니다. SQL 쿼리가 복잡해요
Raw SQL을 작성해야 합니다. Eloquent ORM은 간단합니다. 인증 구현이 어려워요
직접 구현하면 보안 이슈가 있습니다. Laravel은 내장되어 있습니다.
1. Laravel이란?
핵심 특징
Laravel은 PHP 기반 웹 프레임워크입니다. 주요 장점
- 우아한 문법: 읽기 쉬운 코드
- Eloquent ORM: 강력한 ORM
- Blade: 템플릿 엔진
- Artisan: CLI 도구
- Queue: 비동기 작업
- Ecosystem: Forge, Vapor, Nova
2. 프로젝트 생성
설치
composer create-project laravel/laravel my-app
cd my-app
php artisan serve
브라우저에서 http://localhost:8000 열림
3. Routing
// routes/web.php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});
Route::get('/users', [UserController::class, 'index']);
Route::get('/users/{id}', [UserController::class, 'show']);
Route::post('/users', [UserController::class, 'store']);
Route::put('/users/{id}', [UserController::class, 'update']);
Route::delete('/users/{id}', [UserController::class, 'destroy']);
// 또는 Resource Route
Route::resource('users', UserController::class);
4. Eloquent ORM
모델 생성
php artisan make:model User -m
모델 정의
// app/Models/User.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $fillable = ['name', 'email', 'age'];
protected $hidden = ['password'];
protected $casts = [
'created_at' => 'datetime',
];
public function posts()
{
return $this->hasMany(Post::class);
}
}
마이그레이션
// database/migrations/2026_05_21_000000_create_users_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->integer('age')->nullable();
$table->boolean('is_active')->default(true);
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
};
5. Controller
생성
php artisan make:controller UserController --resource
CRUD
// app/Http/Controllers/UserController.php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index()
{
$users = User::all();
return response()->json($users);
}
public function show($id)
{
$user = User::findOrFail($id);
return response()->json($user);
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:100',
'email' => 'required|email|unique:users',
'age' => 'nullable|integer|min:0',
]);
$user = User::create($validated);
return response()->json($user, 201);
}
public function update(Request $request, $id)
{
$user = User::findOrFail($id);
$validated = $request->validate([
'name' => 'string|max:100',
'email' => 'email|unique:users,email,' . $id,
'age' => 'nullable|integer|min:0',
]);
$user->update($validated);
return response()->json($user);
}
public function destroy($id)
{
$user = User::findOrFail($id);
$user->delete();
return response()->json(null, 204);
}
}
6. Blade 템플릿
레이아웃
{{-- resources/views/layouts/app.blade.php --}}
<!DOCTYPE html>
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
<nav>
<a href="/">Home</a>
<a href="/users">Users</a>
</nav>
<main>
@yield('content')
</main>
</body>
</html>
페이지
{{-- resources/views/users/index.blade.php --}}
@extends('layouts.app')
@section('title', 'Users')
@section('content')
<h1>Users</h1>
<ul>
@foreach($users as $user)
<li>
<a href="/users/{{ $user->id }}">
{{ $user->name }}
</a>
</li>
@endforeach
</ul>
@endsection
7. Middleware
생성
php artisan make:middleware CheckAge
정의
// app/Http/Middleware/CheckAge.php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
public function handle($request, Closure $next)
{
if ($request->age < 18) {
return response('Unauthorized', 401);
}
return $next($request);
}
}
등록
// app/Http/Kernel.php
// 실행 예제
protected $routeMiddleware = [
'check.age' => \App\Http\Middleware\CheckAge::class,
];
사용
Route::get('/adult-content', function () {
return 'Adult content';
})->middleware('check.age');
8. Queue (비동기 작업)
Job 생성
php artisan make:job SendWelcomeEmail
Job 정의
// app/Jobs/SendWelcomeEmail.php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Mail;
class SendWelcomeEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $user;
public function __construct($user)
{
$this->user = $user;
}
public function handle()
{
Mail::to($this->user->email)->send(new WelcomeEmail($this->user));
}
}
디스패치
use App\Jobs\SendWelcomeEmail;
$user = User::create($data);
SendWelcomeEmail::dispatch($user);
Worker 실행
php artisan queue:work
9. 배포
환경 설정
# .env
APP_ENV=production
APP_DEBUG=false
APP_URL=https://myapp.com
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=myapp
DB_USERNAME=root
DB_PASSWORD=secret
최적화
# 설정 캐싱
php artisan config:cache
# 라우트 캐싱
php artisan route:cache
# View 캐싱
php artisan view:cache
# Composer 최적화
composer install --optimize-autoloader --no-dev
정리 및 체크리스트
핵심 요약
- Laravel: PHP 웹 프레임워크
- Eloquent ORM: 강력한 ORM
- Blade: 템플릿 엔진
- Artisan: CLI 도구
- Queue: 비동기 작업
- Ecosystem: 풍부한 생태계
구현 체크리스트
- Laravel 프로젝트 생성
- Models 및 Migration 작성
- Controller 구현
- Routing 설정
- Blade 템플릿 작성
- Middleware 구현
- Queue 설정
- 배포
같이 보면 좋은 글
- Django 완벽 가이드
- NestJS 완벽 가이드
- PostgreSQL 고급 가이드
이 글에서 다루는 키워드
Laravel, PHP, Backend, Eloquent, MVC, REST API, Full Stack
자주 묻는 질문 (FAQ)
Q. Laravel vs Symfony, 어떤 게 나은가요?
A. Laravel이 더 사용하기 쉽습니다. Symfony는 더 유연합니다. 대부분의 경우 Laravel을 권장합니다.
Q. PHP 8이 필요한가요?
A. Laravel 10+는 PHP 8.1 이상이 필요합니다.
Q. 성능은 어떤가요?
A. 적절히 최적화하면 충분히 빠릅니다. OPcache, Redis 캐싱을 사용하세요.
Q. 프로덕션에서 사용해도 되나요?
A. 네, 전 세계 수많은 웹사이트가 Laravel로 만들어졌습니다.