PHP Laravel ๊ฐ๋ฐ์ ๋ฉด์ ์ง๋ฌธ 2026: ์๋ฒฝ ์ค๋น ๊ฐ์ด๋
2026๋ Laravel 13 ๋์ ๋ฉด์ ๊ฐ์ด๋์ ๋๋ค. Eloquent ORM, ์๋น์ค ์ปจํ ์ด๋, ์ธ์ฆ ํจํด, ํ ์ฒ๋ฆฌ, ํ ์คํธ ์ ๋ต ๋ฑ Laravel ์์ง๋์ด ๋ฉด์ ์์ ์์ฃผ ๋ฌป๋ ํต์ฌ ์ฃผ์ ๋ฅผ ์์ธํ ๋ค๋ฃน๋๋ค.

PHP Laravel ๊ฐ๋ฐ์ ๋ฉด์ ์์๋ ํ๋ ์์ํฌ ์ง์๊ณผ ์ํํธ์จ์ด ์ค๊ณ ์์น์ ํจ๊ป ํ๊ฐํฉ๋๋ค. 2026๋ 3์์ ์ถ์๋ Laravel 13์์๋ AI SDK, PHP Attributes, Passkey ์ธ์ฆ์ด ๋์ ๋์์ผ๋ฉฐ, ๋ฉด์ ๊ด๋ค์ ์ต์ ๊ธฐ๋ฅ์ ๋ํ ์ดํด์ ํต์ฌ ๊ธฐ์ด ์ง์์ ๋ชจ๋ ๊ธฐ๋ํฉ๋๋ค.
Laravel ๋ฉด์ ์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ฏ ๊ฐ์ง ํต์ฌ ์์ญ์ ๋ค๋ฃน๋๋ค: Eloquent ORM ๊ด๊ณ ๋ฐ ์ฑ๋ฅ, ์๋น์ค ์ปจํ ์ด๋์ ์์กด์ฑ ์ฃผ์ , ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ ํจํด, ํ์ ์์ ์ฒ๋ฆฌ, ํ ์คํธ ์ ๋ต์ ๋๋ค. ์๋์ด ํฌ์ง์ ์ ๊ฒฝ์ฐ ์ํคํ ์ฒ ๊ฒฐ์ ๊ณผ ํจํค์ง ์ํ๊ณ ์ง์๋ ์ถ๊ฐ๋ฉ๋๋ค.
Eloquent ORM ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ์ง๋ฌธ
Eloquent๋ Laravel ๋ฉด์ ์์ ๊ฐ์ฅ ๋ง์ด ๋ ผ์๋๋ ์ฃผ์ ์ ๋๋ค. ๋ฉด์ ๊ด์ ์ง์ฐ ๋ก๋ฉ๊ณผ ์ฆ์ ๋ก๋ฉ, ๊ด๊ณ ์ ํ, ์ฟผ๋ฆฌ ์ต์ ํ์ ๋ํ ์ดํด๋๋ฅผ ํ๊ฐํฉ๋๋ค.
Q: N+1 ๋ฌธ์ ๋ ๋ฌด์์ด๋ฉฐ Laravel์ ์ด๋ป๊ฒ ํด๊ฒฐํฉ๋๊น?
N+1 ๋ฌธ์ ๋ ์ฝ๋๊ฐ ์ปฌ๋ ์
์ ๊ฐ์ ธ์ค๊ธฐ ์ํด ํ๋์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ํ, ๊ฐ ํญ๋ชฉ์ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ธฐ ์ํด N๊ฐ์ ์ถ๊ฐ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋ ๋ฐ์ํฉ๋๋ค. Laravel์ with()๋ฅผ ํตํ ์ฆ์ ๋ก๋ฉ์ผ๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
// N+1 ๋ฌธ์ : ๊ฒ์๋ฌผ์ฉ 1๊ฐ ์ฟผ๋ฆฌ + ์์ฑ์์ฉ N๊ฐ ์ฟผ๋ฆฌ
$posts = Post::all();
foreach ($posts as $post) {
echo $post->author->name; // ๊ฒ์๋ฌผ๋น ์ฟผ๋ฆฌ ๋ฐ์
}
// ํด๊ฒฐ์ฑ
: with()๋ก ์ฆ์ ๋ก๋ฉ
$posts = Post::with('author')->get(); // ์ด 2๊ฐ ์ฟผ๋ฆฌ
foreach ($posts as $post) {
echo $post->author->name; // ์ถ๊ฐ ์ฟผ๋ฆฌ ์์
}Laravel 13์ ๊ฐ๋ฐ ํ๊ฒฝ์์ strict ๋ชจ๋๋ฅผ ์ ์งํ์ฌ ์ง์ฐ ๋ก๋ฉ ๋ฐ์ ์ ์์ธ๋ฅผ ๋์ง๋ฏ๋ก N+1 ๋ฌธ์ ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค.
Q: hasOne, hasMany, belongsTo, belongsToMany์ ์ฐจ์ด์ ์ ์ค๋ช
ํ์ญ์์ค.
| ๊ด๊ณ | ์ธ๋ ํค ์์น | ์์ |
|---|---|---|
| hasOne | ๊ด๋ จ ๋ชจ๋ธ | User hasOne Profile (profiles.user_id) |
| hasMany | ๊ด๋ จ ๋ชจ๋ธ | User hasMany Posts (posts.user_id) |
| belongsTo | ํ์ฌ ๋ชจ๋ธ | Post belongsTo User (posts.user_id) |
| belongsToMany | ํผ๋ฒ ํ ์ด๋ธ | User belongsToMany Roles (role_user ํ ์ด๋ธ) |
Q: ์ํํธ ์ญ์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ๊ณผ ๊ทธ ์ํฅ์ ๋ํด ์ค๋ช ํ์ญ์์ค.
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model
{
use SoftDeletes;
// ์ํํธ ์ญ์ ๋ ๋ ์ฝ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ธ๋จ
// ํฌํจํ๋ ค๋ฉด:
// Post::withTrashed()->get();
// ์ญ์ ๋ ๊ฒ๋ง ๊ฐ์ ธ์ค๋ ค๋ฉด:
// Post::onlyTrashed()->get();
}์ํํธ ์ญ์ ๋ deleted_at ์ปฌ๋ผ์ ์ถ๊ฐํฉ๋๋ค. ๋ช
์์ ์ผ๋ก ์์ฒญํ์ง ์๋ ํ ์ฟผ๋ฆฌ๋ ์ํํธ ์ญ์ ๋ ๋ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์ ์ธํฉ๋๋ค. ์ด๋ ์ ๋ํฌ ์ ์ฝ ์กฐ๊ฑด์ ์ํฅ์ ๋ฏธ์น๋ฉฐ ์ต์ ์ ์ฑ๋ฅ์ ์ํด deleted_at๋ฅผ ํฌํจํ๋ ๋ณตํฉ ์ธ๋ฑ์ค๊ฐ ํ์ํฉ๋๋ค.
์๋น์ค ์ปจํ ์ด๋์ ์์กด์ฑ ์ฃผ์
์๋น์ค ์ปจํ ์ด๋๋ Laravel์ ํต์ฌ์ ๋๋ค. ๋ฐ์ธ๋ฉ, ํด๊ฒฐ, ์ปจํ ์คํธ ์ฃผ์ ์ ๋ํ ์ดํด๊ฐ ์ฃผ๋์ด์ ์๋์ด ์ง์์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
Q: ์๋น์ค ์ปจํ ์ด๋๋ ๋ฌด์์ด๋ฉฐ ์ ์ค์ํฉ๋๊น?
์๋น์ค ์ปจํ ์ด๋๋ ํด๋์ค ์์กด์ฑ์ ๊ด๋ฆฌํ๊ณ ์์กด์ฑ ์ฃผ์ ์ ์ํํฉ๋๋ค. ํด๋์ค๋ฅผ ์๋์ผ๋ก ํด๊ฒฐํ์ฌ ๋์จํ ๊ฒฐํฉ๊ณผ ํ ์คํธ ์ฉ์ด์ฑ์ ์ ๊ณตํฉ๋๋ค.
public function register(): void
{
// ์ธํฐํ์ด์ค ๋ฐ์ธ๋ฉ
$this->app->bind(
PaymentGatewayInterface::class,
StripePaymentGateway::class
);
// ์ฑ๊ธํค: ๋งค๋ฒ ๋์ผํ ์ธ์คํด์ค
$this->app->singleton(ReportGenerator::class, function ($app) {
return new ReportGenerator($app->make(Cache::class));
});
}Q: bind(), singleton(), instance()์ ์ฐจ์ด์ ์ ๋ฌด์์
๋๊น?
bind(): ํด๋์ค๊ฐ ํด๊ฒฐ๋ ๋๋ง๋ค ์ ์ธ์คํด์ค ์์ฑsingleton(): ํ๋์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ดํ ํด๊ฒฐ ์ ๋์ผํ ์ธ์คํด์ค ๋ฐํinstance(): ๊ธฐ์กด ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์ปจํ ์ด๋์ ๋ฐ์ธ๋ฉ
// bind: ๋งค๋ฒ ์ ์ธ์คํด์ค
$this->app->bind(Service::class, fn() => new Service());
// singleton: ์ ์ฒด ์์ฒญ ์๋ช
์ฃผ๊ธฐ ๋์ ํ๋์ ์ธ์คํด์ค
$this->app->singleton(Cache::class, fn() => new RedisCache());
// instance: ์ด๋ฏธ ์ธ์คํด์คํ๋ ๊ฐ์ฒด ๋ฐ์ธ๋ฉ
$config = new Config(['debug' => true]);
$this->app->instance(Config::class, $config);์๋น์ค ์ปจํ ์ด๋ ๊ฐ๋ ์ ๋ํ ์ฐ์ต์ ์๋น์ค ์ปจํ ์ด๋ & DI ๋ชจ๋์์ ํ์ธํ ์ ์์ต๋๋ค.
Laravel ๋ฉด์ ์ค๋น๊ฐ ๋์ จ๋์?
์ธํฐ๋ํฐ๋ธ ์๋ฎฌ๋ ์ดํฐ, flashcards, ๊ธฐ์ ํ ์คํธ๋ก ์ฐ์ตํ์ธ์.
์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ ํจํด
Laravel 13์์๋ ๊ธฐ์กด ๋ฐฉ๋ฒ๊ณผ ํจ๊ป Passkey ์ธ์ฆ์ด ๋์ ๋์์ต๋๋ค. ๋ฉด์ ๊ด์ Sanctum, Passport, ์ ์ฑ , ๊ฒ์ดํธ์ ๋ํ ์ง์์ ๊ธฐ๋ํฉ๋๋ค.
Q: Sanctum๊ณผ Passport๋ ์ธ์ ์ฌ์ฉํฉ๋๊น?
| ๊ธฐ๋ฅ | Sanctum | Passport |
|---|---|---|
| ์ฌ์ฉ ์ฌ๋ก | SPA, ๋ชจ๋ฐ์ผ ์ฑ, ๊ฐ๋จํ API ํ ํฐ | OAuth2 ์๋ฒ, ์๋ํํฐ ์ ๊ทผ |
| ํ ํฐ ์ ํ | ๊ฐ๋จํ API ํ ํฐ, ์ธ์ ๊ธฐ๋ฐ | OAuth2 ์ก์ธ์ค ํ ํฐ, ๋ฆฌํ๋ ์ ํ ํฐ |
| ๋ณต์ก๋ | ์ต์ํ์ ์ค์ | ์์ ํ OAuth2 ๊ตฌํ |
| ํ ํฐ ์ค์ฝํ | ์ด๋น๋ฆฌํฐ(๋ ๊ฐ๋จํจ) | OAuth ์ค์ฝํ |
Sanctum์ ๋๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค. Passport๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ํํฐ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ OAuth2 ์ ๊ณต์ ์ญํ ์ ํด์ผ ํ ๋ ํ์ํฉ๋๋ค. ์์ธํ ๋น๊ต๋ Laravel Sanctum vs Passport๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
Q: ์ ์ฑ (Policy)๊ณผ ๊ฒ์ดํธ(Gate)์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
๊ฒ์ดํธ๋ ํด๋ก์ ๊ธฐ๋ฐ ๊ถํ ๋ถ์ฌ ํ์ธ์ ๋๋ค. ์ ์ฑ ์ ํน์ ๋ชจ๋ธ์ ๊ถํ ๋ถ์ฌ ๋ก์ง์ ๊ทธ๋ฃนํํ๋ ํด๋์ค์ ๋๋ค.
class PostPolicy
{
public function update(User $user, Post $post): bool
{
return $user->id === $post->user_id;
}
public function delete(User $user, Post $post): bool
{
return $user->id === $post->user_id
|| $user->hasRole('admin');
}
}
// ์ปจํธ๋กค๋ฌ์์ ์ฌ์ฉ
public function update(Request $request, Post $post)
{
$this->authorize('update', $post); // PostPolicy ์ฌ์ฉ
// ... ์
๋ฐ์ดํธ ๋ก์ง
}๊ถํ ๋ถ์ฌ & ์ ์ฑ ๋ชจ๋์์ ๊ณ ๊ธ ๊ถํ ๋ถ์ฌ ํจํด์ ๋ค๋ฃน๋๋ค.
ํ์ ์์ ์ฒ๋ฆฌ
ํ๋ ํ์ฅ ๊ฐ๋ฅํ Laravel ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ์ ๋๋ค. ๋ฉด์ ๊ด์ ์์ ์ค๊ณ, ์คํจ ์ฒ๋ฆฌ, ํ ๋๋ผ์ด๋ฒ์ ๋ํ ์ดํด๋๋ฅผ ํ๊ฐํฉ๋๋ค.
Q: Laravel์์ ์คํจํ ์์ ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํฉ๋๊น?
class ProcessPodcast implements ShouldQueue
{
use Queueable;
public int $tries = 3;
public int $backoff = 60; // ์ฌ์๋ ๊ฐ๊ฒฉ(์ด)
public int $timeout = 120;
public function handle(): void
{
// ์์
๋ก์ง
}
public function failed(Throwable $exception): void
{
// ๊ด๋ฆฌ์์๊ฒ ์๋ฆผ, ์ธ๋ถ ์๋น์ค์ ๋ก๊ทธ
Log::error('ํ์บ์คํธ ์ฒ๋ฆฌ ์คํจ', [
'podcast_id' => $this->podcast->id,
'error' => $exception->getMessage()
]);
}
}์คํจํ ์์
์ failed_jobs ํ
์ด๋ธ์ ์ ์ฅ๋ฉ๋๋ค. php artisan queue:retry๋ก ํน์ ์์
์ ์ฌ์๋ํ๊ฑฐ๋ queue:retry all๋ก ์ผ๊ด ์ฌ์๋ํ ์ ์์ต๋๋ค.
Q: dispatch()์ dispatchSync()์ ์ฐจ์ด์ ์ ๋ฌด์์
๋๊น?
dispatch(): ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ํ์ ์์ ์ถ๊ฐdispatchSync(): ํ๋ฅผ ์ฐํํ์ฌ ํ์ฌ ํ๋ก์ธ์ค์์ ์ฆ์ ์์ ์คํ
dispatchSync()๋ ํ
์คํธ๋ ๊ฒฐ๊ณผ๊ฐ ์ฆ์ ํ์ํ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค. ํ๋ก๋์
ํ๊ฒฝ์์๋ ์์ฒญ์ ์ฐจ๋จํ์ง ์๋๋ก ๋๋ถ๋ถ์ ์์
์ dispatch()๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
Pest๋ฅผ ์ฌ์ฉํ Laravel ํ ์คํธ
Laravel 13์ ๊ธฐ๋ณธ ํ ์คํธ ํ๋ ์์ํฌ๋ก Pest๋ฅผ ํฌํจํฉ๋๋ค. ๋ฉด์ ๊ด์ ๊ธฐ๋ฅ ํ ์คํธ, ๋จ์ ํ ์คํธ, ๋ชจํน, ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ ์ ๋ต์ ๋ํ ์ดํด๋๋ฅผ ํ๊ฐํฉ๋๋ค.
Q: ์ธ๋ถ API์ ์์กดํ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์ด๋ป๊ฒ ํ ์คํธํฉ๋๊น?
use App\Services\PaymentGateway;
use App\Services\FakePaymentGateway;
test('๊ฒฐ์ ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋จ', function () {
// ํ
์คํธ์ฉ ํ์ดํฌ ๊ตฌํ ๋ฐ์ธ๋ฉ
$this->app->bind(
PaymentGateway::class,
FakePaymentGateway::class
);
$response = $this->postJson('/api/payments', [
'amount' => 1000,
'currency' => 'usd'
]);
$response->assertStatus(200)
->assertJson(['status' => 'completed']);
});
test('๊ฒฐ์ ๊ฐ ๊ฒ์ดํธ์จ์ด ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํจ', function () {
$mock = Mockery::mock(PaymentGateway::class);
$mock->shouldReceive('charge')
->once()
->andThrow(new PaymentFailedException('์นด๋ ๊ฑฐ๋ถ'));
$this->app->instance(PaymentGateway::class, $mock);
$response = $this->postJson('/api/payments', [
'amount' => 1000,
'currency' => 'usd'
]);
$response->assertStatus(422);
});Q: RefreshDatabase์ DatabaseTransactions์ ์ฐจ์ด์ ์ ๋ฌด์์
๋๊น?
RefreshDatabase: ํ ์คํธ ํด๋์ค๋น ํ ๋ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ๊ณ ๊ฐ ํ ์คํธ๋ฅผ ํธ๋์ญ์ ์ผ๋ก ๋ํDatabaseTransactions: ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ด๋ฏธ ๋ง์ด๊ทธ๋ ์ด์ ๋์๋ค๊ณ ๊ฐ์ ํ๊ณ ๊ฐ ํ ์คํธ๋ฅผ ํธ๋์ญ์ ์ผ๋ก ๋ํ
RefreshDatabase๋ CI/CD ํ์ดํ๋ผ์ธ์์ ๋ ์์ ํฉ๋๋ค. DatabaseTransactions๋ ์คํค๋ง๊ฐ ์์ ์ ์ผ ๋ ๋ก์ปฌ ๊ฐ๋ฐ์์ ๋ ๋น ๋ฆ
๋๋ค.
ํ ์คํธ ๋ชจ๋ฒ ์ฌ๋ก๋ Pest๋ฅผ ์ฌ์ฉํ Laravel ํ ์คํธ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
Laravel 13 ๊ด๋ จ ์ง๋ฌธ
๋ฉด์ ๊ด๋ค์ Laracon EU 2026์์ ๋ฐํ๋ Laravel 13 ๊ธฐ๋ฅ์ ๋ํด ์ ์ ๋ ๋ง์ด ์ง๋ฌธํ๊ณ ์์ต๋๋ค.
Q: Laravel AI SDK๋ ๋ฌด์์ด๋ฉฐ ์ธ์ ์ฌ์ฉํฉ๋๊น?
Laravel AI SDK๋ AI ์์ ์ ์ํ ํตํฉ API๋ฅผ ์ ๊ณตํฉ๋๋ค: ํ ์คํธ ์์ฑ, ์๋ฒ ๋ฉ, ๋๊ตฌ ํธ์ถ ์์ด์ ํธ, ์ค๋์ค, ์ด๋ฏธ์ง ์์ฑ. OpenAI, Anthropic ๋ฐ ๊ธฐํ ์ ๊ณต์ ๊ฐ์ ์ฐจ์ด๋ฅผ ์ถ์ํํฉ๋๋ค.
// ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋์์ ์ฌ์ฉ
use Illuminate\Support\Facades\AI;
$response = AI::text('์ด ๊ธฐ์ฌ๋ฅผ ๊ฐ๋ฐ์ ๋์์ผ๋ก ์์ฝ')
->withContext($articleContent)
->generate();
// ์๋งจํฑ ๊ฒ์์ฉ ์๋ฒ ๋ฉ
$embedding = AI::embeddings($searchQuery)->generate();
$results = Post::query()
->nearestNeighbors('embedding', $embedding, 10)
->get();SDK๋ ์ฌ๋ฌ ์ ๊ณต์ SDK๋ฅผ ๊ด๋ฆฌํ์ง ์๊ณ AI ๊ธฐ๋ฅ์ด ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค.
Q: Laravel 13์์ PHP Attributes๋ ์ด๋ป๊ฒ ์๋ํฉ๋๊น?
Laravel 13์์๋ ์ปดํฌ๋ํธ ๊ตฌ์ฑ์ ์ํ ํด๋์ค ํ๋กํผํฐ์ ๋์์ผ๋ก PHP 8 Attributes๊ฐ ๋์ ๋์์ต๋๋ค. ์ด๋ ํธํ์ฑ์ ์ ์งํ๋ ๋ณ๊ฒฝ์ด๋ฉฐ ํ๋กํผํฐ ๊ธฐ๋ฐ ๊ตฌ์ฑ์ ๊ณ์ ์๋ํฉ๋๋ค.
// ๊ธฐ์กด ์ ๊ทผ ๋ฐฉ์
class SendWelcomeEmail implements ShouldQueue
{
public $queue = 'emails';
public $tries = 3;
}
// Attributes๋ฅผ ์ฌ์ฉํ Laravel 13
use Illuminate\Contracts\Queue\Attributes\Queue;
use Illuminate\Contracts\Queue\Attributes\Tries;
#[Queue('emails')]
#[Tries(3)]
class SendWelcomeEmail implements ShouldQueue
{
// ๋ ๊น๋ํ ํด๋์ค ๋ณธ๋ฌธ
}Attributes๋ IDE ์ง์์ด ํฅ์๋๊ณ ๊ตฌ์ฑ์ ํด๋์ค ์ ์ ์์ค์์ ํ์ธํ ์ ์์ต๋๋ค.
์ฐ์ต์ ์์ํ์ธ์!
๋ฉด์ ์๋ฎฌ๋ ์ดํฐ์ ๊ธฐ์ ํ ์คํธ๋ก ์ง์์ ํ ์คํธํ์ธ์.
2026๋ Laravel ๋ฉด์ ํต์ฌ ํฌ์ธํธ
with()๋ฅผ ์ฌ์ฉํ ์ฆ์ ๋ก๋ฉ์ ๋ง์คํฐํ๊ณ ๊ฐ๋ฐ ํ๊ฒฝ์์ N+1 ์ฟผ๋ฆฌ๋ฅผ ๊ฐ์งํ๋ strict ๋ชจ๋๋ฅผ ์ดํดํฉ๋๋ค- ์๋น์ค ์ปจํ
์ด๋ ๋ฐ์ธ๋ฉ์ ์ค๋ช
ํ ์ ์์ด์ผ ํฉ๋๋ค: ์ผ์์ ์ธ ๊ฒ์๋
bind(), ๊ณต์ ์ธ์คํด์ค์๋singleton(), ์ธํฐํ์ด์ค ํด๊ฒฐ์๋ ์ปจํ ์คํธ ๋ฐ์ธ๋ฉ - Sanctum๊ณผ Passport ์ฌ์ฉ ์๊ธฐ๋ฅผ ํ์ ํฉ๋๋ค: ํผ์คํธํํฐ ์ฑ์๋ Sanctum, OAuth2 ์ ๊ณต์ ์๋๋ฆฌ์ค์๋ Passport
$tries,$backoff,failed()๋ฉ์๋๋ฅผ ํตํ ํ ์คํจ ์ฒ๋ฆฌ๋ฅผ ์์ฐํ ์ ์์ด์ผ ํฉ๋๋ค- Pest๋ก ํ
์คํธ๋ฅผ ์์ฑํ๊ณ ์ธ๋ถ ์์กด์ฑ์๋ ๋ชจํน์ ์ฌ์ฉํ๋ฉฐ
RefreshDatabase์DatabaseTransactions์ ์ฐจ์ด์ ์ ์ดํดํฉ๋๋ค - Laravel 13 ๊ธฐ๋ฅ์ ์ต์ํด์ง๋๋ค: ํตํฉ AI ์์ ์ ์ํ AI SDK, ๋ ๊น๋ํ ์ปดํฌ๋ํธ ๊ตฌ์ฑ์ ์ํ PHP Attributes, Passkey ์ธ์ฆ
- ๊ตฌํ๋ฟ๋ง ์๋๋ผ ํธ๋ ์ด๋์คํ๋ฅผ ์ค๋ช ํ๋ ์ฐ์ต์ ํฉ๋๋ค: ๋ฉด์ ๊ด์ ์๊ธฐ๋ณด๋ค ์ถ๋ก ์ ์ค์์ํฉ๋๋ค
Laravel ์ฝ๋์ ๋ฒ๊ทธ๋ฅผ ์ฐพ์ ์ ์๋์
์ค์ ์ฝ๋ ํ ์กฐ๊ฐ, ์จ์ ๋ฒ๊ทธ ํ๋, ํ๋ฃจ ํ ๋ฒ. ๊ณ์ ์์ด ๋ฐ๋ก ๋์ ํ ์ ์์ต๋๋ค.

