Query strategy

조회 전략은 화면 요구와 실행 계획을 함께 보고 고른다

TypeORM의 relations, QueryBuilder, select, pagination은 각각의 기능이 아니라 느린 SQL을 줄이는 선택지입니다.

TypeORM 조회 최적화 선택지

Index

WHERE와 ORDER BY

반복 조회 컬럼에는 단일 또는 복합 인덱스를 두고 컬럼 순서를 쿼리 패턴에 맞춥니다.

Join

N+1 제거

relation이 필요한 화면은 QueryBuilder의 leftJoinAndSelect로 왕복 횟수를 줄입니다.

Select

필드 범위 축소

id, name, email처럼 필요한 컬럼만 가져와 네트워크와 메모리 사용을 줄입니다.

Page

큰 목록 분할

take, skip 또는 cursor 기준을 두고 정렬 컬럼과 인덱스를 함께 설계합니다.

느린 조회를 줄이는 판단 순서

1 SQL 로그 확인 ORM이 실제로 몇 번의 SELECT를 보내는지 먼저 봅니다.
2 실행 계획 대조 Seq Scan, Sort, Nested Loop가 병목인지 EXPLAIN으로 확인합니다.
3 조회 코드 수정 relations, join, select, pagination 중 비용을 줄일 수단을 고릅니다.
관계 로드 비용

eager loading은 편하지만 모든 조회에 JOIN 비용을 더합니다. 기본은 필요한 곳에서만 명시적으로 관계를 로드하고, 변경 전후 latency와 DB 지표를 비교하는 것입니다.