【Rails】 bullet을 사용하여 N+1 문제 해결

N+1 문제란?



N + 1 문제는 데이터베이스에서 데이터를 검색 할 때 많은 양의 SQL이 발행되어 성능이 저하되는 문제입니다. 이전에 N + 1 문제에 대해 전달하고 있으므로 신경이 쓰이는 분은 참조하십시오.

bullet이란?



N + 1 문제가 어디에 발생하고 있는지 알려주는 gem입니다.


공식 문서

도입 방법



아래 코드를 Gemfile에 추가합니다.

Gemfile
group :development do
  gem 'bullet'
end
$ bundle install

기본 설정



config/environments/development.rb
Rails.application.configure do
  # ここから
  config.after_initialize do
    Bullet.enable        = true
    Bullet.alert         = true
    Bullet.bullet_logger = true
    Bullet.console       = true
  # Bullet.growl         = true デフォルトでコメントアウト
    Bullet.rails_logger  = true
    Bullet.add_footer    = true
  end
  # ここまでが追加。
end

(해설)
* Bullet.enable...Bullet gem 사용 가능
* Bullet.alert... 브라우저에 JS 경고 표시
* Bullet.bullet_logger...bullet 로그 파일 표시
* Bullet.console...console.log에 경고
* Bullet.growl...Growl이 설치되면 팝업 경고 표시
* Bullet.rails_logger...rails 로그에 경고 표시
* Bullet.add_footer... 화면 왼쪽 하단에 메시지 표시

N+1 문제 감지



실제로 사용하면 아래와 같은 느낌으로 경고가 표시.


정중하게 수정 방법까지 기재

표시된 대로 컨트롤러에 includes[:user])로 수정
#before
@chats = Chat.all

#after
@chats = Chat.includes(:user)

[Before]


[After]


includes를 지정하여 관련을 함께 검색하여 최소 쿼리 횟수를 줄였습니다.

마지막으로



N+1 문제를 스스로 눈치채지 못하는 사람을 위해서 편리하다고 생각합니다만, 역시 설계, 개발로 N+1 문제가 생기지 않기 위해서도 SQL에 강해질 필요가 있다고 느꼈습니다. 이번에는 SQL 쿼리의 이미지를 남겨야하는 곳을 실망하고 죄송합니다

좋은 웹페이지 즐겨찾기