Laravel에서 ID 대신 Slug로 글 접근하기

일반적으로 블로그 글을 불러올 때 /posts/1처럼 id를 사용하는 경우가 많습니다.

하지만 URL에 /posts/laravel-slug-routing처럼 사람이 읽기 쉬운 slug를 사용하는 것이 SEO와 사용자 경험 측면에서 유리합니다.

이번 글에서는 Laravel에서 slug를 사용하여 글에 접근하는 방법을 단계별로 설명합니다.

1. 마이그레이션에 Slug 컬럼 추가

우선 posts 테이블에 slug 컬럼을 추가해야 합니다.

php artisan make:migration add_slug_to_posts_table --table=posts
// database/migrations/xxxx_xx_xx_add_slug_to_posts_table.php

public function up()
{
    Schema::table('posts', function (Blueprint $table) {
        $table->string('slug')->unique()->after('title');
    });
}

public function down()
{
    Schema::table('posts', function (Blueprint $table) {
        $table->dropColumn('slug');
    });
}

이후 마이그레이션을 적용합니다.

php artisan migrate

2. 모델에서 Slug로 Route 바인딩 설정

Post 모델에 getRouteKeyName 메서드를 추가합니다.

// app/Models/Post.php

public function getRouteKeyName()
{
    return 'slug';
}

이 설정을 하면 Laravel은 기본적으로 id 대신 slug를 기준으로 라우트 모델 바인딩을 수행하게 됩니다.

3. 라우팅 설정

web.php에서 다음과 같이 작성합니다.

// routes/web.php

use App\Http\Controllers\PostController;

Route::get('/posts/{post}', [PostController::class, 'show']);

4. 컨트롤러에서 show 메서드 작성

slug로 조회한 글을 보여주는 메서드를 작성합니다.

// app/Http/Controllers/PostController.php

use App\Models\Post;

public function show(Post $post)
{
    return view('posts.show', compact('post'));
}

5. slug 자동 생성 예시 (선택)

글을 저장할 때 slug를 자동으로 생성하려면 Str::slug()를 사용할 수 있습니다.

// PostController 저장 로직 내부

use Illuminate\Support\Str;

$post = new Post();
$post->title = $request->title;
$post->slug = Str::slug($request->title);
$post->body = $request->body;
$post->save();

6. 결과

이제 /posts/laravel-slug-routing와 같은 URL로 해당 블로그 글을 조회할 수 있습니다.

Tags:
Laravel

관련 게시글

Laravel 블로그에 태그 기능 추가하기

블로그 글에 태그(tag)를 추가하면 글을 주제별로 분류하고 필터링할 수 있어 사용자 경험이 향상됩니다. L...

Laravel에서 요일마다 실행되는 작업을 스케줄링하는 방법

Laravel은 강력한 스케줄링 기능을 제공하여 개발자가 주기적으로 실행되어야 하는 작업을 쉽게 관리할 수...

Laravel에서 헬퍼 파일을 만드는 방법은 무엇인가요?

Laravel에서 헬퍼 파일 만들기 Laravel은 PHP 프레임워크 중 하나로, MVC 아키텍처를 기반으로 하여 웹...

Laravel에서 조건부 라우팅을 구현하는 방법

Laravel은 간편하고 직관적인 라우팅 시스템을 제공하여 웹 애플리케이션의 URL과 그에 연결된 처리 로직을...

Laravel에서 태스크 자동화를 설정하는 방법

Laravel은 웹 애플리케이션 개발을 위한 강력한 PHP 프레임워크로, 태스크 자동화 기능을 제공합니다....

Laravel에서 비동기 작업을 수행하는 방법

Laravel은 비동기 작업을 간편하게 처리할 수 있는 다양한 기능을 제공합니다. 비동기 작업은 웹 애플리케...