
PHP 프레임워크 – Laravel – 모델과 데이터베이스
안녕하세요, 개발자 여러분~ 😊
Laravel에서 웹 개발을 할 때 빠질 수 없는 요소가 바로 **모델(Model)**과 **데이터베이스(Database)**입니다.
지금까지는 화면을 구성하는 뷰와 컨트롤러를 다뤘다면,
이번 시간에는 실제 데이터를 다루는 부분, 즉 Laravel의 심장이라고도 할 수 있는
모델과 데이터베이스의 연결, 사용법에 대해 자세히 배워볼 거예요!
Laravel은 **Eloquent ORM(Object-Relational Mapping)**이라는 정말 강력한 기능을 제공해서,
마치 마법처럼 SQL 없이도 데이터 조작이 가능해진답니다! 🧙♂️✨
모델(Model)이란?
모델은 데이터베이스 테이블과 연결되어 데이터를 표현하고 조작하는 클래스입니다.
Laravel에서는 이 모델을 통해 객체 지향 방식으로 데이터베이스를 다룰 수 있어요.
💡 비유하자면?
모델은 데이터베이스의 ‘통역가’ 같아요.
SQL이라는 복잡한 언어 대신, 모델이 알아서 적절한 쿼리로 바꿔주는 역할을 하죠!
Eloquent ORM 소개
Eloquent는 Laravel에 내장된 ORM(Object-Relational Mapping) 시스템으로,
데이터베이스 레코드를 객체로 표현하고,
객체 조작만으로 데이터베이스 작업이 가능하게 해줍니다.
모델 생성 방법
artisan 명령어로 쉽게 모델을 생성할 수 있어요.
php artisan make:model Post
app/Models/Post.php
파일이 생성됩니다.
기본 모델 구조
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
// 모델과 연결된 테이블 이름은 기본적으로 소문자 복수형: 'posts'
}
별도 설정이 없으면,
posts
라는 테이블과 연결된다고 자동 인식돼요.
데이터베이스 설정 (.env
파일)
Laravel에서는 .env
파일을 통해 DB 설정을 합니다.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
.env
를 수정한 후에는 서버를 재시작하거나 캐시를 리셋해줘야 적용돼요:
php artisan config:clear
마이그레이션(Migrations)이란?
Laravel에서는 데이터베이스 테이블을 코드로 정의하고 생성할 수 있는데,
이를 **마이그레이션(Migration)**이라고 합니다.
php artisan make:migration create_posts_table
이 명령을 실행하면 database/migrations/
경로에 파일이 하나 생성됩니다.
예시 마이그레이션 파일
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps(); // created_at, updated_at 자동 생성
}
실행 방법
php artisan migrate
데이터베이스 삽입 (Create)
모델을 통해 아주 간단하게 데이터를 저장할 수 있어요.
use App\Models\Post;
$post = new Post;
$post->title = '첫 번째 글';
$post->content = 'Laravel 모델은 정말 쉬워요!';
$post->save();
혹은 단축형으로:
Post::create([
'title' => '두 번째 글',
'content' => 'create 메서드를 사용하면 더 간편하죠!',
]);
※ 단, 이 경우에는 모델에 fillable
속성을 정의해야 해요!
protected $fillable = ['title', 'content'];
데이터 조회 (Read)
모든 레코드 가져오기
$posts = Post::all();
조건 조회
$post = Post::where('id', 1)->first();
특정 레코드 찾기
$post = Post::find(1);
데이터 수정 (Update)
$post = Post::find(1);
$post->title = '수정된 제목입니다!';
$post->save();
데이터 삭제 (Delete)
$post = Post::find(1);
$post->delete();
Eloquent의 다양한 기능
기능 | 예시 | 설명 |
---|---|---|
정렬 | Post::orderBy('created_at', 'desc')->get(); |
최신 글 먼저 |
페이징 | Post::paginate(10); |
10개씩 페이지 나누기 |
관계 설정 | $user->posts() |
hasMany, belongsTo 등 |
조건 쿼리 | Post::where('title', 'like', '%라라벨%')->get(); |
검색 기능 구현 |
Eloquent 관계(Relationships) 예시
Laravel은 데이터베이스 테이블 간의 관계도 객체 지향적으로 표현할 수 있어요!
예: 사용자(User)와 글(Post)의 관계
User 모델
public function posts()
{
return $this->hasMany(Post::class);
}
Post 모델
public function user()
{
return $this->belongsTo(User::class);
}
이제 이렇게 쓸 수 있어요:
$user = User::find(1);
$user->posts; // 유저가 작성한 모든 글
$post = Post::find(1);
$post->user; // 글 작성자 정보
시더(Seeder)로 더미 데이터 생성하기
Laravel에서는 테스트용 데이터를 자동으로 생성하는 기능도 있어요.
시더 생성
php artisan make:seeder PostSeeder
내용 작성
public function run()
{
\App\Models\Post::factory()->count(10)->create();
}
실행
php artisan db:seed --class=PostSeeder
주의할 점 ✅
항목 | 주의사항 |
---|---|
fillable | create() 사용 시 반드시 fillable 필드 설정 필요 |
마이그레이션 순서 | 테이블 간 관계가 있으면 생성 순서 주의 |
캐시 삭제 | .env 변경 후 php artisan config:clear 필수 |
id 직접 입력 X | auto-increment 필드를 수동으로 지정하지 않기 |
모델과 테이블명 | 모델 단수형, 테이블 복수형으로 자동 매핑됨 (예: Post → posts) |
요약 🎯
개념 | 설명 |
---|---|
모델 | DB와 연결된 객체 |
Eloquent | Laravel ORM, SQL 없이 객체로 DB 조작 가능 |
마이그레이션 | 테이블을 코드로 정의하고 생성 |
CRUD | create , read , update , delete 모두 메서드 제공 |
관계 정의 | hasOne, hasMany, belongsTo 등 다양한 관계 표현 가능 |
마무리하며 😊
Laravel의 Eloquent 모델과 마이그레이션을 이해하면
웹 애플리케이션의 데이터 흐름이 정말 쉬워져요!
모델을 통해 데이터베이스를 마치 객체처럼 자유롭게 다룰 수 있는 즐거움을 느껴보세요.
Laravel은 그 과정을 최대한 단순하고 아름답게 만들어줍니다 🌟
다음 시간에는 **폼 처리와 데이터 유효성 검사(Validation)**를 함께 알아볼게요!
그럼 오늘도 멋진 코딩 되시길 바랍니다~ 💻💡✨