PHP 프레임워크 – CodeIgniter – 4 – 모델과 데이터베이스

PHP 프레임워크 - CodeIgniter - 4 - 모델과 데이터베이스
PHP 프레임워크 – CodeIgniter – 4 – 모델과 데이터베이스

PHP 프레임워크 – CodeIgniter – 4 – 모델과 데이터베이스

안녕하세요, 활기찬 개발자 여러분 😊
오늘은 CodeIgniter 프레임워크에서 모델(Model)과 데이터베이스(DB) 처리에 대해 알아보는 시간을 가져보겠습니다!
웹 애플리케이션은 흔히 사용자와 데이터 간의 다리 역할을 합니다.
그 중심에 있는 게 바로 **모델(Model)**이고,
CodeIgniter는 이 과정을 아주 효율적으로 도와주는 멋진 프레임워크예요.

마치 요리사가 레시피를 보며 재료(데이터)를 다루듯,
CodeIgniter의 모델은 우리가 DB와 대화할 수 있게 해주는 통역사 같은 존재랍니다!


모델(Model)이란?

**모델(Model)**은 애플리케이션의 데이터 구조를 정의하고,
데이터베이스와의 상호작용을 담당하는 부분이에요.

예를 들어, 사용자 정보를 가져오거나 저장할 때,
우리가 직접 SQL을 일일이 쓰지 않고, 모델을 통해 간편하게 다룰 수 있어요!

CodeIgniter 4에서는 Model 클래스를 상속받아 모델을 정의합니다.


모델 생성하기

1. 모델 클래스 만들기

php spark make:model UserModel

이 명령을 입력하면 app/Models/UserModel.php 파일이 생성돼요.

2. 모델 구조 예시

<?php

namespace App\Models;
use CodeIgniter\Model;

class UserModel extends Model
{
    protected $table      = 'users';         // 연결할 테이블명
    protected $primaryKey = 'id';            // 기본키

    protected $allowedFields = ['username', 'email', 'password']; // 저장 가능한 필드 목록
    protected $useTimestamps = true;         // created_at, updated_at 자동 관리
}

🧱 마치 건물의 뼈대를 설계하듯, 모델은 테이블과 컬럼의 구조를 정의해줘요!


모델 사용하기

컨트롤러에서 모델 사용

<?php

namespace App\Controllers;
use App\Models\UserModel;

class Home extends BaseController
{
    public function index()
    {
        $userModel = new UserModel();
        $users = $userModel->findAll();

        return view('user_list', ['users' => $users]);
    }
}

💡 findAll() 메서드는 해당 테이블의 모든 레코드를 가져오는 메서드예요.


기본 CRUD 메서드 정리

메서드 설명
findAll() 모든 데이터 가져오기
find($id) 특정 ID로 단일 레코드 조회
insert($data) 새 레코드 삽입
update($id, $data) 특정 레코드 수정
delete($id) 특정 레코드 삭제
where(), like() 조건 검색

예시 – 데이터 삽입

$data = [
    'username' => 'testuser',
    'email'    => 'test@example.com',
    'password' => password_hash('123456', PASSWORD_DEFAULT)
];

$userModel->insert($data);

쿼리 조건 예시

$users = $userModel->where('status', 'active')->findAll();

또는 여러 조건을 조합할 수도 있어요:

$users = $userModel
    ->where('status', 'active')
    ->like('username', 'kim')
    ->orderBy('id', 'desc')
    ->findAll();

📌 SQL을 직접 쓰지 않고도 메서드 체이닝 방식으로 손쉽게 구현할 수 있죠!


커스텀 메서드 만들기

모델에 자신만의 메서드를 추가할 수도 있어요.

public function getActiveUsers()
{
    return $this->where('status', 'active')->findAll();
}

그럼 컨트롤러에서는 이렇게 사용하면 됩니다:

$activeUsers = $userModel->getActiveUsers();

이런 방식은 비즈니스 로직을 깔끔하게 분리하는 데 큰 도움이 돼요!


쿼리 빌더(Query Builder) 사용하기

만약 모델 없이도 직접 DB 쿼리를 다루고 싶다면 query builder를 사용할 수도 있어요.

$db = \Config\Database::connect();
$builder = $db->table('users');

$query = $builder->where('email', 'test@example.com')->get();
$result = $query->getRow();

이런 방식은 **복잡한 쿼리를 직접 작성하거나 조인(join)**이 필요할 때 유용합니다.


자동 타임스탬프 관리

protected $useTimestamps = true;

이 옵션을 설정하면 created_at, updated_at 필드가 자동으로 관리돼요.
별도로 날짜를 입력할 필요가 없기 때문에 데이터 일관성 유지에 큰 도움이 됩니다.


유효성 검증(Validation) 설정

protected $validationRules = [
    'email' => 'required|valid_email|is_unique[users.email]',
    'username' => 'required|min_length[3]'
];

모델에서 유효성 검증까지 처리하면 컨트롤러가 훨씬 간결해지고,
보안과 사용자 경험도 함께 챙길 수 있어요 😊


주의할 점 정리 ✅

항목 주의사항
allowedFields 필수 설정 이 값에 없는 필드는 insert/update되지 않아요
쿼리 결과 확인 getResult() vs getRow() 헷갈리지 말기
비밀번호 평문 저장 금지 항상 password_hash() 사용하기
유효성 검사 생략 주의 사용자 입력값은 반드시 검증하기
복잡한 로직은 커스텀 메서드로 컨트롤러에 로직이 쌓이면 가독성이 떨어져요

마무리하며 😊

CodeIgniter의 모델과 데이터베이스 기능은
직관적이고 간결하면서도 강력한 ORM 기능을 제공합니다.
Model을 잘 활용하면 복잡한 SQL 없이도 깔끔하고 유지보수하기 쉬운 코드를 만들 수 있답니다.

데이터를 다루는 일은 웹 애플리케이션의 중심이기 때문에
오늘 배운 내용을 꼭 실습해 보시고, 다양한 시나리오로 테스트해보세요!

다음 시간에는 CodeIgniter에서의 폼 처리와 유효성 검사에 대해 다뤄보겠습니다.
그럼 오늘도 즐코하세요! 🌟💻

답글 남기기