피드로 돌아가기
Dev.toBackend
원문 읽기
LEFT JOIN 없이 구현하는 Drizzle ORM 교차 관계 검색 엔진
Building a Cross-Relational Search Engine in Drizzle ORM (No Hardcoded WHERE Clauses)
AI 요약
Context
글로벌 검색 기능 구현 시 다수의 LEFT JOIN과 OR 조건절을 사용하는 구조. 1:N 관계에서 데이터 중복 발생으로 인한 네트워크 부하 증가. 중복 제거를 위한 복잡한 GROUP BY 로직 추가 필요.
Technical Solution
- LEFT JOIN 대신 SQL EXISTS 서브쿼리를 활용하여 데이터 중복 발생 원천 차단
- 검색 조건을 SQL AST 노드의 배열인 SQL Vector 형태로 취급하는 추상화 계층 설계
- 스키마 레벨에서 검색 허용 범위를 정의하고 이를 기반으로 쿼리를 자동 생성하는 구조
- 로컬 컬럼은 ILIKE로 처리하고 관계형 경로(dot notation)는 Subquery Compiler로 분기하는 디스패처 도입
- Drizzle ORM의 getTableRelations 인트로스펙션을 통한 외래 키 및 관계 메타데이터 동적 추출
- 관계 정의 배열 수정만으로 백엔드 API 수정 없이 검색 대상 확장이 가능한 유연한 아키텍처
Key Takeaway
반복적인 쿼리 작성을 지양하고 메타데이터 기반의 쿼리 컴파일러를 구축하여 비즈니스 로직과 데이터 접근 계층을 완전히 분리하는 설계 원칙.
실천 포인트
1:N 관계 검색 시 데이터 중복으로 인한 성능 저하가 발생하면 LEFT JOIN 대신 EXISTS 서브쿼리 도입을 검토할 것