몽상실현개발주의

Rails의 지연 로딩(Lazy Loading) 과 데이터베이스 연결 전환 본문

Dev

Rails의 지연 로딩(Lazy Loading) 과 데이터베이스 연결 전환

migrationArc 2024. 3. 26. 18:32
Ruby on Rails의 ActiveRecord는 데이터베이스와의 상호 작용을 추상화하여 개발자가 보다 쉽게 데이터를 처리할 수 있도록 돕습니다. 이 중에서도 지연 로딩(lazy loading)은 ActiveRecord의 핵심 기능 중 하나로, 데이터 접근의 효율성을 극대화합니다. 이 글에서는 지연 로딩이 실제로 작동하는 방식과, 데이터에 접근할 때 데이터베이스 요청이 어떻게 발생하는지에 대해 집중적으로 탐구합니다.

 

지연 로딩(Lazy Loading)의 작동 원리

지연 로딩은 데이터가 실제로 필요할 때까지 데이터베이스 요청을 지연시키는 패턴입니다. Rails의 ActiveRecord에서는 이를 통해 불필요한 데이터베이스 요청을 줄이고, 애플리케이션의 성능을 향상시킵니다.

 

데이터 접근 시의 요청 발생

Rails에서 쿼리를 작성하고 실행하는 과정은 직관적입니다. 하지만, 실제로 데이터베이스 요청이 발생하는 시점은 개발자가 명시적으로 데이터에 접근하려고 할 때입니다. 이는 다음과 같은 상황에서 발생할 수 있습니다:

 

  • 결과 반복: each, map 같은 반복자를 사용하여 쿼리 결과를 순회할 때
  • 특정 레코드 조회: first, last, find_by 등의 메소드를 사용하여 특정 레코드를 조회할 때
  • 결과 집계: count, sum, average 등의 집계 함수를 사용할 때
  • 레코드 로드: to_a 메소드를 사용하여 쿼리 결과를 배열로 변환할 때

 

이러한 접근 방식은 데이터를 필요로 하는 정확한 순간까지 데이터베이스 요청을 지연시킵니다. 결과적으로, 애플리케이션의 메모리 사용량과 데이터베이스 부하를 줄이는 데 도움이 됩니다.

 

 

실제 사례 분석

다음 코드를 살펴봅시다:

data_set = Data.joins(:other_data).where(type: 'string')

 

위 코드는 ObjectiveWeight 모델과 Cycle 모델을 조인하고, 특정 workspace_id에 해당하는 레코드를 필터링하는 쿼리를 생성합니다.

이 시점에서는 아직 데이터베이스 요청이 발생하지 않습니다.

data_set_size = data_set.size

 

size 메소드를 호출하는 순간, Rails는 데이터베이스에 쿼리를 전송하여 결과의 크기를 조회합니다. 이는 지연 로딩의 전형적인 예로, 데이터에 대한 실제 요구가 발생했을 때 처음으로 데이터베이스 요청이 이루어집니다.

 

 

 

결론: 지연 로딩의 이점

Rails의 지연 로딩 기능은 데이터 접근을 최적화하여 애플리케이션의 성능을 향상시킵니다. 데이터에 실제로 접근하려는 순간까지 요청을 지연시키므로, 불필요한 데이터베이스 요청을 줄이고, 자원 사용을 최적화할 수 있습니다. 이러한 접근 방식은 Rails 애플리케이션의 반응성과 효율성을 높이는 데 중요한 역할을 합니다.

Comments