
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에서의 폼 처리와 유효성 검사에 대해 다뤄보겠습니다.
그럼 오늘도 즐코하세요! 🌟💻