ORM을 벗어나 커스텀 SQL 어댑터를 사용한 제어권 회복
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
- 대상자: 백엔드 개발자, API 중심 시스템 설계자
- 난이도: 중급~고급 (SQL, ORM, 어댑터 설계 경험 필요)
핵심 요약
- ORM의 한계:
N+1 queries
,Vendor lock-in
,Query 투명성 부족
등으로 인해 ORM 사용 중단 - KNEX 어댑터의 핵심 기능:
- QueryParams
형식으로 구조화된 쿼리 생성
- 동적 스키마 생성 및 RLS
지원
- 프론트엔드/백엔드 SDK 통합
- 성능 향상:
HAVING
,WINDOW
함수,CTE
등 복잡한 쿼리 지원
섹션별 세부 요약
1. ORM 사용 중단의 동기
- ORM의 추상화 수준이 개발자에게 불편함을 유발
N+1 queries
,불필요한 JOIN
등 성능 cliffs 발생- 스키마 정의 및 쿼리 제어의 자유도 부족
2. KNEX 어댑터의 주요 기능
- QueryParams 인터페이스:
- 필터, CTE, 집계 등 타입 안전한 구조화
- HAVING
, WINDOW
등 복잡한 SQL 지원
- 동적 스키마 생성: API를 통해 테이블 생성 가능 (Part 2에서 자세히 설명)
- 프론트엔드 SDK: Prisma 스타일 체인을 기반으로 클라이언트에서 쿼리 가능
3. 예시 코드
db.table("users")
.where("status", "active")
.andWhere((query) => {
query.where("role", "admin").orWhere((subQuery) => {
subQuery.where("role", "manager").where("department", "IT");
});
})
.query();
- 동적 필터링과
AND/OR
조건 처리
4. 향후 계획
- Part 2:
동적 스키마 생성
및RLS
지원 - Part 3:
Sync
,Auditing
기능 추가 - GitHub에서 개방 소스 공개 예정
결론
- KNEX 어댑터는 ORM의 제약을 극복하고, 쿼리 투명성과 성능을 동시에 달성
- 프론트엔드/백엔드 통합 SDK를 통해 API 중심 시스템의 유연성 확보
- Open Source 공개를 통해 커뮤니티와의 협업 가능 (GitHub 링크 확인)