Ruby on Rails

성능 최적화

Database indexing, 쿼리 최적화, Bullet gem, rack-mini-profiler, 동시성/Puma, thread-safety, connection pool

26 면접 질문·
Senior
1

데이터베이스 컬럼에 index를 추가하는 주된 목적은 무엇인가요?

답변

index는 최적화된 데이터 구조(보통 B-tree)를 생성하여 테이블의 모든 행을 스캔하지 않도록 함으로써 검색 쿼리를 빠르게 합니다. index가 없으면 데이터베이스는 sequential scan을 수행하는데, 이는 큰 테이블에서 매우 느릴 수 있습니다. WHERE 절, ORDER BY 또는 조인에서 자주 사용되는 컬럼이 인덱싱의 이상적인 후보입니다.

2

Rails migration에서 user_id와 created_at 컬럼에 복합 index를 어떻게 생성하나요?

답변

add_index 메서드는 복합 index를 생성하기 위해 컬럼 배열을 받습니다. 컬럼 순서가 중요합니다. index는 먼저 user_id로, 그다음 created_at으로 필터링하는 쿼리에는 효율적이지만, created_at만으로 필터링하는 쿼리에는 효과가 없습니다. 복합 index는 컬럼을 왼쪽에서 오른쪽 순서로 사용하는 쿼리에 최적입니다.

3

ActiveRecord 맥락에서 N+1 문제란 무엇인가요?

답변

N+1 문제는 초기 쿼리가 N개의 레코드를 가져온 후, 각 레코드의 연관 데이터를 로드하기 위해 N개의 추가 쿼리가 실행될 때 발생합니다. 예를 들어, 100개의 posts를 로드한 후 작성자를 위해 100개의 개별 쿼리를 실행하는 경우입니다. 이 패턴은 쿼리 수를 배가시키고 성능을 심각하게 저하시킵니다. 해결책은 includes, preload 또는 eager_load를 사용하여 연관 데이터를 한두 개의 쿼리로 로드하는 것입니다.

4

연관 데이터를 미리 로드하여 N+1 문제를 해결하려면 어떤 ActiveRecord 메서드를 사용하나요?

5

Rails 성능 최적화에서 Bullet gem의 역할은 무엇인가요?

+23 면접 질문

다음 면접을 위해 Ruby on Rails을 마스터하세요

모든 질문, flashcards, 기술 테스트, 코드 리뷰 연습, 면접 시뮬레이터에 접근하세요.

무료로 시작하기