노드 4

2. 일렉트론(node)에서 웹 페이지 크롤링 하기

2. 일렉트론(node)에서 웹 페이지 크롤링 하기 1. 왜 일렉트론에서? 굳이 크롤링을 서버 프로그램처럼 돌릴 필요가 있을까에서 시작되었다. 사용자가 편하게 필요한 내용을 크롤링하는 것. 굳이 서버에 요청하지 않아도 손쉽게 크롤링 결과를 얻을 수 있다는 점이 일렉트론과 크롤러를 합치는 이유가 아닐까 싶다. 2. 예제 코드 예제 코드에 앞서 크롤링에는 axios와 cheerio를 사용했으며, 둘 다 npm install axios cherrio --save 명령으로 설치해주면 된다. const { app } = require('electron'); const axios = require('axios'); const cheerio = require('cheerio'); app.on('ready', ()=>..

[서버] Node.js Redis Only (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT allowed in this context 오류 해결

Socket.io를 이용하여 데이터 크롤링 결과를 실시간으로 뿌려주는 기능을 구현하였다. 물론 Node.js를 두개로 나누어 웹 서비스용과 데이터 크롤링 및 전송용으로 나눠서 사용했지만, Node.js http request 모듈이 특정 사이트에 가면 timeout이 생기는 문제가 발생했다.(Node.js가 Non-blocking이 아니었나..) 그래서 서버를 웹 서비스 / 데이터 크롤링 / 데이터 전송 세가지로 나누고, 데이터 크롤링 서버가 데이터를 redis 상에 업데이트 하면 이 정보를 데이터 전송 서버에 전달하도록 구현하는데 redis publish, subscribe를 사용했다. 우선 데이터 크롤링에서 얻은 데이터는 실시간 데이터기 때문에 소실되어도 문제가 크게 없어서, redis pub/sub..

[자바스크립트] Node.js, 자바스크립트 Object(Associative array) 종료 및 콜백

jQuery에서 동일한 DOM의 반복적인 selector를 사용을 방지하기 위해서나, K-V 형식으로 데이터를 저장할때 Object를 많이 사용한다. 이런 Object안에서 전체 Key를 찾아 순회할 때, Object.keys(obj)형식을 많이 사용한다. 특히, Object.keys(obj).forEach(function(k,v){})를 이용하여 Loop 문까지 한번에 처리하는 경우가 많은데, 여기서 Callback을 사용하는 경우 callback 호출후에도 루프가 Break되지 않는 문제가 생긴다. var obj = { 'abc':1 , 'bcd':2'}; function run(obj, callback){ Object.keys(obj).forEach(function(k,v){ if(k == 'abc..

[Node.js] Jade(pug) 템플릿 엔진 속도 문제

요약 : 1. Node.js에서 사용하는 Pug 템플릿 엔진 (Jade)를 이용하면 간단한 페이지도 로드되는데 굉장히 오래 걸린다. 2. 코드를 구성하기 나름이지만, 쿼리 + Pug 컴파일 + 변수 대입 + 요청 응답의 4단계에서 컴파일 타임이 약 8할이상 시간이 걸린다. (응답시간 1초의 경우 약 800ms이상 소요) 3. Pug 엔진에서 캐시가 가능하다. 결과 : 컴파일 시간이 0ms으로, 응답시간이 5배 이상 빨라진다. var fn = pug.compileFile('파일.pug',{ basedir:__dirname, cache:true }); res.writeHead(200, {'Content-Type' : 'text/html'}); res.end(fn(varlist)); 캐시이므로, 서버 켜질때 ..

페이스북으로 공유카카오톡으로 공유카카오스토리로 공유트위터로 공유URL 복사