์์ฑ์
Anthony Fillion-MailletSharpSkill ์ฐฝ์ ์
10๋ ์ด์ ํ์คํ ๊ฐ๋ฐ์ ํด์์ต๋๋ค. SharpSkill์ ์ด์ํ๋ฉฐ ์ด๊ณณ์ ๊ฒ์๋๋ ๋ชจ๋ ๋ด์ฉ์ ์ฑ ์์ ์ง๋๋ค.
2026๋ 9์ 7์ผ ์ ๋ฐ์ดํธ
๊ณต์
๊ด๋ จ ๊ธฐ์ฌ

PHP Laravel ํ๋ ์์ํฌ ๋ฉด์ ์ง๋ฌธ 2026: Eloquent, ํ, ์ํคํ ์ฒ ํจํด ์๋ฒฝ ๊ฐ์ด๋
2026๋ Laravel ๊ธฐ์ ๋ฉด์ ์์ ์์ฃผ ์ถ์ ๋๋ Eloquent ORM, ํ ์ค๊ณ, ์๋น์ค ์ปจํ ์ด๋ ๊ด๋ จ ์ง๋ฌธ๊ณผ ๋ต๋ณ ์์๋ฅผ ์์ธํ ์ค๋ช ํฉ๋๋ค. N+1 ๋ฌธ์ ํด๊ฒฐ๋ถํฐ ์ก ๋ฐฐ์นญ, DI ํจํด๊น์ง ํฌ๊ด์ ์ผ๋ก ๋ค๋ฃน๋๋ค.

