Skip to main content
findMany는 조건에 맞는 여러 레코드를 조회하는 메서드입니다. 페이지네이션, 검색, 필터링, 정렬을 지원하며 총 개수와 함께 결과를 반환합니다.
findMany는 BaseModelClass에 정의되어 있지 않습니다. Entity를 생성하면 Syncer가 각 Model 클래스에 자동으로 생성하는 표준 패턴입니다.

타입 시그니처

자동 생성 코드

Sonamu는 Entity를 기반으로 다음 코드를 자동으로 생성합니다:
내부 동작:
  1. getSubsetQueries(): BaseModelClass 메서드로 서브셋 쿼리 빌더 획득
  2. 조건 추가: WHERE, 검색, 정렬 조건 추가
  3. createEnhancers(): BaseModelClass 메서드로 virtual 필드 계산 함수 생성
  4. executeSubsetQuery(): BaseModelClass 메서드로 실제 쿼리 실행
    • COUNT 쿼리 (total)
    • SELECT 쿼리 (rows)
    • Loader 실행 (관계 데이터 로드)
    • Hydrate (flat → 중첩 객체)
    • Enhancer 적용 (virtual 필드 계산)

매개변수

subset

조회할 데이터의 서브셋을 지정합니다. 타입: SubsetKey (예: "A", "B", "C")

params

조회 조건과 페이지네이션 설정입니다. 타입: ListParams (선택적)

기본값

반환값

타입: Promise<ListResult<LP, SubsetMapping[T]>>
semanticQuery를 전달하면 각 row에 similarity 필드(0~1 사이의 유사도 점수)가 자동으로 추가됩니다.

rows

조회된 레코드 배열입니다.

total

조건에 맞는 전체 레코드 수입니다.

페이지네이션

num (페이지당 개수)

한 페이지에 표시할 레코드 수입니다. 기본값: 24

page (페이지 번호)

조회할 페이지 번호입니다 (1부터 시작). 기본값: 1

필터링

ID 필터

커스텀 필터

Entity 정의에 따라 추가 필터를 사용할 수 있습니다.

검색

search + keyword

구현 예시

생성된 Model 코드:

정렬

orderBy

구현 예시

쿼리 모드

queryMode: “both” (기본)

리스트와 총 개수를 모두 반환합니다.

queryMode: “list”

리스트만 반환합니다 (COUNT 쿼리 생략).
COUNT 쿼리가 무거운 경우 queryMode: "list"를 사용하면 성능이 향상됩니다.

queryMode: “count”

총 개수만 반환합니다 (SELECT 쿼리 생략).

기본 사용법

단순 리스트

필터링 + 페이지네이션

검색 + 정렬

실전 예시

BaseModelClass 메서드 활용

findMany는 내부적으로 다음 BaseModelClass 메서드들을 사용합니다:

getSubsetQueries()

서브셋 쿼리 빌더를 가져옵니다.

createEnhancers()

Virtual 필드 계산 함수를 생성합니다.

executeSubsetQuery()

쿼리를 실행하고 결과를 반환합니다.

타입 안정성

서브셋 타입 추론

ListParams 타입

queryMode 타입 추론

성능 최적화

1. queryMode: “list” 사용

COUNT 쿼리가 무거운 경우:

2. 인덱스 활용

자주 필터링하는 필드에 인덱스 추가:

3. 서브셋 최소화

필요한 필드만 포함하는 서브셋 사용:

4. num 제한

한 번에 너무 많은 데이터 조회 방지:

주의사항

1. num: 0 주의

num: 0은 전체 조회이므로 신중하게 사용하세요.

2. page는 1부터 시작

3. 서브셋 선택

다음 단계

findById

ID로 단일 레코드 조회

save

레코드 저장 및 수정

Subset

서브셋 이해하기

Puri 쿼리 빌더

고급 쿼리 작성하기