피드로 돌아가기
Size, Length e Count: Qual a diferença?
Dev.toDev.to
Backend

ActiveRecord의 size 메서드를 통한 DB 쿼리 및 메모리 최적화

Size, Length e Count: Qual a diferença?

Ewerton2026년 5월 5일2beginner

Context

Ruby의 length, size, count 메서드는 순수 언어 환경과 Rails ActiveRecord 환경에서 서로 다른 동작 방식을 가짐. 특히 데이터베이스 연동 시 적절하지 않은 메서드 선택으로 인한 불필요한 Query 발생 및 과도한 Memory 점유 문제가 발생함.

Technical Solution

  • count 메서드를 통한 SELECT COUNT(*) 쿼리 실행으로 DB 수준의 정확한 데이터 수 산출
  • length 메서드를 통한 전체 레코드의 메모리 로드 및 Ruby 객체 변환 후 개수 측정
  • size 메서드의 조건부 로직을 통한 메모리 로드 여부에 따른 최적 경로 선택
  • 데이터가 메모리에 로드된 경우 length와 동일하게 메모리 내 카운팅 수행
  • 데이터가 로드되지 않은 경우 count와 동일하게 DB 쿼리를 통한 효율적 산출
  • 불필요한 객체 인스턴스화를 방지하기 위한 size 메서드 중심의 설계 채택

1. DB 레코드 수만 필요하고 메모리 로드가 불필요한 경우 count 사용 여부 검토

2. 이미 로드된 컬렉션의 크기를 측정할 때 불필요한 DB 쿼리를 유발하는 count 사용 지양

3. 런타임 상황에 따른 최적화가 필요한 경우 ActiveRecord의 size 메서드 우선 적용

원문 읽기