SQL의 한계와 ORM의 역할
-
SQL의 문제점: SQL은 프로그래밍 언어와 달리 분해, 조합, 추상화 기능이 미약하여 데이터 접근을 위한 “어셈블러”에 가깝습니다.
-
ORM의 진정한 역할: ORM은 SQL의 부족한 추상화 기능을 보완해야 합니다. 단순 SQL 래퍼를 넘어
named_scope와 같이 SQL 조건을 추상화하고 조합하며, 고차원적인 추상화 능력을 제공하는 “모던 ORM”으로 발전해야 합니다.
쿼리 오브젝트의 중요성
-
모던 ORM의 핵심 기술: 쿼리 오브젝트는 모던 ORM의 핵심입니다. Rails 3의 메서드 체인 방식은 쿼리 오브젝트를 반환하며, 이 객체에 조건이 축적되다가 최종 호출 시 SQL이 실행됩니다.
-
유연한 연산과 추상화: 데이터매퍼(DataMapper), 시퀄(Sequel) 등은 쿼리 오브젝트를 집합처럼 다루어
&,|연산으로 복잡한 조건을 조합하고 부속 쿼리를 자연스럽게 표현합니다. 쿼리 오브젝트는 컬렉션처럼 동작하며,named_scope와 같은 추상화 기능을 일반 루비 메서드로도 쉽게 구현 가능하게 합니다.
주요 개발 문제 해결
-
성능 및 유지보수성: 쿼리 오브젝트의 지연 로딩(lazy loading)은 뷰 계층 캐싱 문제 해결에 기여하며, N+1 문제 또한 데이터매퍼의 명시적 관계 지정 없는 효율적인 방식으로 해결 가능합니다.
-
루비 표현식의 SQL 변환: 루비의 연산자 오버라이딩을 통해
x == 1과 같은 루비 표현식을 SQL 조건으로 변환하여, 개발자가 루비 코드 내에서 SQL을 자연스럽게 다룰 수 있도록 돕습니다.