액티브 레코드 데이터 소스 패턴
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 중급 이상의 소프트웨어 개발자 (ORM 개념 이해 및 데이터베이스 연동 경험 보유자)
- 엔터프라이즈 애플리케이션 설계자 (도메인 모델과 데이터베이스 간 결합성 문제 해결 필요자)
- Ruby on Rails, Laravel, Java/JPA 등 ORM 기반 프레임워크 사용자
핵심 요약
- 액티브 레코드 패턴은 도메인 객체에 데이터 접근 로직을 직접 포함하여 CRUD 작업을 간결하게 처리 (예:
ActiveRecord
,Eloquent
,JPA
) - 도메인 객체의 필드 구조는 데이터베이스 테이블의 컬럼과 1:1 매칭 (
class field <-> table column
) - 복잡한 비즈니스 로직은 트랜잭션 스크립트와 협업하며, 중복 코드 감소를 위한 점진적 리팩토링 권장
섹션별 세부 요약
1. 액티브 레코드의 핵심 원리
- 도메인 객체 = 데이터 + 행동 (데이터베이스와의 상호작용 로직 포함)
- 데이터 저장/읽기 책임: 객체가 직접 DB와 연동 (예:
save()
,find_by()
메서드) - 타입 변환 생략: SQL 인터페이스에서 반환된 데이터 그대로 사용 (예:
VARCHAR
는 문자열로,INT
는 정수로 유지)
2. 액티브 레코드의 주요 메서드
- 인스턴스 생성: SQL 결과셋에서
ActiveRecord
인스턴스 생성 (예:User.find(1)
) - 삽입 준비: 새로운 인스턴스 생성 후
save()
로 DB에 삽입 - 정적 쿼리 메서드: 자주 사용되는 SQL 쿼리 추상화 (예:
User.where(name: 'Alice')
)
3. 패턴의 적합성과 한계
- 적합한 시나리오: 간단한 CRUD 작업, 트랜잭션 스크립트 기반 애플리케이션의 중복 코드 리팩토링
- 불리한 점: 도메인 로직과 데이터베이스 간 결합성 증가 (예: 변경 시 도메인 객체와 DB 스키마 모두 수정 필요)
- 대체 선택: 복잡한 시스템에서는 데이터 매퍼(Data Mapper) 패턴으로 분리
4. 실제 구현 사례
- Ruby on Rails:
ActiveRecord
라이브러리 사용 (예:User.create(name: 'Bob')
) - Laravel:
Eloquent ORM
제공 (예:User::find(1)->update(['email' => 'new@example.com'])
) - Java: JPA (Java Persistence API)를 통한 객체-관계 매핑
결론
- 액티브 레코드는 간단한 CRUD 작업에 적합하지만, 도메인 로직과 데이터베이스의 강한 결합으로 인해 복잡한 시스템에서는 데이터 매퍼 패턴으로 전환해야 함
- ORM 프레임워크 사용 시: 객체의 필드 정의가 데이터베이스 스키마와 완전히 일치하는지 반드시 검증해야 함 (예:
@Column(name = "user_name")
어노테이션 사용)