비즈니스 로직이 여기저기 파편화되고, 하나의 비즈니스 로직 안에 여러 책임과 로직이 뒤섞여 있는 상황이 반복됨.
각각의 모델에서 목적에 따라 제각각 비즈니스 로직을 정의하다 보니, 동일한 로직도 중복 작성되거나 수정 시 여러 곳을 일일이 찾아 수정해야 하는 문제가 발생.
또한, 복잡한 테이블 관계를 다루는 과정에서 잠재적인 버그, 상태 업데이트 누락, 코드 오류 등이 생길 위험도 커졌음.
이러한 문제점을 개선하고자, Eloquent에 Active Record 패턴을 도입하여 비즈니스 로직과 데이터 구조를 명확히 정리하고, 유지보수성과 안정성을 높이고자 한다.
Active Record 패턴은 데이터베이스 테이블 하나당 클래스 하나를 만들고, 그 클래스의 인스턴스가 테이블의 한 행(row) 을 나타내는 구조임. 객체와 데이터베이스 레코드를 1:1로 매핑하여, 해당 객체에서 CRUD (Create, Read, Update, Delete) 작업을 직접 수행함.
1️⃣ 기존 Query Builder 스타일 (Active Record X)
// userService.php
public function updateUser($idx){
User::where('id', $idx)
->update([
'name' => '홍길동'
]);
}
2️⃣ Active Record 패턴 적용 (Eloquent ORM)
// User.php
class User extends Model {
// users 테이블과 연결
}
// 데이터 수정
public function updateUser ($idx){
$user = User::find($idx); // 객체 조회
$user->name = 'John'; // 속성 변경
$user->save(); // 변경 사항 저장
}
Active Record 패턴을 사용할 때 서비스 레이어(Service Layer) 의 역할이 모호해지거나, 아예 생략되는 경우가 많음.
비즈니스 로직이 비대해질 수 있다
테스트가 어려워짐
복잡한 도메인에서는 유지보수성이 떨어짐