해당 글은 https://blog.naver.com/kbs4674/221220959692 로 부터 게시글이 이전되었습니다. 크롤링 자료 연결고리 1. Nokogiri를 활용한 크롤링 [클릭] iframe/javascript 기반 사이트에 대해선 크롤링 지원이 안됩니다. selenium에 비해 크롤러가 가볍습니다. 2. Selenium을 활용한 크롤링 [클릭] iframe/javascript 기반 사이트에 대해선 크롤링 지원이 됩니다. Nokogiri에 비해 크롤러가 무겁습니다. 크롬 브라우저에 의존합니다. (크롬 브라우저 버전에 신경써야 합니다.) 3. Mechanize를 활용한 크롤링 (Nokogiri + 로그인 기능) [클릭] Nokogiri에 로그인 기능이 더해진 크롤러 입니다. 개인적으로 대체수단..
해당 글은 https://blog.naver.com/kbs4674/221220959692 로 부터 게시글이 이전되었습니다. 크롤링 자료 연결고리 1. Nokogiri를 활용한 크롤링 [클릭] iframe/javascript 기반 사이트에 대해선 크롤링 지원이 안됩니다. selenium에 비해 크롤러가 가볍습니다. 2. Selenium을 활용한 크롤링 [클릭] iframe/javascript 기반 사이트에 대해선 크롤링 지원이 됩니다. Nokogiri에 비해 크롤러가 무겁습니다. Heroku 환경에서는크롬 브라우저에 의존합니다. (Heroku 배포환경에서는 크롬 브라우저 버전에 신경써야 합니다.) 3. Mechanize를 활용한 크롤링 (Nokogiri + 로그인 기능) [클릭] Nokogiri에 로그인 ..
해당 글은 https://blog.naver.com/kbs4674/221212397227 로 부터 게시글이 이전되었습니다. 우리는 갑작스러운 상황에 대비(어떤 자료가 필요한데 지금은 소멸되었으나 n일전 DB에는 남겨져 있을 때, 갑작스러운 사이트 해킹, 롤백)를 위해 자료를 백업을 해야 할 필요성이 있습니다. 이번 시간에는 DB를 자동적으로 백업을 설명하고자 합니다. 다만, 제가 사용하는 DB가 PostgreSQL 이다 보니 기본적으로 사용되는 SQLite3가 아닌 PostgreSQL 기준으로 설명하겠습니다. 참고 1) 이 기능은 PostgreSQL DB 기준으로 설명합니다. 2) 예약된 시간에 따라 자동으로 일 처리를 하는 whenever Gem이 선택적으로 필요합니다. ※ 자동 일처리 : whenev..
해당 글은 https://blog.naver.com/kbs4674/221658347447 로 부터 게시글이 이전되었습니다. 일반적으로 레일즈는 서버를 작동을 시키면 터미널에서 아무것도 입력을 못하는 상태가 됩니다. 하지만 Background Job은 서버가 돌아가는 작업이 이루어지는 동시에, 무언가의 작업이 이루어지는것을 뜻합니다. (작업이라 하면은 이메일 전송 등이 되겠죠!) 이번 시간은 Background Job 및 이를 쉽게 사용하도록 도와주는 sidekiq Gem에 대해 알아보도록 하겠습니다. 개념 Background Job을 순차적으로 Background Job에 있어서도, 작업이 들어오자 마자 바로 진행할건지 여러개의 작업이 들어오긴 했으나, 들어온 순서대로 순차적으로 진행할건지 위와같은 방식..
해당 글은 https://blog.naver.com/kbs4674/221197430824 로 부터 게시글이 이전되었습니다. 제 홈페이지 같은 경우는 Paranoia의 기능 중, 만약에 게시글을 삭제되어도 겉으론 삭제된 척, 실제론 삭제가 안되게(DB상에 남아있게) 보존을 해놓는 기능이 있습니다. 하지만 이렇게 이미 한번 삭제된 게시글이 계속 영구적으로 남겨놓으면 좋겠지만.. 계속 쌓이는 더미데이터에 대해 굳이 가지고 있을 필요가 없어, n개월 후에 삭제된 게시글이 자동으로 완전히 삭제되는 방식을 적용하기위해 lib/task과 whenever Gem에 대해 소개하고자 합니다. 참고로 whenever Gem은 레일즈 Active Job의 기술이 쓰이는 Gem 중 하나로서, 홈페이지가 돌아가는 와중에 뒤에서 ..
Ruby on Rails 코드를 짤 때 있어서 남들한테 홈페이즈 결과(프론트)가 보여지는거도 중요하지만, 내부 퍼포먼스도 중요합니다. 사실 레일즈에서는 SQL 문법으로 안쓰고 ORM 방식, 즉 모델 참조 방식으로 데이터 조작을 하다보니 SQL 문법에 관심이 없을 수도 있는데 이는 먼 미래에 있어선 큰 치명적일 수 있습니다. 결국 최종적으로는 Rails에서 작성된 ORM이 SQL로 변환되서 데이터 탐색이 이루어지기 때문입니다. 이번에는 SQL N+1 문제에 대해 맛보기 형식으로 한번 글을 써나아가보고자 합니다. 테이블 쿼리 탐색에 있어, 테이블 및 데이터는 위 테이블 내 자료를 기반으로 진행합니다. SQL N+1 문제 발생 N+1 문제란? SQL 구문 한번의 입력만으로 결과가 나와야 하지만 추가적으로 N번..
Ruby on Rails 코드를 짤 때 있어서 남들한테 홈페이즈 결과(프론트)가 보여지는거도 중요하지만, 내부 퍼포먼스도 중요합니다. 이번에는 SQL 퍼포먼스에 대해 한번 글을 써나아가보고자 합니다. SQL Performance : update / update_all SQL 퍼포먼스를 설명에 있어 대표적으로 update, update_all 메소드에 대해 살펴보겠습니다. 1) update : 조건에 맞는 메소드에 대해 Attribute 내용을 수정합니다. 2) update_all : 조건에 맞는 데이터 전체를 한번에 수정합니다. 비교분석 SQL 작업 속도 update 메소드를 통해서도 조건에 맞는 다수의 데이터를 한번에 수정할 수 있긴 합니다. 그런데 update 메소드와 update_all 메소드의 모..
해당 글은 https://blog.naver.com/kbs4674/221420285631 로 부터 게시글이 이전되었습니다. 루비온 레일즈에서 다루는 여러가지 메소드를 소개하고자 합니다. 위 테이블의 자료를 기반으로 한번 여러 메소드를 알아보겠습니다. 1. where VS find_by 1) where : 조건에 맞는 데이터에 대해 여러 개의 데이터 결과가 출력됩니다. # Model.where(attribute: value) Post.where(title: "서윤 연구소") 2) find_by : 조건에 맞는 데이터에 대해 한 개의 데이터 결과가 출력됩니다. 출력되는 한 개의 데이터는 제일 처음에 쓰여진 데이터입니다. 번외 여기서 where에 대해서 좀 더 깊게 짚어보자면, 아까와는 조금 다르게 # Mod..