Gembullet에 가입해 보세요. (N+1 문제를 눈치채지 못한 사람을 위해)
뭐 공부 해요?
Rails 앱을 만들고 있습니다.
N+1問題
예전부터 관심이 많았지만 SQL에 관해서도 공부가 부족할 때도 있고 스스로 눈치채지 못하는 경우도 많아서 N+1 문제가 발생한 곳을 알려주기로 했다gem bullet
.▶공식 문서입니다: bullet
배포 방법
Gemfile에는 다음과 같은 코드가 있습니다.
Gemfile
group :development do
gem 'bullet'
end
bundle install
이후 다음 명령을 실행합니다.bundle exec rails g bullet:install
이때 테스트 환경에도 bullet
를 넣었느냐는 질문을 받을 것 같습니다. 공식install
에는 develop
환경의 설치만 기재되어 있습니다.공식 테스트 환경에서의 설치 설명를 보니까 자꾸 힘들어서 (이번에는 그렇게 많은 시간을 들일 필요가 없어) 이번에 배웅을 하게 됐어요.
기본 설정
↑ 위의 명령에서
config/environments/development.rb
기본적으로 다음 코드가 추가되었습니다.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 구성 가능 항목 일람표← 여기 있습니다. 단, 기본 입력한 항목에 대해 확인하면Bullet.enable
...Bullet gem을 사용합니다.하지만 아무것도 하지 않는다.Bullet.alert
...브라우저에 JS 경고를 보냅니다.Bullet.bullet_logger
...bullet 로그 파일 제출(위치: Rails.root/log/bullet.log)Bullet.console
...console.경고 로그.Bullet.growl
... 설치Growl
시 팝업 경고가 표시됩니다.Bullet.rails_logger
...rails 로그에 경고를 보냅니다.Bullet.add_footer
...화면 왼쪽 아래에 메시지를 보냅니다.실제 사용 화면
실제로 사용한 후 이런 느낌이 들어 경고를 보냈다.
수리 방법까지 가르쳐 주니 매우 편리하다
미해결 문제
하지만 실제 책상은 이런 느낌...
users
과images
두 표 모두 N+1
문제가 발생하여 이렇게 수정하였습니다...#before
@posts = Post.order(created_at: 'DESC')
#after
@posts = Post.includes(:user, :images).order(created_at: 'DESC')
실제로 조회가 줄었어요...▶ before 때
▶ after 때
count가 가득 돌아가는 또 다른 문제가 발생했다
가르침 & 조사 부탁드립니다. 알겠습니다. 하지만 이것은 또 다른 문제인 것 같습니다. 이 방법로 해결할 수 있습니다!
가능한 한 빨리 SQL을 숙지하여 N+1 문제를 신속하게 발견하고 해결하고 사고를 미연에 방지할 수 있기를 바란다
Reference
이 문제에 관하여(Gembullet에 가입해 보세요. (N+1 문제를 눈치채지 못한 사람을 위해)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tanutanu/items/7157446d7c3bfe377d63텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)