Laravel Octane 2026 ์์ ๊ฐ์ด๋: Swoole๊ณผ RoadRunner๋ฅผ ํ์ฉํ ์ฑ๋ฅ ์ต์ ํ
Laravel Octane์ ์ฌ์ฉํ ๊ณ ์ฑ๋ฅ PHP ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. Swoole๊ณผ RoadRunner์ ์ฐจ์ด์ , ์ค์ ๋ฐฉ๋ฒ, ๋ชจ๋ฒ ์ฌ๋ก, ๋ฉด์ ๋๋น๊น์ง ํฌ๊ด์ ์ผ๋ก ๋ค๋ฃน๋๋ค.

Laravel ์๋ฃจ์ : ๊ณ ๊ธ ํจํด, ๋๋ฒ๊น ๋ฐ ๋ฉด์ ๋๋น 2026๋ ํ
Laravel์ ๊ณ ๊ธ ์ํคํ ์ฒ ํจํด, ๋๋ฒ๊น ๊ธฐ๋ฒ, ๋ฉด์ ๋๋น ์ง์์ ์๋ฒฝํ๊ฒ ๋ง์คํฐํฉ๋๋ค. ์๋น์ค ํด๋์ค, ๋ ํฌ์งํ ๋ฆฌ ํจํด, Telescope๋ฅผ ํ์ฉํ ๋๋ฒ๊น , Laravel ๊ฐ๋ฐ์๋ฅผ ์ํ ์์ฃผ ๋์ค๋ ๋ฉด์ ์ง๋ฌธ์ ์์ธํ ๋ค๋ฃน๋๋ค.