피드로 돌아가기
Dev.toBackend
원문 읽기
ActiveRecord의 size 메서드를 통한 DB 쿼리 및 메모리 최적화
Size, Length e Count: Qual a diferença?
AI 요약
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 메서드 우선 적용