Gembullet에 가입해 보세요. (N+1 문제를 눈치채지 못한 사람을 위해)

5671 단어 n+1 질문bulletRails

뭐 공부 해요?


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 ...화면 왼쪽 아래에 메시지를 보냅니다.
  • ...그렇구나.

    실제 사용 화면


    실제로 사용한 후 이런 느낌이 들어 경고를 보냈다.

    수리 방법까지 가르쳐 주니 매우 편리하다

    미해결 문제


    하지만 실제 책상은 이런 느낌...
    usersimages 두 표 모두 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 문제를 신속하게 발견하고 해결하고 사고를 미연에 방지할 수 있기를 바란다

    좋은 웹페이지 즐겨찾기